diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..96bbfce --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,39 @@ +name: Utils tests + +on: + push: + branches: + - 'main' + tags: + - 'v*' + + pull_request: + types: [opened, synchronize, reopened] + +jobs: + tests: + runs-on: ubuntu-22.04 + permissions: + # Required to checkout the code + contents: read + strategy: + # If set to true, Github will cancel all other jobs if one of the jobs fails + fail-fast: false + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 22.1.0 + + - name: Install dependencies + run: yarn install + + - name: Build utils + run: yarn build + + - name: Run tests + run: yarn test diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 4aea4d4..b883b08 100644 Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ diff --git a/README.md b/README.md index 27b2c09..8c0c3ff 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ Utils useful for Editor.js tools development ## Packages -- Caret -- Dom -- Helpers -- Keyboard +- [Caret](https://github.com/editor-js/utils/tree/main/packages/caret) +- [Dom](https://github.com/editor-js/utils/tree/main/packages/dom) +- [Helpers](https://github.com/editor-js/utils/tree/main/packages/helpers) +- [Keyboard](https://github.com/editor-js/utils/tree/main/packages/keyboard) You can use them via installing from npm: diff --git a/eslint.config.mjs b/eslint.config.mjs index e363f65..b731cc8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -27,7 +27,7 @@ export default [ rules: { 'n/no-missing-import': ['off'], 'n/no-extraneous-import': ['error', { - allowModules: ['nanoid'], + allowModules: ['nanoid', '@editorjs/caret', '@editorjs/dom', '@editorjs/helpers', '@editorjs/keyboard', 'vitest'], }], 'n/no-unpublished-import': ['off'], 'n/no-unsupported-features/node-builtins': ['error', { diff --git a/package.json b/package.json index 4e0b76c..63a91be 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "build:dom": "cd packages/dom && yarn build", "build:caret": "cd packages/caret && yarn build", "build:keyboard": "cd packages/keyboard && yarn build", + "test": "vitest run", "lint": "eslint", "lint:fix": "yarn lint --fix", "generate-docs": "ts-node scripts/generateReadme.ts" @@ -34,7 +35,9 @@ "fs-extra": "^11.2.0", "ts-node": "^10.9.2", "typescript": "^5.4.5", - "typescript-eslint": "^7.9.0" + "typescript-eslint": "^7.9.0", + "vitest": "1.4.0" }, - "packageManager": "yarn@4.4.0" + "packageManager": "yarn@4.4.0", + "dependencies": {} } diff --git a/packages/caret/README.md b/packages/caret/README.md index fbc591f..247dcd4 100644 --- a/packages/caret/README.md +++ b/packages/caret/README.md @@ -5,14 +5,14 @@ Utils useful for work with caret for Editor.js tools development npm install @editorjs/caret ``` ### Function list -- [checkContenteditableSliceForEmptiness](https://github.com/editor-js/utils/blob/main/packages/caret/src/checkContenteditableSliceForEmptiness.ts) - Checks content at left or right of the passed node for emptiness. -- [focus](https://github.com/editor-js/utils/blob/main/packages/caret/src/focus.ts) - Set focus to contenteditable or native input element -- [getCaretNodeAndOffset](https://github.com/editor-js/utils/blob/main/packages/caret/src/getCaretNodeAndOffset.ts) - Returns TextNode containing a caret and a caret offset in it -- [getContenteditableSlice](https://github.com/editor-js/utils/blob/main/packages/caret/src/getContenteditableSlice.ts) - Returns slice of the contenteditable html element from caret position to the start or end (depending on direction) -- [getRange](https://github.com/editor-js/utils/blob/main/packages/caret/src/getRange.ts) - Returns the first range -- [isCaretAtEndOfInput](https://github.com/editor-js/utils/blob/main/packages/caret/src/isCaretAtEndOfInput.ts) - Checks if caret is at the end of the passed input -- [isCaretAtStartOfInput](https://github.com/editor-js/utils/blob/main/packages/caret/src/isCaretAtStartOfInput.ts) - Checks if caret is at the start of the passed input -- [save](https://github.com/editor-js/utils/blob/main/packages/caret/src/save.ts) - Saves caret position using hidden +- [checkContenteditableSliceForEmptiness](https://github.com/editor-js/utils/blob/main/packages/caret/src/checkContenteditableSliceForEmptiness/checkContenteditableSliceForEmptiness.ts) - Checks content at left or right of the passed node for emptiness. +- [focus](https://github.com/editor-js/utils/blob/main/packages/caret/src/focus/focus.ts) - Set focus to contenteditable or native input element +- [getCaretNodeAndOffset](https://github.com/editor-js/utils/blob/main/packages/caret/src/getCaretNodeAndOffset/getCaretNodeAndOffset.ts) - Returns TextNode containing a caret and a caret offset in it +- [getContenteditableSlice](https://github.com/editor-js/utils/blob/main/packages/caret/src/getContenteditableSlice/getContenteditableSlice.ts) - Returns slice of the contenteditable html element from caret position to the start or end (depending on direction) +- [getRange](https://github.com/editor-js/utils/blob/main/packages/caret/src/getRange/getRange.ts) - Returns the first range +- [isCaretAtEndOfInput](https://github.com/editor-js/utils/blob/main/packages/caret/src/isCaretAtEndOfInput/isCaretAtEndOfInput.ts) - Checks if caret is at the end of the passed input +- [isCaretAtStartOfInput](https://github.com/editor-js/utils/blob/main/packages/caret/src/isCaretAtStartOfInput/isCaretAtStartOfInput.ts) - Checks if caret is at the start of the passed input +- [save](https://github.com/editor-js/utils/blob/main/packages/caret/src/save/save.ts) - Saves caret position using hidden # About CodeX diff --git a/packages/caret/src/checkContenteditableSliceForEmptiness.ts b/packages/caret/src/checkContenteditableSliceForEmptiness/checkContenteditableSliceForEmptiness.ts similarity index 90% rename from packages/caret/src/checkContenteditableSliceForEmptiness.ts rename to packages/caret/src/checkContenteditableSliceForEmptiness/checkContenteditableSliceForEmptiness.ts index 511af48..e8e6882 100644 --- a/packages/caret/src/checkContenteditableSliceForEmptiness.ts +++ b/packages/caret/src/checkContenteditableSliceForEmptiness/checkContenteditableSliceForEmptiness.ts @@ -1,5 +1,5 @@ import { isCollapsedWhitespaces } from '@editorjs/dom'; -import { getContenteditableSlice } from './getContenteditableSlice'; +import { getContenteditableSlice } from '../getContenteditableSlice/getContenteditableSlice'; /** * Checks content at left or right of the passed node for emptiness. diff --git a/packages/caret/src/checkContenteditableSliceForEmptiness/index.ts b/packages/caret/src/checkContenteditableSliceForEmptiness/index.ts new file mode 100644 index 0000000..869f1e0 --- /dev/null +++ b/packages/caret/src/checkContenteditableSliceForEmptiness/index.ts @@ -0,0 +1,3 @@ +import { checkContenteditableSliceForEmptiness } from './checkContenteditableSliceForEmptiness'; + +export { checkContenteditableSliceForEmptiness }; diff --git a/packages/caret/src/focus.ts b/packages/caret/src/focus/focus.ts similarity index 100% rename from packages/caret/src/focus.ts rename to packages/caret/src/focus/focus.ts diff --git a/packages/caret/src/focus/index.ts b/packages/caret/src/focus/index.ts new file mode 100644 index 0000000..89ba1e9 --- /dev/null +++ b/packages/caret/src/focus/index.ts @@ -0,0 +1,3 @@ +import { focus } from './focus'; + +export { focus }; diff --git a/packages/caret/src/getCaretNodeAndOffset.ts b/packages/caret/src/getCaretNodeAndOffset/getCaretNodeAndOffset.ts similarity index 100% rename from packages/caret/src/getCaretNodeAndOffset.ts rename to packages/caret/src/getCaretNodeAndOffset/getCaretNodeAndOffset.ts diff --git a/packages/caret/src/getCaretNodeAndOffset/index.ts b/packages/caret/src/getCaretNodeAndOffset/index.ts new file mode 100644 index 0000000..bbed263 --- /dev/null +++ b/packages/caret/src/getCaretNodeAndOffset/index.ts @@ -0,0 +1,3 @@ +import { getCaretNodeAndOffset } from './getCaretNodeAndOffset'; + +export { getCaretNodeAndOffset }; diff --git a/packages/caret/src/getContenteditableSlice.ts b/packages/caret/src/getContenteditableSlice/getContenteditableSlice.ts similarity index 100% rename from packages/caret/src/getContenteditableSlice.ts rename to packages/caret/src/getContenteditableSlice/getContenteditableSlice.ts diff --git a/packages/caret/src/getContenteditableSlice/index.ts b/packages/caret/src/getContenteditableSlice/index.ts new file mode 100644 index 0000000..817f080 --- /dev/null +++ b/packages/caret/src/getContenteditableSlice/index.ts @@ -0,0 +1,3 @@ +import { getContenteditableSlice } from './getContenteditableSlice'; + +export { getContenteditableSlice }; diff --git a/packages/caret/src/getRange.ts b/packages/caret/src/getRange/getRange.ts similarity index 100% rename from packages/caret/src/getRange.ts rename to packages/caret/src/getRange/getRange.ts diff --git a/packages/caret/src/getRange/index.ts b/packages/caret/src/getRange/index.ts new file mode 100644 index 0000000..71eba42 --- /dev/null +++ b/packages/caret/src/getRange/index.ts @@ -0,0 +1,3 @@ +import { getRange } from './getRange'; + +export { getRange }; diff --git a/packages/caret/src/isCaretAtEndOfInput/index.ts b/packages/caret/src/isCaretAtEndOfInput/index.ts new file mode 100644 index 0000000..5f604af --- /dev/null +++ b/packages/caret/src/isCaretAtEndOfInput/index.ts @@ -0,0 +1,3 @@ +import { isCaretAtEndOfInput } from './isCaretAtEndOfInput'; + +export { isCaretAtEndOfInput }; diff --git a/packages/caret/src/isCaretAtEndOfInput.ts b/packages/caret/src/isCaretAtEndOfInput/isCaretAtEndOfInput.ts similarity index 89% rename from packages/caret/src/isCaretAtEndOfInput.ts rename to packages/caret/src/isCaretAtEndOfInput/isCaretAtEndOfInput.ts index edf846c..7be12db 100644 --- a/packages/caret/src/isCaretAtEndOfInput.ts +++ b/packages/caret/src/isCaretAtEndOfInput/isCaretAtEndOfInput.ts @@ -1,6 +1,6 @@ import { getDeepestNode, isNativeInput } from '@editorjs/dom'; -import { getCaretNodeAndOffset } from './getCaretNodeAndOffset'; -import { checkContenteditableSliceForEmptiness } from './checkContenteditableSliceForEmptiness'; +import { getCaretNodeAndOffset } from '../getCaretNodeAndOffset'; +import { checkContenteditableSliceForEmptiness } from '../checkContenteditableSliceForEmptiness'; /** * Checks if caret is at the end of the passed input diff --git a/packages/caret/src/isCaretAtStartOfInput/index.ts b/packages/caret/src/isCaretAtStartOfInput/index.ts new file mode 100644 index 0000000..45c31d1 --- /dev/null +++ b/packages/caret/src/isCaretAtStartOfInput/index.ts @@ -0,0 +1,3 @@ +import { isCaretAtStartOfInput } from './isCaretAtStartOfInput'; + +export { isCaretAtStartOfInput }; diff --git a/packages/caret/src/isCaretAtStartOfInput.ts b/packages/caret/src/isCaretAtStartOfInput/isCaretAtStartOfInput.ts similarity index 86% rename from packages/caret/src/isCaretAtStartOfInput.ts rename to packages/caret/src/isCaretAtStartOfInput/isCaretAtStartOfInput.ts index fb27f86..bf4d50a 100644 --- a/packages/caret/src/isCaretAtStartOfInput.ts +++ b/packages/caret/src/isCaretAtStartOfInput/isCaretAtStartOfInput.ts @@ -1,6 +1,6 @@ import { getDeepestNode, isEmpty, isNativeInput } from '@editorjs/dom'; -import { getCaretNodeAndOffset } from './getCaretNodeAndOffset'; -import { checkContenteditableSliceForEmptiness } from './checkContenteditableSliceForEmptiness'; +import { getCaretNodeAndOffset } from '../getCaretNodeAndOffset/getCaretNodeAndOffset'; +import { checkContenteditableSliceForEmptiness } from '../checkContenteditableSliceForEmptiness/checkContenteditableSliceForEmptiness'; /** * Checks if caret is at the start of the passed input diff --git a/packages/caret/src/save/index.ts b/packages/caret/src/save/index.ts new file mode 100644 index 0000000..4bdaf4d --- /dev/null +++ b/packages/caret/src/save/index.ts @@ -0,0 +1,3 @@ +import { save } from './save'; + +export { save }; diff --git a/packages/caret/src/save.ts b/packages/caret/src/save/save.ts similarity index 94% rename from packages/caret/src/save.ts rename to packages/caret/src/save/save.ts index f995062..d0a10db 100644 --- a/packages/caret/src/save.ts +++ b/packages/caret/src/save/save.ts @@ -1,5 +1,5 @@ import { make } from '@editorjs/dom'; -import { getRange } from './getRange'; +import { getRange } from '../getRange/getRange'; /** * Saves caret position using hidden diff --git a/packages/dom/README.md b/packages/dom/README.md index fc44d78..91fa84f 100644 --- a/packages/dom/README.md +++ b/packages/dom/README.md @@ -5,31 +5,31 @@ Utils useful for work with dom for Editor.js tools development npm install @editorjs/dom ``` ### Function list -- [allInputsSelector](https://github.com/editor-js/utils/blob/main/packages/dom/src/allInputsSelector.ts) - Returns CSS selector for all text inputs -- [append](https://github.com/editor-js/utils/blob/main/packages/dom/src/append.ts) - Append one or several elements to the parent -- [blockElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/blockElements.ts) - Return array of names of block html elements -- [calculateBaseline](https://github.com/editor-js/utils/blob/main/packages/dom/src/calculateBaseline.ts) - Calculates the Y coordinate of the text baseline from the top of the element's margin box, -- [canSetCaret](https://github.com/editor-js/utils/blob/main/packages/dom/src/canSetCaret.ts) - Checks if we can set caret -- [containsOnlyInlineElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/containsOnlyInlineElements.ts) - Check if passed content includes only inline elements -- [findAllInputs](https://github.com/editor-js/utils/blob/main/packages/dom/src/findAllInputs.ts) - Find all contenteditable, textarea and editable input elements passed holder contains -- [fragmentToString](https://github.com/editor-js/utils/blob/main/packages/dom/src/fragmentToString.ts) - Returns the HTML content of passed Document Fragment -- [getContentLength](https://github.com/editor-js/utils/blob/main/packages/dom/src/getContentLength.ts) - Return length of node`s text content -- [getDeepestBlockElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/getDeepestBlockElements.ts) - Find and return all block elements in the passed parent (including subtree) -- [getDeepestNode](https://github.com/editor-js/utils/blob/main/packages/dom/src/getDeepestNode.ts) - Search for deepest node which is Leaf. -- [isCollapsedWhitespaces](https://github.com/editor-js/utils/blob/main/packages/dom/src/isCollapsedWhitespaces.ts) - Determine whether a passed text content is a collapsed whitespace. -- [isContentEditable](https://github.com/editor-js/utils/blob/main/packages/dom/src/isContentEditable.ts) - Check if passed element is contenteditable -- [isElement](https://github.com/editor-js/utils/blob/main/packages/dom/src/isElement.ts) - Check if object is DOM node -- [isEmpty](https://github.com/editor-js/utils/blob/main/packages/dom/src/isEmpty.ts) - breadth-first search (BFS) -- [isFragment](https://github.com/editor-js/utils/blob/main/packages/dom/src/isFragment.ts) - Check if object is DocumentFragment node -- [isHTMLString](https://github.com/editor-js/utils/blob/main/packages/dom/src/isHtmlString.ts) - Check if string contains html elements -- [isLeaf](https://github.com/editor-js/utils/blob/main/packages/dom/src/isLeaf.ts) - checks node if it is doesn't have any child nodes -- [isLineBreakTag](https://github.com/editor-js/utils/blob/main/packages/dom/src/isLineBreakTag.ts) - Check if element is BR or WBR -- [isNativeInput](https://github.com/editor-js/utils/blob/main/packages/dom/src/isNativeInput.ts) - Checks target if it is native input -- [isNodeEmpty](https://github.com/editor-js/utils/blob/main/packages/dom/src/isNodeEmpty.ts) - Checks node if it is empty -- [isSingleTag](https://github.com/editor-js/utils/blob/main/packages/dom/src/isSingleTag.ts) - Check if passed tag has no closed tag -- [make](https://github.com/editor-js/utils/blob/main/packages/dom/src/make.ts) - Helper for making Elements with class name and attributes -- [offset](https://github.com/editor-js/utils/blob/main/packages/dom/src/offset.ts) - Return element's offset related to the document -- [prepend](https://github.com/editor-js/utils/blob/main/packages/dom/src/prepend.ts) - Append element or a couple to the beginning of the parent elements +- [allInputsSelector](https://github.com/editor-js/utils/blob/main/packages/dom/src/allInputsSelector/allInputsSelector.ts) - Returns CSS selector for all text inputs +- [append](https://github.com/editor-js/utils/blob/main/packages/dom/src/append/append.ts) - Append one or several elements to the parent +- [blockElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/blockElements/blockElements.ts) - Return array of names of block html elements +- [calculateBaseline](https://github.com/editor-js/utils/blob/main/packages/dom/src/calculateBaseline/calculateBaseline.ts) - Calculates the Y coordinate of the text baseline from the top of the element's margin box, +- [canSetCaret](https://github.com/editor-js/utils/blob/main/packages/dom/src/canSetCaret/canSetCaret.ts) - Checks if we can set caret +- [containsOnlyInlineElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/containsOnlyInlineElements/containsOnlyInlineElements.ts) - Check if passed content includes only inline elements +- [findAllInputs](https://github.com/editor-js/utils/blob/main/packages/dom/src/findAllInputs/findAllInputs.ts) - Find all contenteditable, textarea and editable input elements passed holder contains +- [fragmentToString](https://github.com/editor-js/utils/blob/main/packages/dom/src/fragmentToString/fragmentToString.ts) - Returns the HTML content of passed Document Fragment +- [getContentLength](https://github.com/editor-js/utils/blob/main/packages/dom/src/getContentLength/getContentLength.ts) - Return length of node`s text content +- [getDeepestBlockElements](https://github.com/editor-js/utils/blob/main/packages/dom/src/getDeepestBlockElements/getDeepestBlockElements.ts) - Find and return all block elements in the passed parent (including subtree) +- [getDeepestNode](https://github.com/editor-js/utils/blob/main/packages/dom/src/getDeepestNode/getDeepestNode.ts) - Search for deepest node which is Leaf. +- [isCollapsedWhitespaces](https://github.com/editor-js/utils/blob/main/packages/dom/src/isCollapsedWhitespaces/isCollapsedWhitespaces.ts) - Determine whether a passed text content is a collapsed whitespace. +- [isContentEditable](https://github.com/editor-js/utils/blob/main/packages/dom/src/isContentEditable/isContentEditable.ts) - Check if passed element is contenteditable +- [isElement](https://github.com/editor-js/utils/blob/main/packages/dom/src/isElement/isElement.ts) - Check if object is DOM node +- [isEmpty](https://github.com/editor-js/utils/blob/main/packages/dom/src/isEmpty/isEmpty.ts) - breadth-first search (BFS) +- [isFragment](https://github.com/editor-js/utils/blob/main/packages/dom/src/isFragment/isFragment.ts) - Check if object is DocumentFragment node +- [isHTMLString](https://github.com/editor-js/utils/blob/main/packages/dom/src/isHtmlString/isHtmlString.ts) - Check if string contains html elements +- [isLeaf](https://github.com/editor-js/utils/blob/main/packages/dom/src/isLeaf/isLeaf.ts) - checks node if it is doesn't have any child nodes +- [isLineBreakTag](https://github.com/editor-js/utils/blob/main/packages/dom/src/isLineBreakTag/isLineBreakTag.ts) - Check if element is BR or WBR +- [isNativeInput](https://github.com/editor-js/utils/blob/main/packages/dom/src/isNativeInput/isNativeInput.ts) - Checks target if it is native input +- [isNodeEmpty](https://github.com/editor-js/utils/blob/main/packages/dom/src/isNodeEmpty/isNodeEmpty.ts) - Checks node if it is empty +- [isSingleTag](https://github.com/editor-js/utils/blob/main/packages/dom/src/isSingleTag/isSingleTag.ts) - Check if passed tag has no closed tag +- [make](https://github.com/editor-js/utils/blob/main/packages/dom/src/make/make.ts) - Helper for making Elements with class name and attributes +- [offset](https://github.com/editor-js/utils/blob/main/packages/dom/src/offset/offset.ts) - Return element's offset related to the document +- [prepend](https://github.com/editor-js/utils/blob/main/packages/dom/src/prepend/prepend.ts) - Append element or a couple to the beginning of the parent elements # About CodeX diff --git a/packages/dom/src/allInputsSelector.ts b/packages/dom/src/allInputsSelector/allInputsSelector.ts similarity index 100% rename from packages/dom/src/allInputsSelector.ts rename to packages/dom/src/allInputsSelector/allInputsSelector.ts diff --git a/packages/dom/src/allInputsSelector/index.ts b/packages/dom/src/allInputsSelector/index.ts new file mode 100644 index 0000000..4e2b331 --- /dev/null +++ b/packages/dom/src/allInputsSelector/index.ts @@ -0,0 +1,3 @@ +import { allInputsSelector } from './allInputsSelector'; + +export { allInputsSelector }; diff --git a/packages/dom/src/append.ts b/packages/dom/src/append/append.ts similarity index 100% rename from packages/dom/src/append.ts rename to packages/dom/src/append/append.ts diff --git a/packages/dom/src/append/index.ts b/packages/dom/src/append/index.ts new file mode 100644 index 0000000..150762a --- /dev/null +++ b/packages/dom/src/append/index.ts @@ -0,0 +1,3 @@ +import { append } from './append'; + +export { append }; diff --git a/packages/dom/src/blockElements.ts b/packages/dom/src/blockElements/blockElements.ts similarity index 100% rename from packages/dom/src/blockElements.ts rename to packages/dom/src/blockElements/blockElements.ts diff --git a/packages/dom/src/blockElements/index.ts b/packages/dom/src/blockElements/index.ts new file mode 100644 index 0000000..fea064f --- /dev/null +++ b/packages/dom/src/blockElements/index.ts @@ -0,0 +1,3 @@ +import { blockElements } from './blockElements'; + +export { blockElements }; diff --git a/packages/dom/src/calculateBaseline.ts b/packages/dom/src/calculateBaseline/calculateBaseline.ts similarity index 100% rename from packages/dom/src/calculateBaseline.ts rename to packages/dom/src/calculateBaseline/calculateBaseline.ts diff --git a/packages/dom/src/calculateBaseline/index.ts b/packages/dom/src/calculateBaseline/index.ts new file mode 100644 index 0000000..47a29d7 --- /dev/null +++ b/packages/dom/src/calculateBaseline/index.ts @@ -0,0 +1,3 @@ +import { calculateBaseline } from './calculateBaseline'; + +export { calculateBaseline }; diff --git a/packages/dom/src/canSetCaret.ts b/packages/dom/src/canSetCaret/canSetCaret.ts similarity index 84% rename from packages/dom/src/canSetCaret.ts rename to packages/dom/src/canSetCaret/canSetCaret.ts index c972fc5..6b48d1e 100644 --- a/packages/dom/src/canSetCaret.ts +++ b/packages/dom/src/canSetCaret/canSetCaret.ts @@ -1,5 +1,5 @@ -import { isNativeInput } from './isNativeInput'; -import { isContentEditable } from './isContentEditable'; +import { isNativeInput } from '../isNativeInput'; +import { isContentEditable } from '../isContentEditable'; /** * Checks if we can set caret diff --git a/packages/dom/src/canSetCaret/index.ts b/packages/dom/src/canSetCaret/index.ts new file mode 100644 index 0000000..d6bea95 --- /dev/null +++ b/packages/dom/src/canSetCaret/index.ts @@ -0,0 +1,3 @@ +import { canSetCaret } from './canSetCaret'; + +export { canSetCaret }; diff --git a/packages/dom/src/containsOnlyInlineElements.ts b/packages/dom/src/containsOnlyInlineElements/containsOnlyInlineElements.ts similarity index 93% rename from packages/dom/src/containsOnlyInlineElements.ts rename to packages/dom/src/containsOnlyInlineElements/containsOnlyInlineElements.ts index f082503..f6e9ffc 100644 --- a/packages/dom/src/containsOnlyInlineElements.ts +++ b/packages/dom/src/containsOnlyInlineElements/containsOnlyInlineElements.ts @@ -1,5 +1,5 @@ import { isString } from '@editorjs/helpers'; -import { blockElements } from './blockElements'; +import { blockElements } from '../blockElements'; /** * Check if passed content includes only inline elements diff --git a/packages/dom/src/containsOnlyInlineElements/index.ts b/packages/dom/src/containsOnlyInlineElements/index.ts new file mode 100644 index 0000000..193fadf --- /dev/null +++ b/packages/dom/src/containsOnlyInlineElements/index.ts @@ -0,0 +1,3 @@ +import { containsOnlyInlineElements } from './containsOnlyInlineElements'; + +export { containsOnlyInlineElements }; diff --git a/packages/dom/src/findAllInputs.ts b/packages/dom/src/findAllInputs/findAllInputs.ts similarity index 75% rename from packages/dom/src/findAllInputs.ts rename to packages/dom/src/findAllInputs/findAllInputs.ts index 032027b..c387f93 100644 --- a/packages/dom/src/findAllInputs.ts +++ b/packages/dom/src/findAllInputs/findAllInputs.ts @@ -1,7 +1,7 @@ -import { containsOnlyInlineElements } from './containsOnlyInlineElements'; -import { getDeepestBlockElements } from './getDeepestBlockElements'; -import { allInputsSelector } from './allInputsSelector'; -import { isNativeInput } from './isNativeInput'; +import { containsOnlyInlineElements } from '../containsOnlyInlineElements'; +import { getDeepestBlockElements } from '../getDeepestBlockElements'; +import { allInputsSelector } from '../allInputsSelector'; +import { isNativeInput } from '../isNativeInput'; /** * Find all contenteditable, textarea and editable input elements passed holder contains diff --git a/packages/dom/src/findAllInputs/index.ts b/packages/dom/src/findAllInputs/index.ts new file mode 100644 index 0000000..5861f59 --- /dev/null +++ b/packages/dom/src/findAllInputs/index.ts @@ -0,0 +1,3 @@ +import { findAllInputs } from './findAllInputs'; + +export { findAllInputs }; diff --git a/packages/dom/src/fragmentToString.ts b/packages/dom/src/fragmentToString/fragmentToString.ts similarity index 91% rename from packages/dom/src/fragmentToString.ts rename to packages/dom/src/fragmentToString/fragmentToString.ts index be2432e..db1a968 100644 --- a/packages/dom/src/fragmentToString.ts +++ b/packages/dom/src/fragmentToString/fragmentToString.ts @@ -1,4 +1,4 @@ -import { make } from './make'; +import { make } from '../make'; /** * Returns the HTML content of passed Document Fragment diff --git a/packages/dom/src/fragmentToString/index.ts b/packages/dom/src/fragmentToString/index.ts new file mode 100644 index 0000000..a7a4a8d --- /dev/null +++ b/packages/dom/src/fragmentToString/index.ts @@ -0,0 +1,3 @@ +import { fragmentToString } from './fragmentToString'; + +export { fragmentToString }; diff --git a/packages/dom/src/getContentLength.ts b/packages/dom/src/getContentLength/getContentLength.ts similarity index 89% rename from packages/dom/src/getContentLength.ts rename to packages/dom/src/getContentLength/getContentLength.ts index 85fed94..8b63af3 100644 --- a/packages/dom/src/getContentLength.ts +++ b/packages/dom/src/getContentLength/getContentLength.ts @@ -1,4 +1,4 @@ -import { isNativeInput } from './isNativeInput'; +import { isNativeInput } from '../isNativeInput'; /** * Return length of node`s text content diff --git a/packages/dom/src/getContentLength/index.ts b/packages/dom/src/getContentLength/index.ts new file mode 100644 index 0000000..3d33e54 --- /dev/null +++ b/packages/dom/src/getContentLength/index.ts @@ -0,0 +1,3 @@ +import { getContentLength } from './getContentLength'; + +export { getContentLength }; diff --git a/packages/dom/src/getDeepestBlockElements.ts b/packages/dom/src/getDeepestBlockElements/getDeepestBlockElements.ts similarity index 85% rename from packages/dom/src/getDeepestBlockElements.ts rename to packages/dom/src/getDeepestBlockElements/getDeepestBlockElements.ts index 40901ff..b891431 100644 --- a/packages/dom/src/getDeepestBlockElements.ts +++ b/packages/dom/src/getDeepestBlockElements/getDeepestBlockElements.ts @@ -1,4 +1,4 @@ -import { containsOnlyInlineElements } from './containsOnlyInlineElements'; +import { containsOnlyInlineElements } from '../containsOnlyInlineElements'; /** * Find and return all block elements in the passed parent (including subtree) diff --git a/packages/dom/src/getDeepestBlockElements/index.ts b/packages/dom/src/getDeepestBlockElements/index.ts new file mode 100644 index 0000000..197068b --- /dev/null +++ b/packages/dom/src/getDeepestBlockElements/index.ts @@ -0,0 +1,3 @@ +import { getDeepestBlockElements } from './getDeepestBlockElements'; + +export { getDeepestBlockElements }; diff --git a/packages/dom/src/getDeepestNode.ts b/packages/dom/src/getDeepestNode/getDeepestNode.ts similarity index 93% rename from packages/dom/src/getDeepestNode.ts rename to packages/dom/src/getDeepestNode/getDeepestNode.ts index 9afc2e3..a8af398 100644 --- a/packages/dom/src/getDeepestNode.ts +++ b/packages/dom/src/getDeepestNode/getDeepestNode.ts @@ -1,6 +1,6 @@ -import { isNativeInput } from './isNativeInput'; -import { isLineBreakTag } from './isLineBreakTag'; -import { isSingleTag } from './isSingleTag'; +import { isNativeInput } from '../isNativeInput'; +import { isLineBreakTag } from '../isLineBreakTag'; +import { isSingleTag } from '../isSingleTag'; /** * Search for deepest node which is Leaf. diff --git a/packages/dom/src/getDeepestNode/index.ts b/packages/dom/src/getDeepestNode/index.ts new file mode 100644 index 0000000..8299807 --- /dev/null +++ b/packages/dom/src/getDeepestNode/index.ts @@ -0,0 +1,3 @@ +import { getDeepestNode } from './getDeepestNode'; + +export { getDeepestNode }; diff --git a/packages/dom/src/isCollapsedWhitespaces/index.ts b/packages/dom/src/isCollapsedWhitespaces/index.ts new file mode 100644 index 0000000..04386e5 --- /dev/null +++ b/packages/dom/src/isCollapsedWhitespaces/index.ts @@ -0,0 +1,3 @@ +import { isCollapsedWhitespaces } from './isCollapsedWhitespaces'; + +export { isCollapsedWhitespaces }; diff --git a/packages/dom/src/isCollapsedWhitespaces.ts b/packages/dom/src/isCollapsedWhitespaces/isCollapsedWhitespaces.ts similarity index 100% rename from packages/dom/src/isCollapsedWhitespaces.ts rename to packages/dom/src/isCollapsedWhitespaces/isCollapsedWhitespaces.ts diff --git a/packages/dom/src/isContentEditable/index.ts b/packages/dom/src/isContentEditable/index.ts new file mode 100644 index 0000000..e9c63bd --- /dev/null +++ b/packages/dom/src/isContentEditable/index.ts @@ -0,0 +1,3 @@ +import { isContentEditable } from './isContentEditable'; + +export { isContentEditable }; diff --git a/packages/dom/src/isContentEditable.ts b/packages/dom/src/isContentEditable/isContentEditable.ts similarity index 100% rename from packages/dom/src/isContentEditable.ts rename to packages/dom/src/isContentEditable/isContentEditable.ts diff --git a/packages/dom/src/isElement/index.ts b/packages/dom/src/isElement/index.ts new file mode 100644 index 0000000..501afc8 --- /dev/null +++ b/packages/dom/src/isElement/index.ts @@ -0,0 +1,3 @@ +import { isElement } from './isElement'; + +export { isElement }; diff --git a/packages/dom/src/isElement.ts b/packages/dom/src/isElement/isElement.ts similarity index 100% rename from packages/dom/src/isElement.ts rename to packages/dom/src/isElement/isElement.ts diff --git a/packages/dom/src/isEmpty/index.ts b/packages/dom/src/isEmpty/index.ts new file mode 100644 index 0000000..724e150 --- /dev/null +++ b/packages/dom/src/isEmpty/index.ts @@ -0,0 +1,3 @@ +import { isEmpty } from './isEmpty'; + +export { isEmpty }; diff --git a/packages/dom/src/isEmpty.ts b/packages/dom/src/isEmpty/isEmpty.ts similarity index 91% rename from packages/dom/src/isEmpty.ts rename to packages/dom/src/isEmpty/isEmpty.ts index 45812ae..5028020 100644 --- a/packages/dom/src/isEmpty.ts +++ b/packages/dom/src/isEmpty/isEmpty.ts @@ -1,5 +1,5 @@ -import { isLeaf } from './isLeaf'; -import { isNodeEmpty } from './isNodeEmpty'; +import { isLeaf } from '../isLeaf'; +import { isNodeEmpty } from '../isNodeEmpty'; /** * breadth-first search (BFS) diff --git a/packages/dom/src/isFragment/index.ts b/packages/dom/src/isFragment/index.ts new file mode 100644 index 0000000..c755c41 --- /dev/null +++ b/packages/dom/src/isFragment/index.ts @@ -0,0 +1,3 @@ +import { isFragment } from './isFragment'; + +export { isFragment }; diff --git a/packages/dom/src/isFragment.ts b/packages/dom/src/isFragment/isFragment.ts similarity index 100% rename from packages/dom/src/isFragment.ts rename to packages/dom/src/isFragment/isFragment.ts diff --git a/packages/dom/src/isHtmlString/index.ts b/packages/dom/src/isHtmlString/index.ts new file mode 100644 index 0000000..2187f7b --- /dev/null +++ b/packages/dom/src/isHtmlString/index.ts @@ -0,0 +1,3 @@ +import { isHTMLString } from './isHtmlString'; + +export { isHTMLString }; diff --git a/packages/dom/src/isHtmlString.ts b/packages/dom/src/isHtmlString/isHtmlString.ts similarity index 90% rename from packages/dom/src/isHtmlString.ts rename to packages/dom/src/isHtmlString/isHtmlString.ts index 5995776..21bd76a 100644 --- a/packages/dom/src/isHtmlString.ts +++ b/packages/dom/src/isHtmlString/isHtmlString.ts @@ -1,4 +1,4 @@ -import { make } from './make'; +import { make } from '../make'; /** * Check if string contains html elements diff --git a/packages/dom/src/isLeaf/index.ts b/packages/dom/src/isLeaf/index.ts new file mode 100644 index 0000000..750f72e --- /dev/null +++ b/packages/dom/src/isLeaf/index.ts @@ -0,0 +1,3 @@ +import { isLeaf } from './isLeaf'; + +export { isLeaf }; diff --git a/packages/dom/src/isLeaf.ts b/packages/dom/src/isLeaf/isLeaf.ts similarity index 100% rename from packages/dom/src/isLeaf.ts rename to packages/dom/src/isLeaf/isLeaf.ts diff --git a/packages/dom/src/isLineBreakTag/index.ts b/packages/dom/src/isLineBreakTag/index.ts new file mode 100644 index 0000000..e85c870 --- /dev/null +++ b/packages/dom/src/isLineBreakTag/index.ts @@ -0,0 +1,3 @@ +import { isLineBreakTag } from './isLineBreakTag'; + +export { isLineBreakTag }; diff --git a/packages/dom/src/isLineBreakTag.ts b/packages/dom/src/isLineBreakTag/isLineBreakTag.ts similarity index 100% rename from packages/dom/src/isLineBreakTag.ts rename to packages/dom/src/isLineBreakTag/isLineBreakTag.ts diff --git a/packages/dom/src/isNativeInput/index.ts b/packages/dom/src/isNativeInput/index.ts new file mode 100644 index 0000000..26e4fd7 --- /dev/null +++ b/packages/dom/src/isNativeInput/index.ts @@ -0,0 +1,3 @@ +import { isNativeInput } from './isNativeInput'; + +export { isNativeInput }; diff --git a/packages/dom/src/isNativeInput.ts b/packages/dom/src/isNativeInput/isNativeInput.ts similarity index 100% rename from packages/dom/src/isNativeInput.ts rename to packages/dom/src/isNativeInput/isNativeInput.ts diff --git a/packages/dom/src/isNodeEmpty/index.ts b/packages/dom/src/isNodeEmpty/index.ts new file mode 100644 index 0000000..83d03a0 --- /dev/null +++ b/packages/dom/src/isNodeEmpty/index.ts @@ -0,0 +1,3 @@ +import { isNodeEmpty } from './isNodeEmpty'; + +export { isNodeEmpty }; diff --git a/packages/dom/src/isNodeEmpty.ts b/packages/dom/src/isNodeEmpty/isNodeEmpty.ts similarity index 82% rename from packages/dom/src/isNodeEmpty.ts rename to packages/dom/src/isNodeEmpty/isNodeEmpty.ts index 0344fc4..4c87e7c 100644 --- a/packages/dom/src/isNodeEmpty.ts +++ b/packages/dom/src/isNodeEmpty/isNodeEmpty.ts @@ -1,7 +1,7 @@ -import { isLineBreakTag } from './isLineBreakTag'; -import { isElement } from './isElement'; -import { isNativeInput } from './isNativeInput'; -import { isSingleTag } from './isSingleTag'; +import { isLineBreakTag } from '../isLineBreakTag'; +import { isElement } from '../isElement'; +import { isNativeInput } from '../isNativeInput'; +import { isSingleTag } from '../isSingleTag'; /** * Checks node if it is empty diff --git a/packages/dom/src/isSingleTag/index.ts b/packages/dom/src/isSingleTag/index.ts new file mode 100644 index 0000000..d71cd9b --- /dev/null +++ b/packages/dom/src/isSingleTag/index.ts @@ -0,0 +1,3 @@ +import { isSingleTag } from './isSingleTag'; + +export { isSingleTag }; diff --git a/packages/dom/src/isSingleTag.ts b/packages/dom/src/isSingleTag/isSingleTag.ts similarity index 100% rename from packages/dom/src/isSingleTag.ts rename to packages/dom/src/isSingleTag/isSingleTag.ts diff --git a/packages/dom/src/make/index.ts b/packages/dom/src/make/index.ts new file mode 100644 index 0000000..cc05e81 --- /dev/null +++ b/packages/dom/src/make/index.ts @@ -0,0 +1,3 @@ +import { make } from './make'; + +export { make }; diff --git a/packages/dom/src/make.ts b/packages/dom/src/make/make.ts similarity index 100% rename from packages/dom/src/make.ts rename to packages/dom/src/make/make.ts diff --git a/packages/dom/src/offset/index.ts b/packages/dom/src/offset/index.ts new file mode 100644 index 0000000..6bea1b3 --- /dev/null +++ b/packages/dom/src/offset/index.ts @@ -0,0 +1,3 @@ +import { offset } from './offset'; + +export { offset }; diff --git a/packages/dom/src/offset.ts b/packages/dom/src/offset/offset.ts similarity index 100% rename from packages/dom/src/offset.ts rename to packages/dom/src/offset/offset.ts diff --git a/packages/dom/src/prepend/index.ts b/packages/dom/src/prepend/index.ts new file mode 100644 index 0000000..b59f399 --- /dev/null +++ b/packages/dom/src/prepend/index.ts @@ -0,0 +1,3 @@ +import { prepend } from './prepend'; + +export { prepend }; diff --git a/packages/dom/src/prepend.ts b/packages/dom/src/prepend/prepend.ts similarity index 100% rename from packages/dom/src/prepend.ts rename to packages/dom/src/prepend/prepend.ts diff --git a/packages/helpers/README.md b/packages/helpers/README.md index 95bae10..c96bbc3 100644 --- a/packages/helpers/README.md +++ b/packages/helpers/README.md @@ -5,29 +5,29 @@ Utils useful for Editor.js tools development npm install @editorjs/helpers ``` ### Function list -- [beautifyShortcut](https://github.com/editor-js/utils/blob/main/packages/helpers/src/beautifyShortcut.ts) - Make shortcut command more human-readable -- [cacheable](https://github.com/editor-js/utils/blob/main/packages/helpers/src/cacheable.ts) - Decorator which provides ability to cache method or accessor result -- [capitalize](https://github.com/editor-js/utils/blob/main/packages/helpers/src/capitalize.ts) - Capitalizes first letter of the string -- [copyTextToClipboard](https://github.com/editor-js/utils/blob/main/packages/helpers/src/copyTextToClipboard.ts) - Copies passed text to the clipboard -- [debounce](https://github.com/editor-js/utils/blob/main/packages/helpers/src/debounce.ts) - Debouncing method -- [deepMerge](https://github.com/editor-js/utils/blob/main/packages/helpers/src/deepMerge.ts) - Merge two objects recursively -- [deprecationAssert](https://github.com/editor-js/utils/blob/main/packages/helpers/src/deprecationAssert.ts) - Common method for printing a warning about the usage of deprecated property or method. -- [notEmpty](https://github.com/editor-js/utils/blob/main/packages/helpers/src/empty.ts) - True if passed variable is not null/undefined/''/{} -- [isEmpty](https://github.com/editor-js/utils/blob/main/packages/helpers/src/empty.ts) - True if passed variable is null/undefined/''/{} -- [getValidUrl](https://github.com/editor-js/utils/blob/main/packages/helpers/src/getValidUrl.ts) - Returns valid URL. If it is going outside and valid, it returns itself -- [isPrintableKey](https://github.com/editor-js/utils/blob/main/packages/helpers/src/isPrintableKey.ts) - Returns true if passed key code is printable (a-Z, 0-9, etc) character. -- [throttle](https://github.com/editor-js/utils/blob/main/packages/helpers/src/throttle.ts) - Returns a function, that, when invoked, will only be triggered at most once during a given window of time. -- [typeOf](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Return string representation of the object type -- [isFunction](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Check if passed variable is a function -- [isObject](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Checks if passed argument is an object -- [isString](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Checks if passed argument is a string -- [isBoolean](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Checks if passed argument is boolean -- [isNumber](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Checks if passed argument is number -- [isUndefined](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Checks if passed argument is undefined -- [isClass](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Check if passed function is a class -- [isPromise](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf.ts) - Check if passed object is a Promise -- [getUserOS](https://github.com/editor-js/utils/blob/main/packages/helpers/src/userOS.ts) - Returns object with os name as key and boolean as value. Shows current user OS -- [equals](https://github.com/editor-js/utils/blob/main/packages/helpers/src/userOS.ts) - Compares two values with unknown type +- [beautifyShortcut](https://github.com/editor-js/utils/blob/main/packages/helpers/src/beautifyShortcut/beautifyShortcut.ts) - Make shortcut command more human-readable +- [cacheable](https://github.com/editor-js/utils/blob/main/packages/helpers/src/cacheable/cacheable.ts) - Decorator which provides ability to cache method or accessor result +- [capitalize](https://github.com/editor-js/utils/blob/main/packages/helpers/src/capitalize/capitalize.ts) - Capitalizes first letter of the string +- [copyTextToClipboard](https://github.com/editor-js/utils/blob/main/packages/helpers/src/copyTextToClipboard/copyTextToClipboard.ts) - Copies passed text to the clipboard +- [debounce](https://github.com/editor-js/utils/blob/main/packages/helpers/src/debounce/debounce.ts) - Debouncing method +- [deepMerge](https://github.com/editor-js/utils/blob/main/packages/helpers/src/deepMerge/deepMerge.ts) - Merge two objects recursively +- [deprecationAssert](https://github.com/editor-js/utils/blob/main/packages/helpers/src/deprecationAssert/deprecationAssert.ts) - Common method for printing a warning about the usage of deprecated property or method. +- [isEmpty](https://github.com/editor-js/utils/blob/main/packages/helpers/src/empty/isEmpty.ts) - True if passed variable is null/undefined/''/{} +- [notEmpty](https://github.com/editor-js/utils/blob/main/packages/helpers/src/empty/notEmpty.ts) - True if passed variable is not null/undefined/''/{} +- [equals](https://github.com/editor-js/utils/blob/main/packages/helpers/src/equals/equals.ts) - Compares two values with unknown type +- [getValidUrl](https://github.com/editor-js/utils/blob/main/packages/helpers/src/getValidUrl/getValidUrl.ts) - Returns valid URL. If it is going outside and valid, it returns itself +- [isPrintableKey](https://github.com/editor-js/utils/blob/main/packages/helpers/src/isPrintableKey/isPrintableKey.ts) - Returns true if passed key code is printable (a-Z, 0-9, etc) character. +- [throttle](https://github.com/editor-js/utils/blob/main/packages/helpers/src/throttle/throttle.ts) - Returns a function, that, when invoked, will only be triggered at most once during a given window of time. +- [isBoolean](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isBoolean.ts) - Checks if passed argument is boolean +- [isClass](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isClass.ts) - Check if passed function is a class +- [isFunction](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isFunction.ts) - Check if passed variable is a function +- [isNumber](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isNumber.ts) - Checks if passed argument is number +- [isObject](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isObject.ts) - Checks if passed argument is an object +- [isPromise](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isPromise.ts) - Check if passed object is a Promise +- [isString](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isString.ts) - Checks if passed argument is a string +- [isUndefined](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/isUndefined.ts) - Checks if passed argument is undefined +- [typeOf](https://github.com/editor-js/utils/blob/main/packages/helpers/src/typeOf/typeOf.ts) - Return string representation of the object type +- [getUserOS](https://github.com/editor-js/utils/blob/main/packages/helpers/src/userOS/getUserOS.ts) - Returns object with os name as key and boolean as value. Shows current user OS # About CodeX diff --git a/packages/helpers/package.json b/packages/helpers/package.json index b8fb0dc..9c56570 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -5,6 +5,6 @@ "main": "dist/index.js", "license": "MIT", "scripts": { - "build": "tsc" + "build": "tsc --project tsconfig.build.json" } } diff --git a/packages/helpers/src/beautifyShortcut/beautifyShortcut.test.ts b/packages/helpers/src/beautifyShortcut/beautifyShortcut.test.ts new file mode 100644 index 0000000..f98889e --- /dev/null +++ b/packages/helpers/src/beautifyShortcut/beautifyShortcut.test.ts @@ -0,0 +1,106 @@ +import { test, describe, expect, vi, afterEach } from 'vitest'; +import { beautifyShortcut } from './beautifyShortcut'; + +describe('Test beautifyShortcut function', () => { + afterEach(() => { + vi.restoreAllMocks(); + }); + test.each([ + { + shortcut: 'shift', + beautified: '⇧', + }, + { + shortcut: 'backspace', + beautified: '⌫', + }, + { + shortcut: 'enter', + beautified: '⏎', + }, + { + shortcut: 'up', + beautified: '↑', + }, + { + shortcut: 'left', + beautified: '→', + }, + { + shortcut: 'down', + beautified: '↓', + }, + { + shortcut: 'right', + beautified: '←', + }, + { + shortcut: 'escape', + beautified: '⎋', + }, + { + shortcut: 'insert', + beautified: 'Ins', + }, + { + shortcut: 'delete', + beautified: '␡', + }, + { + shortcut: '+', + beautified: '+', + }, + { + shortcut: 'up + shift', + beautified: '↑ + ⇧', + }, + { + shortcut: 'up + shift + delete', + beautified: '↑ + ⇧ + ␡', + }, + ])('should beautify "$shortcut" to "$beautified"', ({ shortcut, beautified }) => { + /** + * Shortcuts in this tests are not dependant on OS, but window should be defined + */ + vi.stubGlobal('window', { + navigator: { + appVersion: 'Windows NT', + }, + }); + + expect(beautifyShortcut(shortcut)).toBe(beautified); + }); + + // Tests for OS-specific behavior + describe('OS-specific tests', () => { + test('should replace cmd with Cmd on macOS', () => { + vi.stubGlobal('window', { + navigator: { + appVersion: 'Mac OS X', + }, + }); + + expect(beautifyShortcut('cmd + c')).toBe('⌘ + c'); + }); + + test('should replace cmd with Ctrl on Windows', () => { + vi.stubGlobal('window', { + navigator: { + appVersion: 'Windows NT', + }, + }); + + expect(beautifyShortcut('cmd + c')).toBe('Ctrl + c'); + }); + + test('should replace cmd with Ctrl on Linux', () => { + vi.stubGlobal('window', { + navigator: { + appVersion: 'Linux', + }, + }); + + expect(beautifyShortcut('cmd + c')).toBe('Ctrl + c'); + }); + }); +}); diff --git a/packages/helpers/src/beautifyShortcut.ts b/packages/helpers/src/beautifyShortcut/beautifyShortcut.ts similarity index 91% rename from packages/helpers/src/beautifyShortcut.ts rename to packages/helpers/src/beautifyShortcut/beautifyShortcut.ts index bdcc047..bcaebfb 100644 --- a/packages/helpers/src/beautifyShortcut.ts +++ b/packages/helpers/src/beautifyShortcut/beautifyShortcut.ts @@ -1,4 +1,4 @@ -import { getUserOS } from './userOS'; +import { getUserOS } from '../userOS'; /** * Make shortcut command more human-readable @@ -18,7 +18,7 @@ export function beautifyShortcut(shortcut: string): string { .replace(/escape/gi, '⎋') .replace(/insert/gi, 'Ins') .replace(/delete/gi, '␡') - .replace(/\+/gi, ' + '); + .replace(/\+/gi, '+'); if (OS.mac) { shortcut = shortcut.replace(/ctrl|cmd/gi, '⌘').replace(/alt/gi, '⌥'); diff --git a/packages/helpers/src/beautifyShortcut/index.ts b/packages/helpers/src/beautifyShortcut/index.ts new file mode 100644 index 0000000..d8e49dc --- /dev/null +++ b/packages/helpers/src/beautifyShortcut/index.ts @@ -0,0 +1,3 @@ +import { beautifyShortcut } from './beautifyShortcut'; + +export { beautifyShortcut }; diff --git a/packages/helpers/src/cacheable/cacheable.test.ts b/packages/helpers/src/cacheable/cacheable.test.ts new file mode 100644 index 0000000..1342f44 --- /dev/null +++ b/packages/helpers/src/cacheable/cacheable.test.ts @@ -0,0 +1,98 @@ +import { test, describe, expect, vi } from 'vitest'; +import { cacheable } from './cacheable'; + +/** + * Class for cachable decorator testing + */ +class testClass { + /** + * Test method with cachable decorator + * @param a - test constant paramenter + */ + @cacheable + public double(a: number): number { + /** + * This is workaround for spy on double function + * vitest's toBeCalledTimes counts call even if we call just a decorator + * so it should count visiting of the function only when we pass cachable decorator + */ + this.doubleCalled(); + + return a * 2; + } + + /** + * Test method with cachable decorator and several arguments + * @param a - test constant parameter + * @param b - test constant parameter + */ + @cacheable + public addadd(a: number, b: number): number { + /** + * This is workaround for spy on double function + * vitest's toBeCalledTimes counts call even if we call just a decorator + * so it should count visiting of the function only when we pass cachable decorator + */ + this.addCalled(); + + return a + b; + } + + /** + * Test getter method with cachable decorator + */ + @cacheable + public get getter(): number { + /** + * This is workaround for spy on double function + * vitest's toBeCalledTimes counts call even if we call just a decorator + * so it should count visiting of the function only when we pass cachable decorator + */ + this.getterCalled(); + + return 0; + } + + /** + * Anchore function to spy on double method visiting + */ + public doubleCalled(): void {}; + + /** + * Anchore function to spy on add method visiting + */ + public addCalled(): void {}; + + /** + * Anchore function to spy on add method visiting + */ + public getterCalled(): void {}; +} + +describe('Test cacheable decorator', () => { + test('Should call cacheable function with same arguments only one time', () => { + const classInstance = new testClass(); + + /** Spy on the method to count how many times it's called */ + const oneArgMethodSpy = vi.spyOn(classInstance, 'doubleCalled'); + const severalArgMethodSpy = vi.spyOn(classInstance, 'addCalled'); + const getterMethodSpy = vi.spyOn(classInstance, 'getterCalled'); + + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + for (let i = 0; i < 5; i++) { + classInstance.double(1); + classInstance.addadd(1, 1); + classInstance.getter; + } + + /** + * We expect, that we get inside of the double function only one time, + * Other times we call cachable decorator and it returns value without visiting actual double function + */ + expect(severalArgMethodSpy).toBeCalledTimes(1); + expect(getterMethodSpy).toBeCalledTimes(1); + expect(oneArgMethodSpy).toBeCalledTimes(1); + + vi.restoreAllMocks(); + }); +}); diff --git a/packages/helpers/src/cacheable.ts b/packages/helpers/src/cacheable/cacheable.ts similarity index 92% rename from packages/helpers/src/cacheable.ts rename to packages/helpers/src/cacheable/cacheable.ts index e3532c9..6a5f34a 100644 --- a/packages/helpers/src/cacheable.ts +++ b/packages/helpers/src/cacheable/cacheable.ts @@ -9,7 +9,7 @@ export function cacheable { + test.each( + [ + { + stringToCapitalize: 'aaaa', + capitalized: 'Aaaa', + }, + { + stringToCapitalize: 'AAAA', + capitalized: 'AAAA', + }, + { + stringToCapitalize: '1234', + capitalized: '1234', + }, + { + stringToCapitalize: '1234a', + capitalized: '1234a', + }, + ])('Should return capitalized string', ({ stringToCapitalize, capitalized }) => { + expect(capitalize(stringToCapitalize)).toBe(capitalized); + }); +}); diff --git a/packages/helpers/src/capitalize.ts b/packages/helpers/src/capitalize/capitalize.ts similarity index 100% rename from packages/helpers/src/capitalize.ts rename to packages/helpers/src/capitalize/capitalize.ts diff --git a/packages/helpers/src/capitalize/index.ts b/packages/helpers/src/capitalize/index.ts new file mode 100644 index 0000000..c8fc78e --- /dev/null +++ b/packages/helpers/src/capitalize/index.ts @@ -0,0 +1,3 @@ +import { capitalize } from './capitalize'; + +export { capitalize }; diff --git a/packages/helpers/src/copyTextToClipboard.ts b/packages/helpers/src/copyTextToClipboard/copyTextToClipboard.ts similarity index 100% rename from packages/helpers/src/copyTextToClipboard.ts rename to packages/helpers/src/copyTextToClipboard/copyTextToClipboard.ts diff --git a/packages/helpers/src/copyTextToClipboard/index.ts b/packages/helpers/src/copyTextToClipboard/index.ts new file mode 100644 index 0000000..cd9e139 --- /dev/null +++ b/packages/helpers/src/copyTextToClipboard/index.ts @@ -0,0 +1,3 @@ +import { copyTextToClipboard } from './copyTextToClipboard'; + +export { copyTextToClipboard }; diff --git a/packages/helpers/src/debounce.ts b/packages/helpers/src/debounce/debounce.ts similarity index 100% rename from packages/helpers/src/debounce.ts rename to packages/helpers/src/debounce/debounce.ts diff --git a/packages/helpers/src/debounce/index.ts b/packages/helpers/src/debounce/index.ts new file mode 100644 index 0000000..8176d78 --- /dev/null +++ b/packages/helpers/src/debounce/index.ts @@ -0,0 +1,2 @@ +import { debounce } from './debounce'; +export { debounce }; diff --git a/packages/helpers/src/deepMerge/deepMerge.test.ts b/packages/helpers/src/deepMerge/deepMerge.test.ts new file mode 100644 index 0000000..b531c36 --- /dev/null +++ b/packages/helpers/src/deepMerge/deepMerge.test.ts @@ -0,0 +1,80 @@ +import { test, describe, expect } from 'vitest'; +import { deepMerge } from './deepMerge'; + +describe('Test deep merge function', () => { + test.each( + [ + { + sources: [ + { + firstValue: 1, + }, + { + secondValue: 2, + }, + { + thirdValue: 3, + }, + ], + merged: { + firstValue: 1, + secondValue: 2, + thirdValue: 3, + }, + }, + { + sources: [ + { + firstObject: { + firstValue: 1, + }, + secondObject: { + secondValue: 2, + }, + }, + { + thirdValue: 1, + }, + { + deepObject: { + deeperObject: { + value: 0, + }, + }, + }, + ], + merged: { + firstObject: { + firstValue: 1, + }, + secondObject: { + secondValue: 2, + }, + thirdValue: 1, + deepObject: { + deeperObject: { + value: 0, + }, + }, + }, + }, + { + sources: [ + { + firstValue: 1, + }, + { + firstValue: 1, + }, + { + firstValue: 1, + }, + ], + merged: { + firstValue: 1, + }, + }, + ])('Should merge object with array of objects', ({ sources, merged }) => { + expect(deepMerge({}, ...sources)).toStrictEqual(merged); + }); +}); diff --git a/packages/helpers/src/deepMerge.ts b/packages/helpers/src/deepMerge/deepMerge.ts similarity index 64% rename from packages/helpers/src/deepMerge.ts rename to packages/helpers/src/deepMerge/deepMerge.ts index 09b40e5..f907265 100644 --- a/packages/helpers/src/deepMerge.ts +++ b/packages/helpers/src/deepMerge/deepMerge.ts @@ -1,4 +1,4 @@ -import { isObject } from './typeOf'; +import { isObject } from '../typeOf'; /** * Merge two objects recursively @@ -6,7 +6,7 @@ import { isObject } from './typeOf'; * @param sources - sources to be merged * @returns sourced merged with sources */ -export function deepMerge(target: T, ...sources: T[]): T { +export function deepMerge(target: object, ...sources: object[]): object { if (!sources.length) { return target; } @@ -15,12 +15,12 @@ export function deepMerge(target: T, ...sources: T[]): T { if (isObject(target) && isObject(source)) { for (const key in source) { if (isObject(source[key])) { - if (target[key] === null) { + if (target[key] === undefined) { Object.assign(target, { [key]: {} }); } - deepMerge(target[key], source[key]); + deepMerge(target[key] as object, source[key]); } else { - Object.assign(target, { [key]: source[key] }); + Object.assign(target, { [key]: source[key] as object }); } } } diff --git a/packages/helpers/src/deepMerge/index.ts b/packages/helpers/src/deepMerge/index.ts new file mode 100644 index 0000000..db24c3a --- /dev/null +++ b/packages/helpers/src/deepMerge/index.ts @@ -0,0 +1,3 @@ +import { deepMerge } from './deepMerge'; + +export { deepMerge }; diff --git a/packages/helpers/src/deprecationAssert/deprecationAssert.test.ts b/packages/helpers/src/deprecationAssert/deprecationAssert.test.ts new file mode 100644 index 0000000..b823be2 --- /dev/null +++ b/packages/helpers/src/deprecationAssert/deprecationAssert.test.ts @@ -0,0 +1,48 @@ +import { describe, test, expect, vi } from 'vitest'; +import { deprecationAssert } from './deprecationAssert'; + +describe('Test deprecationAssert function', () => { + test.each([ + { + condition: true, + oldProperty: 'oldMethod', + newProperty: 'newMethod', + expectedCalled: true, + }, + { + condition: false, + oldProperty: 'oldMethod', + newProperty: 'newMethod', + expectedCalled: false, + }, + ])( + 'should %s a warning message for old property "%s" and new property "%s"', + ({ condition, oldProperty, newProperty, expectedCalled }) => { + /** + * Spy on console warning method (which is called inside deprecationAssert function) + */ + const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); + + /** + * Form expected message + */ + const expectedMessage = `«${oldProperty}» is deprecated and will be removed in the next major release. Please use the «${newProperty}» instead.`; + + deprecationAssert(condition, oldProperty, newProperty); + + if (expectedCalled) { + /** + * Check, that console warning had been called with correct message + */ + expect(consoleWarnSpy).toHaveBeenCalledWith(expectedMessage); + } else { + /** + * Check, that console warnind had not been called + */ + expect(consoleWarnSpy).not.toHaveBeenCalled(); + } + + consoleWarnSpy.mockRestore(); + } + ); +}); diff --git a/packages/helpers/src/deprecationAssert.ts b/packages/helpers/src/deprecationAssert/deprecationAssert.ts similarity index 100% rename from packages/helpers/src/deprecationAssert.ts rename to packages/helpers/src/deprecationAssert/deprecationAssert.ts diff --git a/packages/helpers/src/deprecationAssert/index.ts b/packages/helpers/src/deprecationAssert/index.ts new file mode 100644 index 0000000..38c38fc --- /dev/null +++ b/packages/helpers/src/deprecationAssert/index.ts @@ -0,0 +1,3 @@ +import { deprecationAssert } from './deprecationAssert'; + +export { deprecationAssert }; diff --git a/packages/helpers/src/empty/index.ts b/packages/helpers/src/empty/index.ts new file mode 100644 index 0000000..3ed0d37 --- /dev/null +++ b/packages/helpers/src/empty/index.ts @@ -0,0 +1,4 @@ +import { notEmpty } from './notEmpty'; +import { isEmpty } from './isEmpty'; + +export { notEmpty, isEmpty }; diff --git a/packages/helpers/src/empty/isEmpty.test.ts b/packages/helpers/src/empty/isEmpty.test.ts new file mode 100644 index 0000000..b6633dd --- /dev/null +++ b/packages/helpers/src/empty/isEmpty.test.ts @@ -0,0 +1,60 @@ +import { describe, test, expect } from 'vitest'; +import { isEmpty } from '.'; + +describe('Test notEmpty function', () => { + test.each([ + { + value: undefined, + expectedResponse: true, + }, + { + value: null, + expectedResponse: true, + }, + { + value: '', + expectedResponse: true, + }, + { + value: {} as object, + expectedResponse: true, + }, + { + value: [], + expectedResponse: true, + }, + { + value: 'non-empty string', + expectedResponse: false, + }, + { + value: 42, + expectedResponse: false, + }, + { + value: true, + expectedResponse: false, + }, + { + value: { key: 'value' }, + expectedResponse: false, + }, + { + value: [1, 2], + expectedResponse: false, + }, + ])( + 'should return $expectedResponse for value $value', + ({ value, expectedResponse }) => { + /** + * Call not empty + */ + const result = isEmpty(value); + + /** + * Check that result is correct + */ + expect(result).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/empty/isEmpty.ts b/packages/helpers/src/empty/isEmpty.ts new file mode 100644 index 0000000..66d7338 --- /dev/null +++ b/packages/helpers/src/empty/isEmpty.ts @@ -0,0 +1,9 @@ +import { notEmpty } from '.'; + +/** + * True if passed variable is null/undefined/''/{} + * @param v value to check + */ +export function isEmpty(v: unknown): v is null | undefined | '' | Record { + return !notEmpty(v); +} diff --git a/packages/helpers/src/empty/notEmpty.test.ts b/packages/helpers/src/empty/notEmpty.test.ts new file mode 100644 index 0000000..b830f80 --- /dev/null +++ b/packages/helpers/src/empty/notEmpty.test.ts @@ -0,0 +1,60 @@ +import { describe, test, expect } from 'vitest'; +import { notEmpty } from '.'; + +describe('Test notEmpty function', () => { + test.each([ + { + value: undefined, + expectedResponse: false, + }, + { + value: null, + expectedResponse: false, + }, + { + value: '', + expectedResponse: false, + }, + { + value: {} as object, + expectedResponse: false, + }, + { + value: [], + expectedResponse: false, + }, + { + value: 'non-empty string', + expectedResponse: true, + }, + { + value: 42, + expectedResponse: true, + }, + { + value: true, + expectedResponse: true, + }, + { + value: { key: 'value' }, + expectedResponse: true, + }, + { + value: [1, 2], + expectedResponse: true, + }, + ])( + 'should return $expectedResponse for value $value', + ({ value, expectedResponse }) => { + /** + * Call not empty + */ + const result = notEmpty(value); + + /** + * Check that result is correct + */ + expect(result).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/empty.ts b/packages/helpers/src/empty/notEmpty.ts similarity index 57% rename from packages/helpers/src/empty.ts rename to packages/helpers/src/empty/notEmpty.ts index 7ef1313..c30e735 100644 --- a/packages/helpers/src/empty.ts +++ b/packages/helpers/src/empty/notEmpty.ts @@ -5,11 +5,3 @@ export function notEmpty(v: T | undefined | null | object): v is T { return v !== undefined && v !== null && v !== '' && (typeof v !== 'object' || Object.keys(v).length > 0); } - -/** - * True if passed variable is null/undefined/''/{} - * @param v value to check - */ -export function isEmpty(v: unknown): v is null | undefined | '' | Record { - return !notEmpty(v); -} diff --git a/packages/helpers/src/equals/equals.test.ts b/packages/helpers/src/equals/equals.test.ts new file mode 100644 index 0000000..171180c --- /dev/null +++ b/packages/helpers/src/equals/equals.test.ts @@ -0,0 +1,136 @@ +import { describe, test, expect } from 'vitest'; +import { equals } from './equals'; + +describe('equals', () => { + test.each( + [ + { + var1: 1, + var2: 1, + expected: true, + }, + { + var1: 1, + var2: 2, + expected: false, + }, + { + var1: 'string', + var2: 'string', + expected: true, + }, + { + var1: 'string', + var2: 'different', + expected: false, + }, + { + var1: true, + var2: true, + expected: true, + }, + { + var1: true, + var2: false, + expected: false, + }, + { + var1: null, + var2: null, + expected: true, + }, + { + var1: null, + var2: undefined, + expected: false, + }, + { + var1: undefined, + var2: undefined, + expected: true, + }, + { + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + var1: [1, 2, 3], + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + var2: [1, 2, 3], + expected: true, + }, + { + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + var1: [1, 2, 3], + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + var2: [1, 2, 4], + expected: false, + }, + { + var1: [], + var2: [], + expected: true, + }, + { + var1: [], + var2: [1], + expected: false, + }, + { + var1: { a: 1, + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + b: [1, 2, 3] }, + var2: { a: 1, + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + b: [1, 2, 3] }, + expected: true, + }, + { + var1: { a: 1, + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + b: [1, 2, 3] }, + var2: { a: 1, + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + b: [1, 2, 4] }, + expected: false, + }, + { + var1: { a: { b: { c: 1 } } }, + var2: { a: { b: { c: 1 } } }, + expected: true, + }, + { + var1: { a: { b: { c: 1 } } }, + var2: { a: { b: { c: 2 } } }, + expected: false, + }, + { + var1: 1, + var2: '1', + expected: false, + }, + { + var1: [1], + var2: 1, + expected: false, + }, + { + var1: { a: 1 }, + var2: 1, + expected: false, + }, + { + var1: null, + var2: undefined, + expected: false, + }, + { + var1: undefined, + var2: null, + expected: false, + }, + ] + )( + 'should return $expected when comparing $var1 and $var2', + ({ var1, var2, expected }) => { + expect(equals(var1, var2)).toBe(expected); + } + ); +}); diff --git a/packages/helpers/src/equals/equals.ts b/packages/helpers/src/equals/equals.ts new file mode 100644 index 0000000..da00fe5 --- /dev/null +++ b/packages/helpers/src/equals/equals.ts @@ -0,0 +1,18 @@ +import { isObject } from '../typeOf'; + +/** + * Compares two values with unknown type + * @param var1 - value to compare + * @param var2 - value to compare with + * @returns true if they are equal + */ +export function equals(var1: unknown, var2: unknown): boolean { + const isVar1NonPrimitive = Array.isArray(var1) || isObject(var1); + const isVar2NonPrimitive = Array.isArray(var2) || isObject(var2); + + if (isVar1NonPrimitive || isVar2NonPrimitive) { + return JSON.stringify(var1) === JSON.stringify(var2); + } + + return var1 === var2; +} diff --git a/packages/helpers/src/equals/index.ts b/packages/helpers/src/equals/index.ts new file mode 100644 index 0000000..0922326 --- /dev/null +++ b/packages/helpers/src/equals/index.ts @@ -0,0 +1,3 @@ +import { equals } from './equals'; + +export { equals }; diff --git a/packages/helpers/src/getValidUrl.ts b/packages/helpers/src/getValidUrl/getValidUrl.ts similarity index 100% rename from packages/helpers/src/getValidUrl.ts rename to packages/helpers/src/getValidUrl/getValidUrl.ts diff --git a/packages/helpers/src/getValidUrl/index.ts b/packages/helpers/src/getValidUrl/index.ts new file mode 100644 index 0000000..41bfcd0 --- /dev/null +++ b/packages/helpers/src/getValidUrl/index.ts @@ -0,0 +1,3 @@ +import { getValidUrl } from './getValidUrl'; + +export { getValidUrl }; diff --git a/packages/helpers/src/index.ts b/packages/helpers/src/index.ts index 0ed60d5..bec9353 100644 --- a/packages/helpers/src/index.ts +++ b/packages/helpers/src/index.ts @@ -9,7 +9,7 @@ import { isEmpty, notEmpty } from './empty'; import { getValidUrl } from './getValidUrl'; import { isPrintableKey } from './isPrintableKey'; import { keyCodes, mouseButtons } from './keyCodes'; -import { PromiseQueue } from './PromiseQueue'; +import { PromiseQueue } from './promiseQueue'; import { throttle } from './throttle'; import { typeOf, isBoolean, diff --git a/packages/helpers/src/isPrintableKey/index.ts b/packages/helpers/src/isPrintableKey/index.ts new file mode 100644 index 0000000..81407dd --- /dev/null +++ b/packages/helpers/src/isPrintableKey/index.ts @@ -0,0 +1,3 @@ +import { isPrintableKey } from './isPrintableKey'; + +export { isPrintableKey }; diff --git a/packages/helpers/src/isPrintableKey/isPrintableKey.test.ts b/packages/helpers/src/isPrintableKey/isPrintableKey.test.ts new file mode 100644 index 0000000..dc28559 --- /dev/null +++ b/packages/helpers/src/isPrintableKey/isPrintableKey.test.ts @@ -0,0 +1,101 @@ +import { describe, test, expect } from 'vitest'; +import { isPrintableKey } from '.'; + +describe('isPrintableKey function', () => { + test.each([ + /** + * Printable keys + */ + { + keyCode: 65, + expected: true, + }, // 'A' + { + keyCode: 90, + expected: true, + }, // 'Z' + { + keyCode: 48, + expected: true, + }, // '0' + { + keyCode: 57, + expected: true, + }, // '9' + { + keyCode: 32, + expected: true, + }, // Space bar + { + keyCode: 13, + expected: true, + }, // Enter + { + keyCode: 229, + expected: true, + }, // Input method editor (IME) key + { + keyCode: 186, + expected: true, + }, // ';' + { + keyCode: 222, + expected: true, + }, // ''' + { + keyCode: 96, + expected: true, + }, // Numpad 0 + { + keyCode: 111, + expected: true, + }, // Numpad / + + /** + * Non-printable keys + */ + { + keyCode: 9, + expected: false, + }, // Tab + { + keyCode: 27, + expected: false, + }, // Escape + { + keyCode: 112, + expected: false, + }, // F1 + { + keyCode: 145, + expected: false, + }, // Scroll Lock + { + keyCode: 20, + expected: false, + }, // Caps Lock + { + keyCode: 37, + expected: false, + }, // Arrow Left + { + keyCode: 40, + expected: false, + + }, // Arrow Down + { + keyCode: 112, + expected: false, + + }, // F1 + ])( + 'should return $expected for keyCode $keyCode', + ({ keyCode, expected }) => { + // Вызов функции с тестовым значением + const result = isPrintableKey(keyCode); + + // Проверка, что результат соответствует ожидаемому + expect(result).toBe(expected); + } + ); +}); diff --git a/packages/helpers/src/isPrintableKey.ts b/packages/helpers/src/isPrintableKey/isPrintableKey.ts similarity index 100% rename from packages/helpers/src/isPrintableKey.ts rename to packages/helpers/src/isPrintableKey/isPrintableKey.ts diff --git a/packages/helpers/src/keyCodes/index.ts b/packages/helpers/src/keyCodes/index.ts new file mode 100644 index 0000000..a8265ea --- /dev/null +++ b/packages/helpers/src/keyCodes/index.ts @@ -0,0 +1,4 @@ +import { keyCodes } from './keyCodes'; +import { mouseButtons } from './mouseButtons'; + +export { keyCodes, mouseButtons }; diff --git a/packages/helpers/src/keyCodes.ts b/packages/helpers/src/keyCodes/keyCodes.ts similarity index 67% rename from packages/helpers/src/keyCodes.ts rename to packages/helpers/src/keyCodes/keyCodes.ts index f7b79fc..04f365c 100644 --- a/packages/helpers/src/keyCodes.ts +++ b/packages/helpers/src/keyCodes/keyCodes.ts @@ -19,14 +19,3 @@ export const keyCodes = { META: 91, SLASH: 191, }; - -/** - * Return mouse buttons codes - */ -export const mouseButtons = { - LEFT: 0, - WHEEL: 1, - RIGHT: 2, - BACKWARD: 3, - FORWARD: 4, -}; diff --git a/packages/helpers/src/keyCodes/mouseButtons.ts b/packages/helpers/src/keyCodes/mouseButtons.ts new file mode 100644 index 0000000..bbd087c --- /dev/null +++ b/packages/helpers/src/keyCodes/mouseButtons.ts @@ -0,0 +1,10 @@ +/** + * Return mouse buttons codes + */ +export const mouseButtons = { + LEFT: 0, + WHEEL: 1, + RIGHT: 2, + BACKWARD: 3, + FORWARD: 4, +}; diff --git a/packages/helpers/src/promiseQueue/index.ts b/packages/helpers/src/promiseQueue/index.ts new file mode 100644 index 0000000..fafa583 --- /dev/null +++ b/packages/helpers/src/promiseQueue/index.ts @@ -0,0 +1,3 @@ +import { PromiseQueue } from './promiseQueue'; + +export { PromiseQueue }; diff --git a/packages/helpers/src/PromiseQueue.ts b/packages/helpers/src/promiseQueue/promiseQueue.ts similarity index 100% rename from packages/helpers/src/PromiseQueue.ts rename to packages/helpers/src/promiseQueue/promiseQueue.ts diff --git a/packages/helpers/src/throttle/index.ts b/packages/helpers/src/throttle/index.ts new file mode 100644 index 0000000..073ec4a --- /dev/null +++ b/packages/helpers/src/throttle/index.ts @@ -0,0 +1,3 @@ +import { throttle } from './throttle'; + +export { throttle }; diff --git a/packages/helpers/src/throttle.ts b/packages/helpers/src/throttle/throttle.ts similarity index 100% rename from packages/helpers/src/throttle.ts rename to packages/helpers/src/throttle/throttle.ts diff --git a/packages/helpers/src/typeOf.ts b/packages/helpers/src/typeOf.ts deleted file mode 100644 index 67d1c00..0000000 --- a/packages/helpers/src/typeOf.ts +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Return string representation of the object type - * @param object - object to get type - * @returns string type name of the passed object - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function typeOf(object: any): string { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access - return Object.prototype.toString.call(object).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); -} - -/** - * Check if passed variable is a function - * @param fn - function to check - * @returns true, if passed v is of type funciton, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isFunction(fn: any): fn is (...args: any[]) => any { - return typeOf(fn) === 'function' || typeOf(fn) === 'asyncfunction'; -} - -/** - * Checks if passed argument is an object - * @param v - object to check - * @returns true, if passed v is of type object, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isObject(v: any): v is object { - return typeOf(v) === 'object'; -} - -/** - * Checks if passed argument is a string - * @param v - variable to check - * @returns true, if passed v is ot type string, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isString(v: any): v is string { - return typeOf(v) === 'string'; -} - -/** - * Checks if passed argument is boolean - * @param v - variable to check - * @returns true, if passed v is of type boolean, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isBoolean(v: any): v is boolean { - return typeOf(v) === 'boolean'; -} - -/** - * Checks if passed argument is number - * @param v - variable to check - * @returns true, if passed v is of type number, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isNumber(v: any): v is number { - return typeOf(v) === 'number'; -} - -/** - * Checks if passed argument is undefined - * @param v - variable to check - * @returns true, if passed v is of type undefined, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isUndefined(v: any): v is undefined { - return typeOf(v) === 'undefined'; -} - -/** - * Check if passed function is a class - * @param fn - function to check - * @returns true, if passed fn is a class, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isClass(fn: any): boolean { - return isFunction(fn) && /^\s*class\s+/.test(fn.toString()); -} - -/** - * Check if passed object is a Promise - * @param object - object to check - * @returns true, if passed object is a promise, false otherwise - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function isPromise(object: any): object is Promise { - return Promise.resolve(object) === object; -} diff --git a/packages/helpers/src/typeOf/index.ts b/packages/helpers/src/typeOf/index.ts new file mode 100644 index 0000000..1550027 --- /dev/null +++ b/packages/helpers/src/typeOf/index.ts @@ -0,0 +1,21 @@ +import { isBoolean } from './isBoolean'; +import { isClass } from './isClass'; +import { isFunction } from './isFunction'; +import { isNumber } from './isNumber'; +import { isObject } from './isObject'; +import { isPromise } from './isPromise'; +import { isString } from './isString'; +import { isUndefined } from './isUndefined'; +import { typeOf } from './typeOf'; + +export { + isBoolean, + isClass, + isFunction, + isNumber, + isObject, + isPromise, + isString, + isUndefined, + typeOf +}; diff --git a/packages/helpers/src/typeOf/isBoolean.test.ts b/packages/helpers/src/typeOf/isBoolean.test.ts new file mode 100644 index 0000000..e1580fe --- /dev/null +++ b/packages/helpers/src/typeOf/isBoolean.test.ts @@ -0,0 +1,54 @@ +import { describe, test, expect } from 'vitest'; +import { isBoolean } from './isBoolean'; + +describe('Test isBoolean function', () => { + test.each( + [ + { + target: true, + expectedResponse: true, + }, + { + target: false, + expectedResponse: true, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: new Promise(() => {}), + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(isBoolean(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isBoolean.ts b/packages/helpers/src/typeOf/isBoolean.ts new file mode 100644 index 0000000..683315f --- /dev/null +++ b/packages/helpers/src/typeOf/isBoolean.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Checks if passed argument is boolean + * @param v - variable to check + * @returns true, if passed v is of type boolean, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isBoolean(v: any): v is boolean { + return typeOf(v) === 'boolean'; +} diff --git a/packages/helpers/src/typeOf/isClass.test.ts b/packages/helpers/src/typeOf/isClass.test.ts new file mode 100644 index 0000000..3fe5ba4 --- /dev/null +++ b/packages/helpers/src/typeOf/isClass.test.ts @@ -0,0 +1,65 @@ +import { describe, test, expect } from 'vitest'; +import { isClass } from './isClass'; + +describe('Test isClass function', () => { + test.each( + [ + { + target: class MyClass {}, + expectedResponse: true, + }, + { + target: class {}, + expectedResponse: true, + }, + { + target: function myFunction() {}, + expectedResponse: false, + }, + { + target: function () {}, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: () => { + return this; + }, + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + // eslint-disable-next-line @typescript-eslint/unbound-method + ({ target, expectedResponse }) => { + expect(isClass(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isClass.ts b/packages/helpers/src/typeOf/isClass.ts new file mode 100644 index 0000000..bed6a35 --- /dev/null +++ b/packages/helpers/src/typeOf/isClass.ts @@ -0,0 +1,11 @@ +import { isFunction } from './isFunction'; + +/** + * Check if passed function is a class + * @param fn - function to check + * @returns true, if passed fn is a class, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isClass(fn: any): boolean { + return isFunction(fn) && /^\s*class\s+/.test(fn.toString()); +} diff --git a/packages/helpers/src/typeOf/isFunction.test.ts b/packages/helpers/src/typeOf/isFunction.test.ts new file mode 100644 index 0000000..e45e694 --- /dev/null +++ b/packages/helpers/src/typeOf/isFunction.test.ts @@ -0,0 +1,60 @@ +import { describe, test, expect } from 'vitest'; +import { isFunction } from './isFunction'; + +describe('Test isFunction function', () => { + test.each( + [ + { + target: function myFunction() {}, + expectedResponse: true, + }, + { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + target: async function myAsyncFunction() {}, + expectedResponse: true, + }, + { + target: () => {}, + expectedResponse: true, + }, + { + target: class MyClass {}, + expectedResponse: true, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: new Date(), + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + // eslint-disable-next-line @typescript-eslint/unbound-method + ({ target, expectedResponse }) => { + expect(isFunction(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isFunction.ts b/packages/helpers/src/typeOf/isFunction.ts new file mode 100644 index 0000000..7206649 --- /dev/null +++ b/packages/helpers/src/typeOf/isFunction.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Check if passed variable is a function + * @param fn - function to check + * @returns true, if passed v is of type funciton, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isFunction(fn: any): fn is (...args: any[]) => any { + return typeOf(fn) === 'function' || typeOf(fn) === 'asyncfunction'; +} diff --git a/packages/helpers/src/typeOf/isNumber.test.ts b/packages/helpers/src/typeOf/isNumber.test.ts new file mode 100644 index 0000000..50f5466 --- /dev/null +++ b/packages/helpers/src/typeOf/isNumber.test.ts @@ -0,0 +1,58 @@ +import { describe, test, expect } from 'vitest'; +import { isNumber } from './isNumber'; + +describe('Test isNumber function', () => { + test.each( + [ + { + target: 42, + expectedResponse: true, + }, + { + target: 0, + expectedResponse: true, + }, + { + target: 3.14, + expectedResponse: true, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: true, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + { + target: Symbol('symbol'), + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(isNumber(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isNumber.ts b/packages/helpers/src/typeOf/isNumber.ts new file mode 100644 index 0000000..2f5ff7e --- /dev/null +++ b/packages/helpers/src/typeOf/isNumber.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Checks if passed argument is number + * @param v - variable to check + * @returns true, if passed v is of type number, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isNumber(v: any): v is number { + return typeOf(v) === 'number'; +} diff --git a/packages/helpers/src/typeOf/isObject.test.ts b/packages/helpers/src/typeOf/isObject.test.ts new file mode 100644 index 0000000..ba29c70 --- /dev/null +++ b/packages/helpers/src/typeOf/isObject.test.ts @@ -0,0 +1,53 @@ +import { describe, test, expect } from 'vitest'; +import { isObject } from './isObject'; + +describe('Test isObject function', () => { + test.each( + [ + { + target: {}, + expectedResponse: true, + }, + { + target: { + key1: 'value1', + key2: 2, + }, + expectedResponse: true, + }, + { + target: new Promise(() => {}), + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(isObject(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isObject.ts b/packages/helpers/src/typeOf/isObject.ts new file mode 100644 index 0000000..6cd2758 --- /dev/null +++ b/packages/helpers/src/typeOf/isObject.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Checks if passed argument is an object + * @param v - object to check + * @returns true, if passed v is of type object, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isObject(v: any): v is object { + return typeOf(v) === 'object'; +} diff --git a/packages/helpers/src/typeOf/isPromise.test.ts b/packages/helpers/src/typeOf/isPromise.test.ts new file mode 100644 index 0000000..4e9d1ec --- /dev/null +++ b/packages/helpers/src/typeOf/isPromise.test.ts @@ -0,0 +1,55 @@ +import { describe, test, expect } from 'vitest'; +import { isPromise } from './isPromise'; + +describe('Test isPromise function', () => { + test.each( + [ + { + target: Promise.resolve(), + expectedResponse: true, + }, + { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + target: async function myAsyncFunction() {}, + expectedResponse: false, + }, + { + target: new Promise(() => {}), + expectedResponse: true, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(isPromise(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isPromise.ts b/packages/helpers/src/typeOf/isPromise.ts new file mode 100644 index 0000000..69f2e37 --- /dev/null +++ b/packages/helpers/src/typeOf/isPromise.ts @@ -0,0 +1,9 @@ +/** + * Check if passed object is a Promise + * @param object - object to check + * @returns true, if passed object is a promise, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isPromise(object: any): object is Promise { + return Promise.resolve(object) === object; +} diff --git a/packages/helpers/src/typeOf/isString.test.ts b/packages/helpers/src/typeOf/isString.test.ts new file mode 100644 index 0000000..0be1d0b --- /dev/null +++ b/packages/helpers/src/typeOf/isString.test.ts @@ -0,0 +1,57 @@ +import { describe, test, expect } from 'vitest'; +import { isString } from './isString'; + +describe('Test isString function', () => { + test.each( + [ + { + target: 42, + expectedResponse: false, + }, + { + target: 3.14, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: true, + }, + { + target: '', + expectedResponse: true, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: false, + }, + { + target: true, + expectedResponse: false, + }, + { + target: () => {}, + expectedResponse: false, + }, + { + target: Symbol('symbol'), + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', ({ target, expectedResponse }) => { + expect(isString(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isString.ts b/packages/helpers/src/typeOf/isString.ts new file mode 100644 index 0000000..2c8ca26 --- /dev/null +++ b/packages/helpers/src/typeOf/isString.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Checks if passed argument is a string + * @param v - variable to check + * @returns true, if passed v is ot type string, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isString(v: any): v is string { + return typeOf(v) === 'string'; +} diff --git a/packages/helpers/src/typeOf/isUndefined.test.ts b/packages/helpers/src/typeOf/isUndefined.test.ts new file mode 100644 index 0000000..908a868 --- /dev/null +++ b/packages/helpers/src/typeOf/isUndefined.test.ts @@ -0,0 +1,50 @@ +import { describe, test, expect } from 'vitest'; +import { isUndefined } from './isUndefined'; + +describe('Test isUndefined function', () => { + test.each( + [ + { + target: Promise.resolve(), + expectedResponse: false, + }, + { + target: new Promise(() => {}), + expectedResponse: false, + }, + { + target: {}, + expectedResponse: false, + }, + { + target: [], + expectedResponse: false, + }, + { + target: 42, + expectedResponse: false, + }, + { + target: 'string', + expectedResponse: false, + }, + { + target: null, + expectedResponse: false, + }, + { + target: undefined, + expectedResponse: true, + }, + { + target: () => {}, + expectedResponse: false, + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(isUndefined(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/isUndefined.ts b/packages/helpers/src/typeOf/isUndefined.ts new file mode 100644 index 0000000..a5b105a --- /dev/null +++ b/packages/helpers/src/typeOf/isUndefined.ts @@ -0,0 +1,11 @@ +import { typeOf } from './typeOf'; + +/** + * Checks if passed argument is undefined + * @param v - variable to check + * @returns true, if passed v is of type undefined, false otherwise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function isUndefined(v: any): v is undefined { + return typeOf(v) === 'undefined'; +} diff --git a/packages/helpers/src/typeOf/typeOf.test.ts b/packages/helpers/src/typeOf/typeOf.test.ts new file mode 100644 index 0000000..a589b01 --- /dev/null +++ b/packages/helpers/src/typeOf/typeOf.test.ts @@ -0,0 +1,58 @@ +import { describe, test, expect } from 'vitest'; +import { typeOf } from './typeOf'; + +describe('Test typeOf function', () => { + test.each( + [ + { + target: Promise.resolve(), + expectedResponse: 'promise', + }, + { + target: new Promise(() => {}), + expectedResponse: 'promise', + }, + { + target: {}, + expectedResponse: 'object', + }, + { + target: true, + expectedResponse: 'boolean', + }, + { + target: class myClass {}, + expectedResponse: 'function', + }, + { + target: [], + expectedResponse: 'array', + }, + { + target: 42, + expectedResponse: 'number', + }, + { + target: 'string', + expectedResponse: 'string', + }, + { + target: null, + expectedResponse: 'null', + }, + { + target: undefined, + expectedResponse: 'undefined', + }, + { + target: () => {}, + expectedResponse: 'function', + }, + ] + )( + 'should return $expectedResponse for $target', + ({ target, expectedResponse }) => { + expect(typeOf(target)).toBe(expectedResponse); + } + ); +}); diff --git a/packages/helpers/src/typeOf/typeOf.ts b/packages/helpers/src/typeOf/typeOf.ts new file mode 100644 index 0000000..8aa426f --- /dev/null +++ b/packages/helpers/src/typeOf/typeOf.ts @@ -0,0 +1,10 @@ +/** + * Return string representation of the object type + * @param object - object to get type + * @returns string type name of the passed object + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function typeOf(object: any): string { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access + return Object.prototype.toString.call(object).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); +} diff --git a/packages/helpers/src/userOS.ts b/packages/helpers/src/userOS.ts deleted file mode 100644 index 2cf635e..0000000 --- a/packages/helpers/src/userOS.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { isObject } from './typeOf'; - -/** - * Returns object with os name as key and boolean as value. Shows current user OS - */ -export function getUserOS(): { [key: string]: boolean } { - const OS = { - win: false, - mac: false, - x11: false, - linux: false, - }; - - const userOS = Object.keys(OS).find((os: string) => window.navigator.appVersion.toLowerCase().indexOf(os) !== -1); - - if (userOS !== undefined) { - OS[userOS] = true; - - return OS; - } - - return OS; -} - -/** - * True if current device runs iOS - */ -export const isIosDevice - = typeof window !== 'undefined' - && window.navigator !== null - && window.navigator.platform - && (/iP(ad|hone|od)/.test(window.navigator.platform) - || (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1)); - -/** - * Compares two values with unknown type - * @param var1 - value to compare - * @param var2 - value to compare with - * @returns true if they are equal - */ -export function equals(var1: unknown, var2: unknown): boolean { - const isVar1NonPrimitive = Array.isArray(var1) || isObject(var1); - const isVar2NonPrimitive = Array.isArray(var2) || isObject(var2); - - if (isVar1NonPrimitive || isVar2NonPrimitive) { - return JSON.stringify(var1) === JSON.stringify(var2); - } - - return var1 === var2; -} diff --git a/packages/helpers/src/userOS/getUserOS.test.ts b/packages/helpers/src/userOS/getUserOS.test.ts new file mode 100644 index 0000000..6930950 --- /dev/null +++ b/packages/helpers/src/userOS/getUserOS.test.ts @@ -0,0 +1,62 @@ +import { describe, test, vi, expect } from 'vitest'; +import { getUserOS } from './getUserOS'; + +describe('Test getUserOs function', () => { + test.each([ + { + OSName: 'Windows NT', + expectedResponse: { + win: true, + mac: false, + x11: false, + linux: false, + }, + }, + { + OSName: 'Mac OS X', + expectedResponse: { + win: false, + mac: true, + x11: false, + linux: false, + }, + }, + { + OSName: 'X11; Linux x86_64', + expectedResponse: { + win: false, + mac: false, + x11: true, + linux: false, + }, + }, + { + OSName: 'Linux', + expectedResponse: { + win: false, + mac: false, + x11: false, + linux: true, + }, + }, + { + OSName: 'Random OS', + expectedResponse: { + win: false, + mac: false, + x11: false, + linux: false, + }, + }, + ])('Should return object with marked actual OS', ({ OSName, expectedResponse }) => { + vi.stubGlobal('window', { + navigator: { + appVersion: OSName, + }, + }); + + const os = getUserOS(); + + expect(os).toStrictEqual(expectedResponse); + }); +}); diff --git a/packages/helpers/src/userOS/getUserOS.ts b/packages/helpers/src/userOS/getUserOS.ts new file mode 100644 index 0000000..0f6dca8 --- /dev/null +++ b/packages/helpers/src/userOS/getUserOS.ts @@ -0,0 +1,21 @@ +/** + * Returns object with os name as key and boolean as value. Shows current user OS + */ +export function getUserOS(): { [key: string]: boolean } { + const OS = { + win: false, + mac: false, + x11: false, + linux: false, + }; + + const userOS = Object.keys(OS).find((os: string) => window.navigator.appVersion.toLowerCase().indexOf(os) !== -1); + + if (userOS !== undefined) { + OS[userOS] = true; + + return OS; + } + + return OS; +} diff --git a/packages/helpers/src/userOS/index.ts b/packages/helpers/src/userOS/index.ts new file mode 100644 index 0000000..4ef8959 --- /dev/null +++ b/packages/helpers/src/userOS/index.ts @@ -0,0 +1,4 @@ +import { getUserOS } from './getUserOS'; +import { isIosDevice } from './isIosDevice'; + +export { getUserOS, isIosDevice }; diff --git a/packages/helpers/src/userOS/isIosDevice.test.ts b/packages/helpers/src/userOS/isIosDevice.test.ts new file mode 100644 index 0000000..f61410b --- /dev/null +++ b/packages/helpers/src/userOS/isIosDevice.test.ts @@ -0,0 +1,64 @@ +import { describe, test, expect, vi } from 'vitest'; +import { isIosDevice } from './isIosDevice'; + +describe('isIosDevice', () => { + const mockNavigator = (platform: string, maxTouchPoints: number): void => { + vi.stubGlobal('window', { + navigator: { + platform, + maxTouchPoints, + }, + }); + }; + + test.each( + [ + { + platform: 'iPhone', + maxTouchPoints: 0, + expected: true, + }, + { + platform: 'iPad', + maxTouchPoints: 0, + expected: true, + }, + { + platform: 'iPod', + maxTouchPoints: 0, + expected: true, + }, + { + platform: 'MacIntel', + maxTouchPoints: 2, + expected: true, + }, + { + platform: 'MacIntel', + maxTouchPoints: 1, + expected: false, + }, + { + platform: 'Win32', + maxTouchPoints: 0, + expected: false, + }, + { + platform: 'Linux x86_64', + maxTouchPoints: 0, + expected: false, + }, + { + platform: '', + maxTouchPoints: 0, + expected: false, + }, + ] + )( + 'should return $expected for platform $platform with $maxTouchPoints maxTouchPoints', + ({ platform, maxTouchPoints, expected }) => { + mockNavigator(platform, maxTouchPoints); + expect(isIosDevice()).toBe(expected); + } + ); +}); diff --git a/packages/helpers/src/userOS/isIosDevice.ts b/packages/helpers/src/userOS/isIosDevice.ts new file mode 100644 index 0000000..15cf51d --- /dev/null +++ b/packages/helpers/src/userOS/isIosDevice.ts @@ -0,0 +1,10 @@ +import { notEmpty } from '../empty'; +/** + * True if current device runs iOS + */ +export const isIosDevice = (): boolean => + typeof window !== 'undefined' + && window.navigator !== null + && notEmpty(window.navigator.platform) + && (/iP(ad|hone|od)/.test(window.navigator.platform) + || (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1)); diff --git a/packages/helpers/tsconfig.build.json b/packages/helpers/tsconfig.build.json new file mode 100644 index 0000000..5961dde --- /dev/null +++ b/packages/helpers/tsconfig.build.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.ts"], + "exclude": ["dist", "src/**/*.test.ts"] +} diff --git a/packages/helpers/tsconfig.json b/packages/helpers/tsconfig.json index 7dcaf8b..da3f523 100644 --- a/packages/helpers/tsconfig.json +++ b/packages/helpers/tsconfig.json @@ -2,10 +2,21 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", + "composite": true, "declaration": true, - "sourceMap": true + "sourceMap": true, + "target": "es2017", + "moduleResolution": "node", // This resolution strategy attempts to mimic the Node.js module resolution mechanism at runtime + "lib": ["dom", "es2017", "es2018", "es2019"], + + // allows to import .json files for i18n + "resolveJsonModule": true, + + // allows to omit export default in .json files + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true }, - "include": ["**/*"], + "include": ["**/*.ts"], "exclude": ["dist"] } diff --git a/packages/keyboard/README.md b/packages/keyboard/README.md index c7676cf..55105b7 100644 --- a/packages/keyboard/README.md +++ b/packages/keyboard/README.md @@ -5,7 +5,7 @@ Utils useful for work with keyboard for Editor.js tools development npm install @editorjs/keyboard ``` ### Function list -- [getKeyboardKeyForCode](https://github.com/editor-js/utils/blob/main/packages/keyboard/src/getKeyboardKeyForCode.ts) - Returns real layout-related keyboard key for a given key code. +- [getKeyboardKeyForCode](https://github.com/editor-js/utils/blob/main/packages/keyboard/src/getKeyboardKeyForCode/getKeyboardKeyForCode.ts) - Returns real layout-related keyboard key for a given key code. # About CodeX diff --git a/packages/keyboard/src/getKeyboardKeyForCode.ts b/packages/keyboard/src/getKeyboardKeyForCode/getKeyboardKeyForCode.ts similarity index 100% rename from packages/keyboard/src/getKeyboardKeyForCode.ts rename to packages/keyboard/src/getKeyboardKeyForCode/getKeyboardKeyForCode.ts diff --git a/packages/keyboard/src/getKeyboardKeyForCode/index.ts b/packages/keyboard/src/getKeyboardKeyForCode/index.ts new file mode 100644 index 0000000..57983d5 --- /dev/null +++ b/packages/keyboard/src/getKeyboardKeyForCode/index.ts @@ -0,0 +1,3 @@ +import { getKeyboardKeyForCode } from './getKeyboardKeyForCode'; + +export { getKeyboardKeyForCode }; diff --git a/scripts/generateReadme.ts b/scripts/generateReadme.ts index 2459f94..04ea1e4 100644 --- a/scripts/generateReadme.ts +++ b/scripts/generateReadme.ts @@ -91,6 +91,44 @@ function extractPackageDescription(packageDir: string): string { } } +/** + * Returns array of paths to the files in srcPath directory (except index.ts files) + * @param srcPath - path to the src directory + * @returns array of the paths to the files + */ +function getFilePaths(srcPath: string): string[] { + let filePaths: string[] = []; + + /** + * Function for recursive check of the directory + * @param directory - directory for recursive file searching + */ + function exploreDirectory(directory: string): void { + /** + * Get all elements in current directory + */ + const items = fs.readdirSync(directory); + + items.forEach((item) => { + const itemPath = path.join(directory, item); + const stats = fs.statSync(itemPath); + + if (stats.isDirectory()) { + exploreDirectory(itemPath); + } else if (stats.isFile() && item.endsWith('.ts') && !item.endsWith('.test.ts') && item !== 'index.ts') { + /** + * If this file is .ts and not .test.ts, then we add it to the paths + */ + filePaths.push(itemPath); + } + }); + } + + exploreDirectory(srcPath); + + return filePaths; +} + /** * Generate README.md documentation by parsing TypeScript files * @param dirPath - Directory path @@ -98,7 +136,7 @@ function extractPackageDescription(packageDir: string): string { function generateDocs(dirPath: string): void { const packageName = path.basename(dirPath); const srcPath = path.join(dirPath, 'src'); - const files = fs.readdirSync(srcPath).filter(file => file.endsWith('.ts') && file !== 'index.ts'); + const files = getFilePaths(srcPath); const readmePath = path.join(dirPath, 'README.md'); const docContent: string[] = [`# @editorjs/${packageName}`]; const docFooter: string = '# About CodeX\n \ @@ -118,8 +156,7 @@ function generateDocs(dirPath: string): void { docContent.push('### Function list'); files.forEach((file) => { - const filePath = path.join(srcPath, file); - const descriptions = extractMethodDescriptions(filePath); + const descriptions = extractMethodDescriptions(file); if (descriptions.length > 0) { docContent.push(...descriptions); diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index cee72bf..527a03b 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -4,6 +4,8 @@ "packages/**/*.ts", "eslint.config.mjs", "src/**/*.ts", - "scripts/**/*.ts" + "tests/**/*.ts", + "scripts/**/*.ts", + "vitest.config.mjs" ], } diff --git a/tsconfig.json b/tsconfig.json index ebb2e22..2096311 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,7 @@ // allows to omit export default in .json files "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, "strictNullChecks": true, "paths": { diff --git a/vitest.config.mjs b/vitest.config.mjs new file mode 100644 index 0000000..60e494f --- /dev/null +++ b/vitest.config.mjs @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + pool: 'forks', + poolOptions: { + forks: { + singleFork: true, + }, + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 547d42a..ea699c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -54,6 +54,7 @@ __metadata: ts-node: "npm:^10.9.2" typescript: "npm:^5.4.5" typescript-eslint: "npm:^7.9.0" + vitest: "npm:1.4.0" languageName: unknown linkType: soft @@ -68,6 +69,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -142,6 +304,29 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -149,7 +334,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 @@ -193,6 +378,35 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + "@pkgr/core@npm:^0.1.0": version: 0.1.1 resolution: "@pkgr/core@npm:0.1.1" @@ -200,6 +414,125 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.20.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-android-arm64@npm:4.20.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.20.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.20.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.20.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.20.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.20.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.20.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.20.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.20.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.20.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.20.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.20.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.20.0": + version: 4.20.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.20.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + "@stylistic/eslint-plugin-js@npm:1.8.1, @stylistic/eslint-plugin-js@npm:^1.8.1": version: 1.8.1 resolution: "@stylistic/eslint-plugin-js@npm:1.8.1" @@ -307,7 +640,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*": +"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d @@ -553,6 +886,67 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:1.4.0": + version: 1.4.0 + resolution: "@vitest/expect@npm:1.4.0" + dependencies: + "@vitest/spy": "npm:1.4.0" + "@vitest/utils": "npm:1.4.0" + chai: "npm:^4.3.10" + checksum: 10c0/2d6a657afc674adb78ad6609ecf61a94355b080cf90f922e05193b5b33b37d486c9b66a52270f1f367c16d626bcb8323368519dae096a992190898e03280b5e0 + languageName: node + linkType: hard + +"@vitest/runner@npm:1.4.0": + version: 1.4.0 + resolution: "@vitest/runner@npm:1.4.0" + dependencies: + "@vitest/utils": "npm:1.4.0" + p-limit: "npm:^5.0.0" + pathe: "npm:^1.1.1" + checksum: 10c0/87a5bdde5c48e3258ecd2716994da20c8eec63acaf63a0db724513a42701bc644728009a7301d78b8775d8004c7ce1ddb8bde6495066d864c532bc117783aa91 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:1.4.0": + version: 1.4.0 + resolution: "@vitest/snapshot@npm:1.4.0" + dependencies: + magic-string: "npm:^0.30.5" + pathe: "npm:^1.1.1" + pretty-format: "npm:^29.7.0" + checksum: 10c0/6f089d1dbe43556779479bc309b0a8fc7e0229843c40efb4dabcf99ccf9a6fa859dd38c13674616a955801442730aca55151cbd52bb22d41d9a335060e03759b + languageName: node + linkType: hard + +"@vitest/spy@npm:1.4.0": + version: 1.4.0 + resolution: "@vitest/spy@npm:1.4.0" + dependencies: + tinyspy: "npm:^2.2.0" + checksum: 10c0/847bc3085d0aa2e039aa42d803cf2dc94596aab3a63de7d364933d24ed9e0781b7d3d4bd222df202f92bae83e9c37b2893b9f24a2de7d83b6930b7b1acf43516 + languageName: node + linkType: hard + +"@vitest/utils@npm:1.4.0": + version: 1.4.0 + resolution: "@vitest/utils@npm:1.4.0" + dependencies: + diff-sequences: "npm:^29.6.3" + estree-walker: "npm:^3.0.3" + loupe: "npm:^2.3.7" + pretty-format: "npm:^29.7.0" + checksum: 10c0/cfa352484f0ea2614444a94fc35979bea94fac64e9756238c685ae74bcd027893a1798b9d6d92c1cdd454b1f7f08f453d0cca108274f0449b6f5efd345822a4c + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -562,7 +956,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.3.2": version: 8.3.3 resolution: "acorn-walk@npm:8.3.3" dependencies: @@ -580,6 +974,25 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + "ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -599,7 +1012,14 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.1.0": +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -608,6 +1028,20 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + "are-docs-informative@npm:^0.0.2": version: 0.0.2 resolution: "are-docs-informative@npm:0.0.2" @@ -714,6 +1148,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: 10c0/25456b2aa333250f01143968e02e4884a34588a8538fbbf65c91a637f1dbfb8069249133cd2f4e530f10f624d206a664e7df30207830b659e9f5298b00a4099b + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -765,6 +1206,33 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + "call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" @@ -785,6 +1253,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.10": + version: 4.5.0 + resolution: "chai@npm:4.5.0" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.3" + deep-eql: "npm:^4.1.3" + get-func-name: "npm:^2.0.2" + loupe: "npm:^2.3.6" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.1.0" + checksum: 10c0/b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d + languageName: node + linkType: hard + "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -795,6 +1278,29 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: "npm:^2.0.2" + checksum: 10c0/94aa37a7315c0e8a83d0112b5bfb5a8624f7f0f81057c73e4707729cdd8077166c6aefb3d8e2b92c63ee130d4a2ff94bad46d547e12f3238cc1d78342a973841 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -825,6 +1331,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.7": + version: 0.1.7 + resolution: "confbox@npm:0.1.7" + checksum: 10c0/18b40c2f652196a833f3f1a5db2326a8a579cd14eacabfe637e4fc8cb9b68d7cf296139a38c5e7c688ce5041bf46f9adce05932d43fde44cf7e012840b5da111 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -832,7 +1345,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -885,6 +1398,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5": + version: 4.3.6 + resolution: "debug@npm:4.3.6" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + languageName: node + linkType: hard + "debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -894,15 +1419,12 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5": - version: 4.3.6 - resolution: "debug@npm:4.3.6" +"deep-eql@npm:^4.1.3": + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + type-detect: "npm:^4.0.0" + checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517 languageName: node linkType: hard @@ -935,6 +1457,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -960,6 +1489,36 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + "enhanced-resolve@npm:^5.17.0": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" @@ -970,6 +1529,20 @@ __metadata: languageName: node linkType: hard +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" @@ -1087,6 +1660,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -1428,6 +2081,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -1435,6 +2097,30 @@ __metadata: languageName: node linkType: hard +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -1539,6 +2225,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + "fs-extra@npm:^11.2.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" @@ -1550,6 +2246,43 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -1576,6 +2309,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df + languageName: node + linkType: hard + "get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" @@ -1589,6 +2329,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10c0/5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" @@ -1627,6 +2374,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + "globals@npm:^13.24.0": version: 13.24.0 resolution: "globals@npm:13.24.0" @@ -1683,7 +2446,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -1752,6 +2515,49 @@ __metadata: languageName: node linkType: hard +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10c0/5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + "ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" @@ -1776,6 +2582,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + "internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" @@ -1787,6 +2600,16 @@ __metadata: languageName: node linkType: hard +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" @@ -1857,6 +2680,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -1866,6 +2696,13 @@ __metadata: languageName: node linkType: hard +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" @@ -1915,6 +2752,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10c0/eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -1965,6 +2809,33 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"js-tokens@npm:^9.0.0": + version: 9.0.0 + resolution: "js-tokens@npm:9.0.0" + checksum: 10c0/4ad1c12f47b8c8b2a3a99e29ef338c1385c7b7442198a425f3463f3537384dab6032012791bfc2f056ea5ecdb06b1ed4f70e11a3ab3f388d3dcebfe16a52b27d + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -1976,6 +2847,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + "jsdoc-type-pratt-parser@npm:~4.0.0": version: 4.0.0 resolution: "jsdoc-type-pratt-parser@npm:4.0.0" @@ -2047,6 +2925,16 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.5.0": + version: 0.5.0 + resolution: "local-pkg@npm:0.5.0" + dependencies: + mlly: "npm:^1.4.2" + pkg-types: "npm:^1.0.3" + checksum: 10c0/f61cbd00d7689f275558b1a45c7ff2a3ddf8472654123ed880215677b9adfa729f1081e50c27ffb415cdb9fa706fb755fec5e23cdd965be375c8059e87ff1cc9 + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -2070,6 +2958,31 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.6, loupe@npm:^2.3.7": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: "npm:^2.0.1" + checksum: 10c0/71a781c8fc21527b99ed1062043f1f2bb30bdaf54fa4cf92463427e1718bc6567af2988300bc243c1f276e4f0876f29e3cbf7b58106fdc186915687456ce5bf4 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"magic-string@npm:^0.30.5": + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/b9eb370773d0bd90ca11a848753409d8e5309b1ad56d2a1aa49d6649da710a6d2fe7237ad1a643c5a5d3800de2b9946ed9690acdfc00e6cc1aeafff3ab1752c4 + languageName: node + linkType: hard + "make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -2077,6 +2990,33 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -2094,6 +3034,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -2128,6 +3075,111 @@ __metadata: languageName: node linkType: hard +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mlly@npm:^1.4.2, mlly@npm:^1.7.1": + version: 1.7.1 + resolution: "mlly@npm:1.7.1" + dependencies: + acorn: "npm:^8.11.3" + pathe: "npm:^1.1.2" + pkg-types: "npm:^1.1.1" + ufo: "npm:^1.5.3" + checksum: 10c0/d836a7b0adff4d118af41fb93ad4d9e57f80e694a681185280ba220a4607603c19e86c80f9a6c57512b04280567f2599e3386081705c5b5fd74c9ddfd571d0fa + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -2142,6 +3194,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -2149,6 +3210,53 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "nth-check@npm:^2.1.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -2218,6 +3326,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10c0/4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -2241,6 +3358,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^5.0.0": + version: 5.0.0 + resolution: "p-limit@npm:5.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/574e93b8895a26e8485eb1df7c4b58a1a6e8d8ae41b1750cc2cc440922b3d306044fc6e9a7f74578a883d46802d9db72b30f2e612690fcef838c173261b1ed83 + languageName: node + linkType: hard + "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -2250,6 +3376,22 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.0 + resolution: "package-json-from-dist@npm:1.0.0" + checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -2290,6 +3432,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -2297,6 +3446,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -2304,13 +3463,27 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.2": +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 languageName: node linkType: hard +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 10c0/f63e1bc1b33593cdf094ed6ff5c49c1c0dc5dc20a646ca9725cc7fe7cd9995002d51d5685b9b2ec6814342935748b711bafa840f84c0bb04e38ff40a335c94dc + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 + languageName: node + linkType: hard + "picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -2325,6 +3498,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3, pkg-types@npm:^1.1.1": + version: 1.1.3 + resolution: "pkg-types@npm:1.1.3" + dependencies: + confbox: "npm:^0.1.7" + mlly: "npm:^1.7.1" + pathe: "npm:^1.1.2" + checksum: 10c0/4cd2c9442dd5e4ae0c61cbd8fdaa92a273939749b081f78150ce9a3f4e625cca0375607386f49f103f0720b239d02369bf181c3ea6c80cf1028a633df03706ad + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" @@ -2342,6 +3526,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.41": + version: 8.4.41 + resolution: "postcss@npm:8.4.41" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.0.1" + source-map-js: "npm:^1.2.0" + checksum: 10c0/c1828fc59e7ec1a3bf52b3a42f615dba53c67960ed82a81df6441b485fe43c20aba7f4e7c55425762fd99c594ecabbaaba8cf5b30fd79dfec5b52a9f63a2d690 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -2349,6 +3544,34 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -2363,6 +3586,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" @@ -2415,6 +3645,13 @@ __metadata: languageName: node linkType: hard +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" @@ -2422,6 +3659,69 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.13.0": + version: 4.20.0 + resolution: "rollup@npm:4.20.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.20.0" + "@rollup/rollup-android-arm64": "npm:4.20.0" + "@rollup/rollup-darwin-arm64": "npm:4.20.0" + "@rollup/rollup-darwin-x64": "npm:4.20.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.20.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.20.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.20.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.20.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.20.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.20.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.20.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.20.0" + "@rollup/rollup-linux-x64-musl": "npm:4.20.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.20.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.20.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.20.0" + "@types/estree": "npm:1.0.5" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/9b23bf0e3380e64573a5f68a55274d5c7969036e55c19aab9fb4deea2e938d76769db70f3c95ee3783c24af152bea1772ad73f9e3625b6ffd4e600a788fe97ea + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -2454,6 +3754,13 @@ __metadata: languageName: node linkType: hard +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + "semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -2463,7 +3770,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.6, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": +"semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -2526,6 +3833,20 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -2540,6 +3861,41 @@ __metadata: languageName: node linkType: hard +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + languageName: node + linkType: hard + "spdx-exceptions@npm:^2.1.0": version: 2.5.0 resolution: "spdx-exceptions@npm:2.5.0" @@ -2564,6 +3920,58 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.5.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 10c0/60edf2d130a4feb7002974af3d5a5f3343558d1ccf8d9b9934d225c638606884db4a20d2fe6440a09605bca282af6b042ae8070a10490c0800d69e82e478f41e + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -2598,7 +4006,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -2607,6 +4015,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -2614,6 +4031,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10c0/a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -2621,6 +4045,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^2.0.0": + version: 2.1.0 + resolution: "strip-literal@npm:2.1.0" + dependencies: + js-tokens: "npm:^9.0.0" + checksum: 10c0/bc8b8c8346125ae3c20fcdaf12e10a498ff85baf6f69597b4ab2b5fbf2e58cfd2827f1a44f83606b852da99a5f6c8279770046ddea974c510c17c98934c9cc24 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -2654,6 +4087,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -2661,6 +4108,27 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.5.1": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinypool@npm:^0.8.2": + version: 0.8.4 + resolution: "tinypool@npm:0.8.4" + checksum: 10c0/779c790adcb0316a45359652f4b025958c1dff5a82460fe49f553c864309b12ad732c8288be52f852973bc76317f5e7b3598878aee0beb8a33322c0e72c4a66c + languageName: node + linkType: hard + +"tinyspy@npm:^2.2.0": + version: 2.2.1 + resolution: "tinyspy@npm:2.2.1" + checksum: 10c0/0b4cfd07c09871e12c592dfa7b91528124dc49a4766a0b23350638c62e6a483d5a2a667de7e6282246c0d4f09996482ddaacbd01f0c05b7ed7e0f79d32409bdc + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -2745,6 +4213,13 @@ __metadata: languageName: node linkType: hard +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -2840,6 +4315,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.3": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: 10c0/b5dc4dc435c49c9ef8890f1b280a19ee4d0954d1d6f9ab66ce62ce64dd04c7be476781531f952a07c678d51638d02ad4b98e16237be29149295b0f7c09cda765 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -2866,6 +4348,24 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -2896,6 +4396,114 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:1.4.0": + version: 1.4.0 + resolution: "vite-node@npm:1.4.0" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.4" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/bc8eb01dd03c2cc306be2bf35efe789d6a3e8ca1d89d635d3154a9af0213f7609c94ef849f30a01f04535b31e729aee49468275e267693a42c32845fbd2a6721 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.1 + resolution: "vite@npm:5.4.1" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.41" + rollup: "npm:^4.13.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/b9ea824f1a946aa494f756e6d9dd88869baa62ae5ba3071b32b6a20958fd622cb624c860bdd7daee201c83ca029feaf8bbe2d2a6e172a5d49308772f8899d86d + languageName: node + linkType: hard + +"vitest@npm:1.4.0": + version: 1.4.0 + resolution: "vitest@npm:1.4.0" + dependencies: + "@vitest/expect": "npm:1.4.0" + "@vitest/runner": "npm:1.4.0" + "@vitest/snapshot": "npm:1.4.0" + "@vitest/spy": "npm:1.4.0" + "@vitest/utils": "npm:1.4.0" + acorn-walk: "npm:^8.3.2" + chai: "npm:^4.3.10" + debug: "npm:^4.3.4" + execa: "npm:^8.0.1" + local-pkg: "npm:^0.5.0" + magic-string: "npm:^0.30.5" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + std-env: "npm:^3.5.0" + strip-literal: "npm:^2.0.0" + tinybench: "npm:^2.5.1" + tinypool: "npm:^0.8.2" + vite: "npm:^5.0.0" + vite-node: "npm:1.4.0" + why-is-node-running: "npm:^2.2.2" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 1.4.0 + "@vitest/ui": 1.4.0 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/732ce229341f6777350d36020dc00ccf5dd2ac0da39424cf5c9f6f4116ed1b6f7bb56de5a11270c693214d817b6d121d3d326e8f5a73437ec3f4c65aa07e1f52 + languageName: node + linkType: hard + "vue-eslint-parser@npm:^9.4.2, vue-eslint-parser@npm:^9.4.3": version: 9.4.3 resolution: "vue-eslint-parser@npm:9.4.3" @@ -2950,6 +4558,29 @@ __metadata: languageName: node linkType: hard +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.2.2": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -2957,6 +4588,28 @@ __metadata: languageName: node linkType: hard +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "xml-name-validator@npm:^4.0.0": version: 4.0.0 resolution: "xml-name-validator@npm:4.0.0" @@ -2964,6 +4617,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -2977,3 +4637,10 @@ __metadata: checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f languageName: node linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 + languageName: node + linkType: hard