├── .github └── workflows │ ├── demo.yml │ ├── e2e.yml │ └── release.yml ├── .gitignore ├── .husky └── pre-commit ├── .nvmrc ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── build.js ├── cypress.config.js ├── cypress └── e2e │ └── spec.cy.js ├── example ├── index.html └── src │ ├── main.css │ └── main.js ├── package-lock.json ├── package.json ├── readme.md ├── scripts └── e2e-run.js ├── src ├── calendar.d.ts ├── calendar.js ├── index.d.ts ├── index.js └── utils.js └── tsconfig.json /.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Example 2 | 3 | on: 4 | push: 5 | branches: ['main'] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | pages: write 11 | id-token: write 12 | 13 | concurrency: 14 | group: 'pages' 15 | cancel-in-progress: true 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@v4 23 | - name: Setup Node 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: '20' 27 | cache: npm 28 | - name: Install dependencies 29 | run: | 30 | npm ci 31 | - name: Build 32 | run: | 33 | npm run example:build 34 | - name: Upload artifact 35 | uses: actions/upload-pages-artifact@v3 36 | with: 37 | path: ./example 38 | 39 | # Deployment job 40 | deploy: 41 | environment: 42 | name: github-pages 43 | url: ${{ steps.deployment.outputs.page_url }} 44 | runs-on: ubuntu-latest 45 | needs: build 46 | steps: 47 | - name: Deploy to GitHub Pages 48 | id: deployment 49 | uses: actions/deploy-pages@v4 50 | -------------------------------------------------------------------------------- /.github/workflows/e2e.yml: -------------------------------------------------------------------------------- 1 | name: Cypress Tests 2 | 3 | on: push 4 | 5 | jobs: 6 | cypress-run: 7 | runs-on: ubuntu-22.04 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v4 11 | - name: Cypress run 12 | uses: cypress-io/github-action@v6 13 | with: 14 | build: npm run example:build 15 | start: npm run example:dev 16 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | on: 3 | push: 4 | tags: 5 | - 'v*.*.*' 6 | 7 | jobs: 8 | publish: 9 | runs-on: ubuntu-latest 10 | permissions: 11 | pull-requests: write 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version-file: .nvmrc 17 | registry-url: 'https://registry.npmjs.org' 18 | 19 | - name: Install dependencies 20 | run: npm ci 21 | - name: Test 22 | run: npm run test 23 | - name: Compile 24 | run: npm run build 25 | - name: Get Package Version 26 | id: get-package-version 27 | uses: stevenbenitez/get-package-version-action@v1 28 | - name: Lint Package 29 | run: npm run package:lint 30 | 31 | - name: Publish 32 | run: | 33 | npm publish --tag unsure 34 | env: 35 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 36 | 37 | - name: Tag Beta 38 | if: contains(steps.get-package-version.outputs.version, '-beta') 39 | run: | 40 | npm dist-tags add @preachjs/datepicker@${{ steps.get-package-version.outputs.version }} beta 41 | env: 42 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 43 | 44 | - name: PR Message 45 | uses: mshick/add-pr-comment@v2 46 | if: contains(steps.get-package-version.outputs.version, '-beta') && github.event_name == 'pull_request' 47 | with: 48 | message: | 49 | Published new beta release: ${{ steps.get-package-version.outputs.version }} 50 | 51 | - name: Tag Release 52 | if: ${{ !contains(steps.get-package-version.outputs.version, '-beta') }} 53 | run: | 54 | npm dist-tags add @preachjs/datepicker@${{ steps.get-package-version.outputs.version }} latest 55 | env: 56 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | dist 4 | 5 | cypress/results/* 6 | cypress/reports/* 7 | cypress/screenshots/* 8 | cypress/videos/* 9 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npm i --silent 2 | npx lint-staged 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v18.17.0 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Changelog 2 | 3 | # Pending 4 | 5 | - Datepicker can be set to be readOnly using the `readOnly` flag - 6 | a88e98357e7aedd6bb8e1d913698b99e884eaa97 7 | 8 | # 0.0.4-beta.1 9 | 10 | - Fix where the types are inferred from from users - 11 | 29db41af18f758d11a5ee8c65d7c0d9aca9ecd99 12 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Notes 2 | 3 | ## Basics 4 | 5 | 1. This packages ships it's source as is. There's no transpilation of the JSX, 6 | nor is there a build step for the final package. 7 | 2. To develop and test, use the `example` that's in place as your playground 8 | 3. Any changes made to the `example` need to go through the `e2e` tests again or 9 | simply put, if you change the example, sync the tests for the same. 10 | 11 | ## Development 12 | 13 | 1. You'll need `node>=18` to be able to run the example. 14 | 15 | ## PR Stratergy 16 | 17 | 1. We Squash the changes so don't worry so much about the commit messages on 18 | your branch. 19 | 2. Make sure the PR themselves are very focused and not trying to change a wider 20 | scope of the project 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 reaper 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | import esbuild from 'esbuild' 2 | 3 | const args = process.argv.slice() 4 | const isDev = args.includes('--dev') 5 | 6 | const ctx = await esbuild.context({ 7 | entryPoints: ['./example/src/main.js'], 8 | format: 'esm', 9 | bundle: true, 10 | logLevel: 'info', 11 | platform: 'browser', 12 | outdir: 'example/dist', 13 | jsx: 'automatic', 14 | jsxImportSource: 'preact', 15 | loader: { 16 | '.js': 'jsx', 17 | }, 18 | }) 19 | 20 | if (isDev) { 21 | await ctx.watch() 22 | setTimeout(() => { 23 | ctx.serve({ 24 | port: 8000, 25 | servedir: './example', 26 | }) 27 | }, 100) 28 | } 29 | 30 | await ctx.rebuild() 31 | !isDev && process.exit(0) 32 | -------------------------------------------------------------------------------- /cypress.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'cypress' 2 | 3 | export default defineConfig({ 4 | e2e: { 5 | supportFile: false, 6 | setupNodeEvents(on, config) { 7 | // implement node event listeners here 8 | }, 9 | }, 10 | }) 11 | -------------------------------------------------------------------------------- /cypress/e2e/spec.cy.js: -------------------------------------------------------------------------------- 1 | describe('basic', () => { 2 | it('should not change in readOnlyMode', function () { 3 | cy.visit('localhost:8000') 4 | 5 | let content = cy.get('.selected-text') 6 | content.should('have.text', 'Selected: None') 7 | 8 | // Switch to read only mode 9 | cy.get('[name=read-only]').click() 10 | 11 | // make a selection 12 | cy.get('[data-row="1"][data-col="1"] > button').click() 13 | 14 | // Nothing should be selected 15 | content = cy.get('.selected-text') 16 | content.should('have.text', 'Selected: None') 17 | }) 18 | 19 | it('Switch between modes', function () { 20 | cy.visit('localhost:8000') 21 | 22 | let content = cy.get('.selected-text') 23 | content.should('have.text', 'Selected: None') 24 | 25 | // Switch to range 26 | cy.get('[name=mode][value=range]').click() 27 | content = cy.get('.selected-text') 28 | content.should('have.text', 'Selected Range: None - None') 29 | 30 | // Switch to single 31 | cy.get('[name=mode][value=single]').click() 32 | content = cy.get('.selected-text') 33 | content.should('not.have.text', 'Selected Range: None - None') 34 | content.should('have.text', 'Selected: None') 35 | }) 36 | 37 | it('Basic Keyboard movement', function () { 38 | cy.visit('localhost:8000') 39 | cy.get('[data-row="1"][data-col="1"] > button').click() 40 | 41 | // Down 42 | cy.get('[data-row="1"][data-col="1"] > button').type('{downArrow}') 43 | cy.get('[data-row="2"][data-col="1"] > button') 44 | .should('have.css', 'background-color') 45 | .and('match', /(rgb\(0, 0, 0\))/) 46 | 47 | // Up 48 | cy.get('[data-row="2"][data-col="1"] > button').type('{upArrow}') 49 | cy.get('[data-row="1"][data-col="1"] > button') 50 | .should('have.css', 'background-color') 51 | .and('match', /(rgb\(0, 0, 0\))/) 52 | 53 | // Right 54 | cy.get('[data-row="1"][data-col="1"] > button').type('{rightArrow}') 55 | cy.get('[data-row="1"][data-col="2"] > button') 56 | .should('have.css', 'background-color') 57 | .and('match', /(rgb\(0, 0, 0\))/) 58 | 59 | // Left 60 | cy.get('[data-row="1"][data-col="2"] > button').type('{leftArrow}') 61 | cy.get('[data-row="1"][data-col="1"] > button') 62 | .should('have.css', 'background-color') 63 | .and('match', /(rgb\(0, 0, 0\))/) 64 | }) 65 | }) 66 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | @preachjs/datepicker | Headless Datepicker for preact 7 | 8 | 9 | 10 |
11 |
12 | 15 | 25 |
26 |
27 |
28 |
npm i @preachjs/datepicker
31 |
32 |
33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /example/src/main.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | body { 7 | padding: 1em; 8 | font-family: 9 | -apple-system, 10 | BlinkMacSystemFont, 11 | avenir next, 12 | avenir, 13 | segoe ui, 14 | helvetica neue, 15 | helvetica, 16 | Cantarell, 17 | Ubuntu, 18 | roboto, 19 | noto, 20 | arial, 21 | sans-serif; 22 | } 23 | 24 | a { 25 | color: black; 26 | } 27 | 28 | /* Header */ 29 | header a { 30 | text-decoration: none; 31 | font-size: 1.125em; 32 | } 33 | 34 | header a:hover { 35 | text-decoration: underline; 36 | } 37 | 38 | header .overlay, 39 | nav { 40 | display: flex; 41 | flex-direction: row; 42 | align-items: center; 43 | justify-content: flex-start; 44 | height: 100%; 45 | } 46 | 47 | header { 48 | background: white; 49 | height: 52px; 50 | } 51 | 52 | .home { 53 | font-weight: bold; 54 | margin-right: 3ch; 55 | } 56 | 57 | nav { 58 | gap: 1.5ch; 59 | } 60 | 61 | nav a { 62 | font-weight: normal; 63 | white-space: nowrap; 64 | } 65 | 66 | /* Install code block */ 67 | .code-block { 68 | white-space: pre-wrap; 69 | background: #f1f3f5; 70 | padding: 1em; 71 | border-radius: 4px; 72 | } 73 | 74 | /* Utils */ 75 | .m1 { 76 | margin: 1em; 77 | } 78 | 79 | .mx1 { 80 | margin-left: 1em; 81 | margin-right: 1em; 82 | } 83 | 84 | .my1 { 85 | margin-top: 1em; 86 | margin-bottom: 1em; 87 | } 88 | 89 | #app { 90 | max-width: 80ch; 91 | min-height: 70vh; 92 | margin: 0 auto; 93 | } 94 | 95 | .cal-container { 96 | min-height: inherit; 97 | height: 100%; 98 | width: 100%; 99 | justify-content: center; 100 | display: flex; 101 | flex-direction: column; 102 | align-items: center; 103 | } 104 | 105 | .cal-mode-selection { 106 | display: flex; 107 | gap: 10px; 108 | align-items: center; 109 | margin-bottom: 1rem; 110 | } 111 | 112 | .selected-text { 113 | color: black; 114 | } 115 | 116 | .selected-text .header { 117 | color: #adb5bd; 118 | font-weight: 600; 119 | letter-spacing: 0.025rem; 120 | } 121 | 122 | /* Calendar styles */ 123 | 124 | .preachjs-calendar { 125 | max-width: 350px; 126 | } 127 | 128 | .preachjs-calendar .preachjs-calendar--header { 129 | display: flex; 130 | flex-direction: row; 131 | justify-content: space-between; 132 | align-items: center; 133 | } 134 | 135 | .preachjs-calendar .preachjs-calendar--header button { 136 | background: transparent; 137 | padding: 4px; 138 | display: flex; 139 | outline: black; 140 | border: 0px; 141 | align-items: center; 142 | justify-content: center; 143 | border-radius: 6px; 144 | } 145 | 146 | .preachjs-calendar .preachjs-calendar--header button:hover, 147 | .preachjs-calendar .preachjs-calendar--header button:focus { 148 | background-color: #efefef; 149 | } 150 | 151 | .preachjs-calendar .preachjs-calendar--header h2 { 152 | font-size: 16px; 153 | font-weight: 600; 154 | } 155 | 156 | .preachjs-calendar .preachjs-calendar--grid { 157 | width: 100%; 158 | border-collapse: collapse; 159 | } 160 | 161 | .preachjs-calendar .preachjs-calendar--grid .preachjs-calendar--grid-header th { 162 | text-align: center; 163 | width: 2em; 164 | height: 2em; 165 | } 166 | 167 | .preachjs-calendar 168 | .preachjs-calendar--grid 169 | .preachjs-calendar--grid-body 170 | .preachjs-calendar--grid-cell { 171 | text-align: center; 172 | width: 2em; 173 | height: 2em; 174 | } 175 | 176 | .preachjs-calendar 177 | .preachjs-calendar--grid 178 | .preachjs-calendar--grid-body 179 | .preachjs-calendar--grid-cell 180 | button { 181 | width: 100%; 182 | height: 100%; 183 | background: transparent; 184 | outline: none; 185 | padding: 4px; 186 | display: flex; 187 | outline: none; 188 | border: 0px; 189 | align-items: center; 190 | justify-content: center; 191 | border-radius: 6px; 192 | transition: 250ms all ease-in-out; 193 | } 194 | 195 | .preachjs-calendar 196 | .preachjs-calendar--grid 197 | .preachjs-calendar--grid-body 198 | .preachjs-calendar--grid-cell 199 | button:hover, 200 | .preachjs-calendar 201 | .preachjs-calendar--grid 202 | .preachjs-calendar--grid-body 203 | .preachjs-calendar--grid-cell 204 | button:focus, 205 | .preachjs-calendar 206 | .preachjs-calendar--grid 207 | .preachjs-calendar--grid-body 208 | .preachjs-calendar--grid-cell.active 209 | button { 210 | color: white; 211 | background: black; 212 | } 213 | 214 | .preachjs-calendar 215 | .preachjs-calendar--grid 216 | .preachjs-calendar--grid-body 217 | .preachjs-calendar--grid-cell.read-only 218 | button:hover, 219 | .preachjs-calendar 220 | .preachjs-calendar--grid 221 | .preachjs-calendar--grid-body 222 | .preachjs-calendar--grid-cell.read-only 223 | button:focus, 224 | button { 225 | color: inherit; 226 | background: inherit; 227 | } 228 | 229 | .preachjs-calendar 230 | .preachjs-calendar--grid 231 | .preachjs-calendar--grid-body 232 | .preachjs-calendar--grid-cell.preachjs-calendar--grid-cell-start, 233 | .preachjs-calendar 234 | .preachjs-calendar--grid 235 | .preachjs-calendar--grid-body 236 | .preachjs-calendar--grid-cell.preachjs-calendar--grid-cell-start 237 | button { 238 | border-radius: 0px; 239 | border-right: 0px; 240 | background: black; 241 | color: white; 242 | border-radius: 0px; 243 | border-top-left-radius: 6px; 244 | border-bottom-left-radius: 6px; 245 | } 246 | 247 | .preachjs-calendar 248 | .preachjs-calendar--grid 249 | .preachjs-calendar--grid-body 250 | .preachjs-calendar--grid-cell.preachjs-calendar--grid-cell-in-range { 251 | background: #efefef; 252 | } 253 | 254 | .preachjs-calendar 255 | .preachjs-calendar--grid 256 | .preachjs-calendar--grid-body 257 | .preachjs-calendar--grid-cell.preachjs-calendar--grid-cell-end, 258 | .preachjs-calendar 259 | .preachjs-calendar--grid 260 | .preachjs-calendar--grid-body 261 | .preachjs-calendar--grid-cell.preachjs-calendar--grid-cell-end 262 | button { 263 | background: black; 264 | color: white; 265 | border-radius: 0px; 266 | border-top-right-radius: 6px; 267 | border-bottom-right-radius: 6px; 268 | border-left: 0px; 269 | } 270 | -------------------------------------------------------------------------------- /example/src/main.js: -------------------------------------------------------------------------------- 1 | import { signal } from '@preact/signals' 2 | import { Calendar } from '../../src/index.js' 3 | import { render } from 'preact' 4 | import './main.css' 5 | 6 | const mode = signal('single') 7 | const selectedDate = signal() 8 | const readOnly = signal(false) 9 | 10 | const App = () => { 11 | return ( 12 | <> 13 |
14 |
15 | 27 | 37 | 46 |
47 | { 52 | selectedDate.value = value 53 | }} 54 | weekdayFormat="narrow" 55 | arrowRight={() => { 56 | return ( 57 | 69 | 70 | 71 | 72 | ) 73 | }} 74 | arrowLeft={() => { 75 | return ( 76 | 88 | 89 | 90 | 91 | ) 92 | }} 93 | /> 94 |
95 | {mode == 'single' && ( 96 |

97 | Selected: 98 | {selectedDate.value 99 | ? new Date(selectedDate.value).toLocaleString() 100 | : 'None'} 101 |

102 | )} 103 |
104 |
105 | {mode == 'range' ? ( 106 |

107 | Selected Range: 108 | {selectedDate?.value?.length == 2 109 | ? new Date(selectedDate.value[0]).toLocaleString() 110 | : 'None'}{' '} 111 | -{' '} 112 | {selectedDate?.value?.length == 2 113 | ? new Date(selectedDate.value[1]).toLocaleString() 114 | : 'None'} 115 |

116 | ) : null} 117 |
118 |
119 | 120 | ) 121 | } 122 | 123 | render(, document.querySelector('#app')) 124 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@preachjs/datepicker", 3 | "version": "0.0.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@preachjs/datepicker", 9 | "version": "0.0.4", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@barelyhuman/prettier-config": "^1.1.0", 13 | "@preact/signals": "^1.3.0", 14 | "bumpp": "^9.5.1", 15 | "cypress": "^13.13.2", 16 | "esbuild": "^0.23.0", 17 | "husky": "^9.1.4", 18 | "lint-staged": "^15.2.9", 19 | "preact": "^10.23.2", 20 | "prettier": "^3.3.3", 21 | "publint": "^0.2.9", 22 | "typescript": "^5.5.4", 23 | "wait-on": "^7.2.0" 24 | }, 25 | "peerDependencies": { 26 | "@preact/signals": ">=1.2.2", 27 | "preact": ">=10" 28 | } 29 | }, 30 | "node_modules/@barelyhuman/prettier-config": { 31 | "version": "1.1.0", 32 | "dev": true, 33 | "license": "MIT" 34 | }, 35 | "node_modules/@colors/colors": { 36 | "version": "1.5.0", 37 | "dev": true, 38 | "license": "MIT", 39 | "optional": true, 40 | "engines": { 41 | "node": ">=0.1.90" 42 | } 43 | }, 44 | "node_modules/@cypress/request": { 45 | "version": "3.0.1", 46 | "dev": true, 47 | "license": "Apache-2.0", 48 | "dependencies": { 49 | "aws-sign2": "~0.7.0", 50 | "aws4": "^1.8.0", 51 | "caseless": "~0.12.0", 52 | "combined-stream": "~1.0.6", 53 | "extend": "~3.0.2", 54 | "forever-agent": "~0.6.1", 55 | "form-data": "~2.3.2", 56 | "http-signature": "~1.3.6", 57 | "is-typedarray": "~1.0.0", 58 | "isstream": "~0.1.2", 59 | "json-stringify-safe": "~5.0.1", 60 | "mime-types": "~2.1.19", 61 | "performance-now": "^2.1.0", 62 | "qs": "6.10.4", 63 | "safe-buffer": "^5.1.2", 64 | "tough-cookie": "^4.1.3", 65 | "tunnel-agent": "^0.6.0", 66 | "uuid": "^8.3.2" 67 | }, 68 | "engines": { 69 | "node": ">= 6" 70 | } 71 | }, 72 | "node_modules/@cypress/xvfb": { 73 | "version": "1.2.4", 74 | "dev": true, 75 | "license": "MIT", 76 | "dependencies": { 77 | "debug": "^3.1.0", 78 | "lodash.once": "^4.1.1" 79 | } 80 | }, 81 | "node_modules/@cypress/xvfb/node_modules/debug": { 82 | "version": "3.2.7", 83 | "dev": true, 84 | "license": "MIT", 85 | "dependencies": { 86 | "ms": "^2.1.1" 87 | } 88 | }, 89 | "node_modules/@hapi/hoek": { 90 | "version": "9.3.0", 91 | "dev": true, 92 | "license": "BSD-3-Clause" 93 | }, 94 | "node_modules/@hapi/topo": { 95 | "version": "5.1.0", 96 | "dev": true, 97 | "license": "BSD-3-Clause", 98 | "dependencies": { 99 | "@hapi/hoek": "^9.0.0" 100 | } 101 | }, 102 | "node_modules/@jsdevtools/ez-spawn": { 103 | "version": "3.0.4", 104 | "dev": true, 105 | "license": "MIT", 106 | "dependencies": { 107 | "call-me-maybe": "^1.0.1", 108 | "cross-spawn": "^7.0.3", 109 | "string-argv": "^0.3.1", 110 | "type-detect": "^4.0.8" 111 | }, 112 | "engines": { 113 | "node": ">=10" 114 | } 115 | }, 116 | "node_modules/@nodelib/fs.scandir": { 117 | "version": "2.1.5", 118 | "dev": true, 119 | "license": "MIT", 120 | "dependencies": { 121 | "@nodelib/fs.stat": "2.0.5", 122 | "run-parallel": "^1.1.9" 123 | }, 124 | "engines": { 125 | "node": ">= 8" 126 | } 127 | }, 128 | "node_modules/@nodelib/fs.stat": { 129 | "version": "2.0.5", 130 | "dev": true, 131 | "license": "MIT", 132 | "engines": { 133 | "node": ">= 8" 134 | } 135 | }, 136 | "node_modules/@nodelib/fs.walk": { 137 | "version": "1.2.8", 138 | "dev": true, 139 | "license": "MIT", 140 | "dependencies": { 141 | "@nodelib/fs.scandir": "2.1.5", 142 | "fastq": "^1.6.0" 143 | }, 144 | "engines": { 145 | "node": ">= 8" 146 | } 147 | }, 148 | "node_modules/@preact/signals": { 149 | "version": "1.3.0", 150 | "dev": true, 151 | "license": "MIT", 152 | "dependencies": { 153 | "@preact/signals-core": "^1.7.0" 154 | }, 155 | "funding": { 156 | "type": "opencollective", 157 | "url": "https://opencollective.com/preact" 158 | }, 159 | "peerDependencies": { 160 | "preact": "10.x" 161 | } 162 | }, 163 | "node_modules/@preact/signals-core": { 164 | "version": "1.8.0", 165 | "dev": true, 166 | "license": "MIT", 167 | "funding": { 168 | "type": "opencollective", 169 | "url": "https://opencollective.com/preact" 170 | } 171 | }, 172 | "node_modules/@sideway/address": { 173 | "version": "4.1.5", 174 | "dev": true, 175 | "license": "BSD-3-Clause", 176 | "dependencies": { 177 | "@hapi/hoek": "^9.0.0" 178 | } 179 | }, 180 | "node_modules/@sideway/formula": { 181 | "version": "3.0.1", 182 | "dev": true, 183 | "license": "BSD-3-Clause" 184 | }, 185 | "node_modules/@sideway/pinpoint": { 186 | "version": "2.0.0", 187 | "dev": true, 188 | "license": "BSD-3-Clause" 189 | }, 190 | "node_modules/@types/node": { 191 | "version": "20.11.28", 192 | "dev": true, 193 | "license": "MIT", 194 | "optional": true, 195 | "dependencies": { 196 | "undici-types": "~5.26.4" 197 | } 198 | }, 199 | "node_modules/@types/sinonjs__fake-timers": { 200 | "version": "8.1.1", 201 | "dev": true, 202 | "license": "MIT" 203 | }, 204 | "node_modules/@types/sizzle": { 205 | "version": "2.3.8", 206 | "dev": true, 207 | "license": "MIT" 208 | }, 209 | "node_modules/@types/yauzl": { 210 | "version": "2.10.3", 211 | "dev": true, 212 | "license": "MIT", 213 | "optional": true, 214 | "dependencies": { 215 | "@types/node": "*" 216 | } 217 | }, 218 | "node_modules/acorn": { 219 | "version": "8.12.1", 220 | "dev": true, 221 | "license": "MIT", 222 | "bin": { 223 | "acorn": "bin/acorn" 224 | }, 225 | "engines": { 226 | "node": ">=0.4.0" 227 | } 228 | }, 229 | "node_modules/aggregate-error": { 230 | "version": "3.1.0", 231 | "dev": true, 232 | "license": "MIT", 233 | "dependencies": { 234 | "clean-stack": "^2.0.0", 235 | "indent-string": "^4.0.0" 236 | }, 237 | "engines": { 238 | "node": ">=8" 239 | } 240 | }, 241 | "node_modules/ansi-colors": { 242 | "version": "4.1.3", 243 | "dev": true, 244 | "license": "MIT", 245 | "engines": { 246 | "node": ">=6" 247 | } 248 | }, 249 | "node_modules/ansi-escapes": { 250 | "version": "4.3.2", 251 | "dev": true, 252 | "license": "MIT", 253 | "dependencies": { 254 | "type-fest": "^0.21.3" 255 | }, 256 | "engines": { 257 | "node": ">=8" 258 | }, 259 | "funding": { 260 | "url": "https://github.com/sponsors/sindresorhus" 261 | } 262 | }, 263 | "node_modules/ansi-regex": { 264 | "version": "5.0.1", 265 | "dev": true, 266 | "license": "MIT", 267 | "engines": { 268 | "node": ">=8" 269 | } 270 | }, 271 | "node_modules/ansi-styles": { 272 | "version": "4.3.0", 273 | "dev": true, 274 | "license": "MIT", 275 | "dependencies": { 276 | "color-convert": "^2.0.1" 277 | }, 278 | "engines": { 279 | "node": ">=8" 280 | }, 281 | "funding": { 282 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 283 | } 284 | }, 285 | "node_modules/anymatch": { 286 | "version": "3.1.3", 287 | "dev": true, 288 | "license": "ISC", 289 | "dependencies": { 290 | "normalize-path": "^3.0.0", 291 | "picomatch": "^2.0.4" 292 | }, 293 | "engines": { 294 | "node": ">= 8" 295 | } 296 | }, 297 | "node_modules/arch": { 298 | "version": "2.2.0", 299 | "dev": true, 300 | "funding": [ 301 | { 302 | "type": "github", 303 | "url": "https://github.com/sponsors/feross" 304 | }, 305 | { 306 | "type": "patreon", 307 | "url": "https://www.patreon.com/feross" 308 | }, 309 | { 310 | "type": "consulting", 311 | "url": "https://feross.org/support" 312 | } 313 | ], 314 | "license": "MIT" 315 | }, 316 | "node_modules/argparse": { 317 | "version": "2.0.1", 318 | "dev": true, 319 | "license": "Python-2.0" 320 | }, 321 | "node_modules/asn1": { 322 | "version": "0.2.6", 323 | "dev": true, 324 | "license": "MIT", 325 | "dependencies": { 326 | "safer-buffer": "~2.1.0" 327 | } 328 | }, 329 | "node_modules/assert-plus": { 330 | "version": "1.0.0", 331 | "dev": true, 332 | "license": "MIT", 333 | "engines": { 334 | "node": ">=0.8" 335 | } 336 | }, 337 | "node_modules/astral-regex": { 338 | "version": "2.0.0", 339 | "dev": true, 340 | "license": "MIT", 341 | "engines": { 342 | "node": ">=8" 343 | } 344 | }, 345 | "node_modules/async": { 346 | "version": "3.2.5", 347 | "dev": true, 348 | "license": "MIT" 349 | }, 350 | "node_modules/asynckit": { 351 | "version": "0.4.0", 352 | "dev": true, 353 | "license": "MIT" 354 | }, 355 | "node_modules/at-least-node": { 356 | "version": "1.0.0", 357 | "dev": true, 358 | "license": "ISC", 359 | "engines": { 360 | "node": ">= 4.0.0" 361 | } 362 | }, 363 | "node_modules/aws-sign2": { 364 | "version": "0.7.0", 365 | "dev": true, 366 | "license": "Apache-2.0", 367 | "engines": { 368 | "node": "*" 369 | } 370 | }, 371 | "node_modules/aws4": { 372 | "version": "1.12.0", 373 | "dev": true, 374 | "license": "MIT" 375 | }, 376 | "node_modules/axios": { 377 | "version": "1.7.3", 378 | "dev": true, 379 | "license": "MIT", 380 | "dependencies": { 381 | "follow-redirects": "^1.15.6", 382 | "form-data": "^4.0.0", 383 | "proxy-from-env": "^1.1.0" 384 | } 385 | }, 386 | "node_modules/axios/node_modules/form-data": { 387 | "version": "4.0.1", 388 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 389 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 390 | "dev": true, 391 | "license": "MIT", 392 | "dependencies": { 393 | "asynckit": "^0.4.0", 394 | "combined-stream": "^1.0.8", 395 | "mime-types": "^2.1.12" 396 | }, 397 | "engines": { 398 | "node": ">= 6" 399 | } 400 | }, 401 | "node_modules/axios/node_modules/proxy-from-env": { 402 | "version": "1.1.0", 403 | "dev": true, 404 | "license": "MIT" 405 | }, 406 | "node_modules/balanced-match": { 407 | "version": "1.0.2", 408 | "dev": true, 409 | "license": "MIT" 410 | }, 411 | "node_modules/base64-js": { 412 | "version": "1.5.1", 413 | "dev": true, 414 | "funding": [ 415 | { 416 | "type": "github", 417 | "url": "https://github.com/sponsors/feross" 418 | }, 419 | { 420 | "type": "patreon", 421 | "url": "https://www.patreon.com/feross" 422 | }, 423 | { 424 | "type": "consulting", 425 | "url": "https://feross.org/support" 426 | } 427 | ], 428 | "license": "MIT" 429 | }, 430 | "node_modules/bcrypt-pbkdf": { 431 | "version": "1.0.2", 432 | "dev": true, 433 | "license": "BSD-3-Clause", 434 | "dependencies": { 435 | "tweetnacl": "^0.14.3" 436 | } 437 | }, 438 | "node_modules/binary-extensions": { 439 | "version": "2.3.0", 440 | "dev": true, 441 | "license": "MIT", 442 | "engines": { 443 | "node": ">=8" 444 | }, 445 | "funding": { 446 | "url": "https://github.com/sponsors/sindresorhus" 447 | } 448 | }, 449 | "node_modules/blob-util": { 450 | "version": "2.0.2", 451 | "dev": true, 452 | "license": "Apache-2.0" 453 | }, 454 | "node_modules/bluebird": { 455 | "version": "3.7.2", 456 | "dev": true, 457 | "license": "MIT" 458 | }, 459 | "node_modules/brace-expansion": { 460 | "version": "2.0.1", 461 | "dev": true, 462 | "license": "MIT", 463 | "dependencies": { 464 | "balanced-match": "^1.0.0" 465 | } 466 | }, 467 | "node_modules/braces": { 468 | "version": "3.0.3", 469 | "dev": true, 470 | "license": "MIT", 471 | "dependencies": { 472 | "fill-range": "^7.1.1" 473 | }, 474 | "engines": { 475 | "node": ">=8" 476 | } 477 | }, 478 | "node_modules/buffer": { 479 | "version": "5.7.1", 480 | "dev": true, 481 | "funding": [ 482 | { 483 | "type": "github", 484 | "url": "https://github.com/sponsors/feross" 485 | }, 486 | { 487 | "type": "patreon", 488 | "url": "https://www.patreon.com/feross" 489 | }, 490 | { 491 | "type": "consulting", 492 | "url": "https://feross.org/support" 493 | } 494 | ], 495 | "license": "MIT", 496 | "dependencies": { 497 | "base64-js": "^1.3.1", 498 | "ieee754": "^1.1.13" 499 | } 500 | }, 501 | "node_modules/buffer-crc32": { 502 | "version": "0.2.13", 503 | "dev": true, 504 | "license": "MIT", 505 | "engines": { 506 | "node": "*" 507 | } 508 | }, 509 | "node_modules/bumpp": { 510 | "version": "9.5.1", 511 | "dev": true, 512 | "license": "MIT", 513 | "dependencies": { 514 | "@jsdevtools/ez-spawn": "^3.0.4", 515 | "c12": "^1.11.1", 516 | "cac": "^6.7.14", 517 | "escalade": "^3.1.2", 518 | "fast-glob": "^3.3.2", 519 | "js-yaml": "^4.1.0", 520 | "jsonc-parser": "^3.3.1", 521 | "prompts": "^2.4.2", 522 | "semver": "^7.6.3" 523 | }, 524 | "bin": { 525 | "bumpp": "bin/bumpp.js" 526 | }, 527 | "engines": { 528 | "node": ">=10" 529 | } 530 | }, 531 | "node_modules/c12": { 532 | "version": "1.11.1", 533 | "dev": true, 534 | "license": "MIT", 535 | "dependencies": { 536 | "chokidar": "^3.6.0", 537 | "confbox": "^0.1.7", 538 | "defu": "^6.1.4", 539 | "dotenv": "^16.4.5", 540 | "giget": "^1.2.3", 541 | "jiti": "^1.21.6", 542 | "mlly": "^1.7.1", 543 | "ohash": "^1.1.3", 544 | "pathe": "^1.1.2", 545 | "perfect-debounce": "^1.0.0", 546 | "pkg-types": "^1.1.1", 547 | "rc9": "^2.1.2" 548 | }, 549 | "peerDependencies": { 550 | "magicast": "^0.3.4" 551 | }, 552 | "peerDependenciesMeta": { 553 | "magicast": { 554 | "optional": true 555 | } 556 | } 557 | }, 558 | "node_modules/cac": { 559 | "version": "6.7.14", 560 | "dev": true, 561 | "license": "MIT", 562 | "engines": { 563 | "node": ">=8" 564 | } 565 | }, 566 | "node_modules/cachedir": { 567 | "version": "2.4.0", 568 | "dev": true, 569 | "license": "MIT", 570 | "engines": { 571 | "node": ">=6" 572 | } 573 | }, 574 | "node_modules/call-bind": { 575 | "version": "1.0.7", 576 | "dev": true, 577 | "license": "MIT", 578 | "dependencies": { 579 | "es-define-property": "^1.0.0", 580 | "es-errors": "^1.3.0", 581 | "function-bind": "^1.1.2", 582 | "get-intrinsic": "^1.2.4", 583 | "set-function-length": "^1.2.1" 584 | }, 585 | "engines": { 586 | "node": ">= 0.4" 587 | }, 588 | "funding": { 589 | "url": "https://github.com/sponsors/ljharb" 590 | } 591 | }, 592 | "node_modules/call-me-maybe": { 593 | "version": "1.0.2", 594 | "dev": true, 595 | "license": "MIT" 596 | }, 597 | "node_modules/caseless": { 598 | "version": "0.12.0", 599 | "dev": true, 600 | "license": "Apache-2.0" 601 | }, 602 | "node_modules/chalk": { 603 | "version": "4.1.2", 604 | "dev": true, 605 | "license": "MIT", 606 | "dependencies": { 607 | "ansi-styles": "^4.1.0", 608 | "supports-color": "^7.1.0" 609 | }, 610 | "engines": { 611 | "node": ">=10" 612 | }, 613 | "funding": { 614 | "url": "https://github.com/chalk/chalk?sponsor=1" 615 | } 616 | }, 617 | "node_modules/chalk/node_modules/supports-color": { 618 | "version": "7.2.0", 619 | "dev": true, 620 | "license": "MIT", 621 | "dependencies": { 622 | "has-flag": "^4.0.0" 623 | }, 624 | "engines": { 625 | "node": ">=8" 626 | } 627 | }, 628 | "node_modules/check-more-types": { 629 | "version": "2.24.0", 630 | "dev": true, 631 | "license": "MIT", 632 | "engines": { 633 | "node": ">= 0.8.0" 634 | } 635 | }, 636 | "node_modules/chokidar": { 637 | "version": "3.6.0", 638 | "dev": true, 639 | "license": "MIT", 640 | "dependencies": { 641 | "anymatch": "~3.1.2", 642 | "braces": "~3.0.2", 643 | "glob-parent": "~5.1.2", 644 | "is-binary-path": "~2.1.0", 645 | "is-glob": "~4.0.1", 646 | "normalize-path": "~3.0.0", 647 | "readdirp": "~3.6.0" 648 | }, 649 | "engines": { 650 | "node": ">= 8.10.0" 651 | }, 652 | "funding": { 653 | "url": "https://paulmillr.com/funding/" 654 | }, 655 | "optionalDependencies": { 656 | "fsevents": "~2.3.2" 657 | } 658 | }, 659 | "node_modules/chownr": { 660 | "version": "2.0.0", 661 | "dev": true, 662 | "license": "ISC", 663 | "engines": { 664 | "node": ">=10" 665 | } 666 | }, 667 | "node_modules/ci-info": { 668 | "version": "3.9.0", 669 | "dev": true, 670 | "funding": [ 671 | { 672 | "type": "github", 673 | "url": "https://github.com/sponsors/sibiraj-s" 674 | } 675 | ], 676 | "license": "MIT", 677 | "engines": { 678 | "node": ">=8" 679 | } 680 | }, 681 | "node_modules/citty": { 682 | "version": "0.1.6", 683 | "dev": true, 684 | "license": "MIT", 685 | "dependencies": { 686 | "consola": "^3.2.3" 687 | } 688 | }, 689 | "node_modules/clean-stack": { 690 | "version": "2.2.0", 691 | "dev": true, 692 | "license": "MIT", 693 | "engines": { 694 | "node": ">=6" 695 | } 696 | }, 697 | "node_modules/cli-cursor": { 698 | "version": "3.1.0", 699 | "dev": true, 700 | "license": "MIT", 701 | "dependencies": { 702 | "restore-cursor": "^3.1.0" 703 | }, 704 | "engines": { 705 | "node": ">=8" 706 | } 707 | }, 708 | "node_modules/cli-table3": { 709 | "version": "0.6.3", 710 | "dev": true, 711 | "license": "MIT", 712 | "dependencies": { 713 | "string-width": "^4.2.0" 714 | }, 715 | "engines": { 716 | "node": "10.* || >= 12.*" 717 | }, 718 | "optionalDependencies": { 719 | "@colors/colors": "1.5.0" 720 | } 721 | }, 722 | "node_modules/cli-truncate": { 723 | "version": "2.1.0", 724 | "dev": true, 725 | "license": "MIT", 726 | "dependencies": { 727 | "slice-ansi": "^3.0.0", 728 | "string-width": "^4.2.0" 729 | }, 730 | "engines": { 731 | "node": ">=8" 732 | }, 733 | "funding": { 734 | "url": "https://github.com/sponsors/sindresorhus" 735 | } 736 | }, 737 | "node_modules/color-convert": { 738 | "version": "2.0.1", 739 | "dev": true, 740 | "license": "MIT", 741 | "dependencies": { 742 | "color-name": "~1.1.4" 743 | }, 744 | "engines": { 745 | "node": ">=7.0.0" 746 | } 747 | }, 748 | "node_modules/color-name": { 749 | "version": "1.1.4", 750 | "dev": true, 751 | "license": "MIT" 752 | }, 753 | "node_modules/colorette": { 754 | "version": "2.0.20", 755 | "dev": true, 756 | "license": "MIT" 757 | }, 758 | "node_modules/combined-stream": { 759 | "version": "1.0.8", 760 | "dev": true, 761 | "license": "MIT", 762 | "dependencies": { 763 | "delayed-stream": "~1.0.0" 764 | }, 765 | "engines": { 766 | "node": ">= 0.8" 767 | } 768 | }, 769 | "node_modules/commander": { 770 | "version": "6.2.1", 771 | "dev": true, 772 | "license": "MIT", 773 | "engines": { 774 | "node": ">= 6" 775 | } 776 | }, 777 | "node_modules/common-tags": { 778 | "version": "1.8.2", 779 | "dev": true, 780 | "license": "MIT", 781 | "engines": { 782 | "node": ">=4.0.0" 783 | } 784 | }, 785 | "node_modules/confbox": { 786 | "version": "0.1.7", 787 | "dev": true, 788 | "license": "MIT" 789 | }, 790 | "node_modules/consola": { 791 | "version": "3.2.3", 792 | "dev": true, 793 | "license": "MIT", 794 | "engines": { 795 | "node": "^14.18.0 || >=16.10.0" 796 | } 797 | }, 798 | "node_modules/core-util-is": { 799 | "version": "1.0.2", 800 | "dev": true, 801 | "license": "MIT" 802 | }, 803 | "node_modules/cross-spawn": { 804 | "version": "7.0.3", 805 | "dev": true, 806 | "license": "MIT", 807 | "dependencies": { 808 | "path-key": "^3.1.0", 809 | "shebang-command": "^2.0.0", 810 | "which": "^2.0.1" 811 | }, 812 | "engines": { 813 | "node": ">= 8" 814 | } 815 | }, 816 | "node_modules/cypress": { 817 | "version": "13.13.2", 818 | "dev": true, 819 | "hasInstallScript": true, 820 | "license": "MIT", 821 | "dependencies": { 822 | "@cypress/request": "^3.0.1", 823 | "@cypress/xvfb": "^1.2.4", 824 | "@types/sinonjs__fake-timers": "8.1.1", 825 | "@types/sizzle": "^2.3.2", 826 | "arch": "^2.2.0", 827 | "blob-util": "^2.0.2", 828 | "bluebird": "^3.7.2", 829 | "buffer": "^5.7.1", 830 | "cachedir": "^2.3.0", 831 | "chalk": "^4.1.0", 832 | "check-more-types": "^2.24.0", 833 | "cli-cursor": "^3.1.0", 834 | "cli-table3": "~0.6.1", 835 | "commander": "^6.2.1", 836 | "common-tags": "^1.8.0", 837 | "dayjs": "^1.10.4", 838 | "debug": "^4.3.4", 839 | "enquirer": "^2.3.6", 840 | "eventemitter2": "6.4.7", 841 | "execa": "4.1.0", 842 | "executable": "^4.1.1", 843 | "extract-zip": "2.0.1", 844 | "figures": "^3.2.0", 845 | "fs-extra": "^9.1.0", 846 | "getos": "^3.2.1", 847 | "is-ci": "^3.0.1", 848 | "is-installed-globally": "~0.4.0", 849 | "lazy-ass": "^1.6.0", 850 | "listr2": "^3.8.3", 851 | "lodash": "^4.17.21", 852 | "log-symbols": "^4.0.0", 853 | "minimist": "^1.2.8", 854 | "ospath": "^1.2.2", 855 | "pretty-bytes": "^5.6.0", 856 | "process": "^0.11.10", 857 | "proxy-from-env": "1.0.0", 858 | "request-progress": "^3.0.0", 859 | "semver": "^7.5.3", 860 | "supports-color": "^8.1.1", 861 | "tmp": "~0.2.3", 862 | "untildify": "^4.0.0", 863 | "yauzl": "^2.10.0" 864 | }, 865 | "bin": { 866 | "cypress": "bin/cypress" 867 | }, 868 | "engines": { 869 | "node": "^16.0.0 || ^18.0.0 || >=20.0.0" 870 | } 871 | }, 872 | "node_modules/dashdash": { 873 | "version": "1.14.1", 874 | "dev": true, 875 | "license": "MIT", 876 | "dependencies": { 877 | "assert-plus": "^1.0.0" 878 | }, 879 | "engines": { 880 | "node": ">=0.10" 881 | } 882 | }, 883 | "node_modules/dayjs": { 884 | "version": "1.11.10", 885 | "dev": true, 886 | "license": "MIT" 887 | }, 888 | "node_modules/debug": { 889 | "version": "4.3.7", 890 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 891 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 892 | "dev": true, 893 | "license": "MIT", 894 | "dependencies": { 895 | "ms": "^2.1.3" 896 | }, 897 | "engines": { 898 | "node": ">=6.0" 899 | }, 900 | "peerDependenciesMeta": { 901 | "supports-color": { 902 | "optional": true 903 | } 904 | } 905 | }, 906 | "node_modules/define-data-property": { 907 | "version": "1.1.4", 908 | "dev": true, 909 | "license": "MIT", 910 | "dependencies": { 911 | "es-define-property": "^1.0.0", 912 | "es-errors": "^1.3.0", 913 | "gopd": "^1.0.1" 914 | }, 915 | "engines": { 916 | "node": ">= 0.4" 917 | }, 918 | "funding": { 919 | "url": "https://github.com/sponsors/ljharb" 920 | } 921 | }, 922 | "node_modules/defu": { 923 | "version": "6.1.4", 924 | "dev": true, 925 | "license": "MIT" 926 | }, 927 | "node_modules/delayed-stream": { 928 | "version": "1.0.0", 929 | "dev": true, 930 | "license": "MIT", 931 | "engines": { 932 | "node": ">=0.4.0" 933 | } 934 | }, 935 | "node_modules/destr": { 936 | "version": "2.0.3", 937 | "dev": true, 938 | "license": "MIT" 939 | }, 940 | "node_modules/dotenv": { 941 | "version": "16.4.5", 942 | "dev": true, 943 | "license": "BSD-2-Clause", 944 | "engines": { 945 | "node": ">=12" 946 | }, 947 | "funding": { 948 | "url": "https://dotenvx.com" 949 | } 950 | }, 951 | "node_modules/ecc-jsbn": { 952 | "version": "0.1.2", 953 | "dev": true, 954 | "license": "MIT", 955 | "dependencies": { 956 | "jsbn": "~0.1.0", 957 | "safer-buffer": "^2.1.0" 958 | } 959 | }, 960 | "node_modules/emoji-regex": { 961 | "version": "8.0.0", 962 | "dev": true, 963 | "license": "MIT" 964 | }, 965 | "node_modules/end-of-stream": { 966 | "version": "1.4.4", 967 | "dev": true, 968 | "license": "MIT", 969 | "dependencies": { 970 | "once": "^1.4.0" 971 | } 972 | }, 973 | "node_modules/enquirer": { 974 | "version": "2.4.1", 975 | "dev": true, 976 | "license": "MIT", 977 | "dependencies": { 978 | "ansi-colors": "^4.1.1", 979 | "strip-ansi": "^6.0.1" 980 | }, 981 | "engines": { 982 | "node": ">=8.6" 983 | } 984 | }, 985 | "node_modules/environment": { 986 | "version": "1.1.0", 987 | "dev": true, 988 | "license": "MIT", 989 | "engines": { 990 | "node": ">=18" 991 | }, 992 | "funding": { 993 | "url": "https://github.com/sponsors/sindresorhus" 994 | } 995 | }, 996 | "node_modules/es-define-property": { 997 | "version": "1.0.0", 998 | "dev": true, 999 | "license": "MIT", 1000 | "dependencies": { 1001 | "get-intrinsic": "^1.2.4" 1002 | }, 1003 | "engines": { 1004 | "node": ">= 0.4" 1005 | } 1006 | }, 1007 | "node_modules/es-errors": { 1008 | "version": "1.3.0", 1009 | "dev": true, 1010 | "license": "MIT", 1011 | "engines": { 1012 | "node": ">= 0.4" 1013 | } 1014 | }, 1015 | "node_modules/esbuild": { 1016 | "version": "0.23.0", 1017 | "dev": true, 1018 | "hasInstallScript": true, 1019 | "license": "MIT", 1020 | "bin": { 1021 | "esbuild": "bin/esbuild" 1022 | }, 1023 | "engines": { 1024 | "node": ">=18" 1025 | }, 1026 | "optionalDependencies": { 1027 | "@esbuild/aix-ppc64": "0.23.0", 1028 | "@esbuild/android-arm": "0.23.0", 1029 | "@esbuild/android-arm64": "0.23.0", 1030 | "@esbuild/android-x64": "0.23.0", 1031 | "@esbuild/darwin-arm64": "0.23.0", 1032 | "@esbuild/darwin-x64": "0.23.0", 1033 | "@esbuild/freebsd-arm64": "0.23.0", 1034 | "@esbuild/freebsd-x64": "0.23.0", 1035 | "@esbuild/linux-arm": "0.23.0", 1036 | "@esbuild/linux-arm64": "0.23.0", 1037 | "@esbuild/linux-ia32": "0.23.0", 1038 | "@esbuild/linux-loong64": "0.23.0", 1039 | "@esbuild/linux-mips64el": "0.23.0", 1040 | "@esbuild/linux-ppc64": "0.23.0", 1041 | "@esbuild/linux-riscv64": "0.23.0", 1042 | "@esbuild/linux-s390x": "0.23.0", 1043 | "@esbuild/linux-x64": "0.23.0", 1044 | "@esbuild/netbsd-x64": "0.23.0", 1045 | "@esbuild/openbsd-arm64": "0.23.0", 1046 | "@esbuild/openbsd-x64": "0.23.0", 1047 | "@esbuild/sunos-x64": "0.23.0", 1048 | "@esbuild/win32-arm64": "0.23.0", 1049 | "@esbuild/win32-ia32": "0.23.0", 1050 | "@esbuild/win32-x64": "0.23.0" 1051 | } 1052 | }, 1053 | "node_modules/escalade": { 1054 | "version": "3.1.2", 1055 | "dev": true, 1056 | "license": "MIT", 1057 | "engines": { 1058 | "node": ">=6" 1059 | } 1060 | }, 1061 | "node_modules/escape-string-regexp": { 1062 | "version": "1.0.5", 1063 | "dev": true, 1064 | "license": "MIT", 1065 | "engines": { 1066 | "node": ">=0.8.0" 1067 | } 1068 | }, 1069 | "node_modules/eventemitter2": { 1070 | "version": "6.4.7", 1071 | "dev": true, 1072 | "license": "MIT" 1073 | }, 1074 | "node_modules/eventemitter3": { 1075 | "version": "5.0.1", 1076 | "dev": true, 1077 | "license": "MIT" 1078 | }, 1079 | "node_modules/execa": { 1080 | "version": "4.1.0", 1081 | "dev": true, 1082 | "license": "MIT", 1083 | "dependencies": { 1084 | "cross-spawn": "^7.0.0", 1085 | "get-stream": "^5.0.0", 1086 | "human-signals": "^1.1.1", 1087 | "is-stream": "^2.0.0", 1088 | "merge-stream": "^2.0.0", 1089 | "npm-run-path": "^4.0.0", 1090 | "onetime": "^5.1.0", 1091 | "signal-exit": "^3.0.2", 1092 | "strip-final-newline": "^2.0.0" 1093 | }, 1094 | "engines": { 1095 | "node": ">=10" 1096 | }, 1097 | "funding": { 1098 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1099 | } 1100 | }, 1101 | "node_modules/executable": { 1102 | "version": "4.1.1", 1103 | "dev": true, 1104 | "license": "MIT", 1105 | "dependencies": { 1106 | "pify": "^2.2.0" 1107 | }, 1108 | "engines": { 1109 | "node": ">=4" 1110 | } 1111 | }, 1112 | "node_modules/extend": { 1113 | "version": "3.0.2", 1114 | "dev": true, 1115 | "license": "MIT" 1116 | }, 1117 | "node_modules/extract-zip": { 1118 | "version": "2.0.1", 1119 | "dev": true, 1120 | "license": "BSD-2-Clause", 1121 | "dependencies": { 1122 | "debug": "^4.1.1", 1123 | "get-stream": "^5.1.0", 1124 | "yauzl": "^2.10.0" 1125 | }, 1126 | "bin": { 1127 | "extract-zip": "cli.js" 1128 | }, 1129 | "engines": { 1130 | "node": ">= 10.17.0" 1131 | }, 1132 | "optionalDependencies": { 1133 | "@types/yauzl": "^2.9.1" 1134 | } 1135 | }, 1136 | "node_modules/extsprintf": { 1137 | "version": "1.3.0", 1138 | "dev": true, 1139 | "engines": [ 1140 | "node >=0.6.0" 1141 | ], 1142 | "license": "MIT" 1143 | }, 1144 | "node_modules/fast-glob": { 1145 | "version": "3.3.2", 1146 | "dev": true, 1147 | "license": "MIT", 1148 | "dependencies": { 1149 | "@nodelib/fs.stat": "^2.0.2", 1150 | "@nodelib/fs.walk": "^1.2.3", 1151 | "glob-parent": "^5.1.2", 1152 | "merge2": "^1.3.0", 1153 | "micromatch": "^4.0.4" 1154 | }, 1155 | "engines": { 1156 | "node": ">=8.6.0" 1157 | } 1158 | }, 1159 | "node_modules/fastq": { 1160 | "version": "1.17.1", 1161 | "dev": true, 1162 | "license": "ISC", 1163 | "dependencies": { 1164 | "reusify": "^1.0.4" 1165 | } 1166 | }, 1167 | "node_modules/fd-slicer": { 1168 | "version": "1.1.0", 1169 | "dev": true, 1170 | "license": "MIT", 1171 | "dependencies": { 1172 | "pend": "~1.2.0" 1173 | } 1174 | }, 1175 | "node_modules/figures": { 1176 | "version": "3.2.0", 1177 | "dev": true, 1178 | "license": "MIT", 1179 | "dependencies": { 1180 | "escape-string-regexp": "^1.0.5" 1181 | }, 1182 | "engines": { 1183 | "node": ">=8" 1184 | }, 1185 | "funding": { 1186 | "url": "https://github.com/sponsors/sindresorhus" 1187 | } 1188 | }, 1189 | "node_modules/fill-range": { 1190 | "version": "7.1.1", 1191 | "dev": true, 1192 | "license": "MIT", 1193 | "dependencies": { 1194 | "to-regex-range": "^5.0.1" 1195 | }, 1196 | "engines": { 1197 | "node": ">=8" 1198 | } 1199 | }, 1200 | "node_modules/follow-redirects": { 1201 | "version": "1.15.6", 1202 | "dev": true, 1203 | "funding": [ 1204 | { 1205 | "type": "individual", 1206 | "url": "https://github.com/sponsors/RubenVerborgh" 1207 | } 1208 | ], 1209 | "license": "MIT", 1210 | "engines": { 1211 | "node": ">=4.0" 1212 | }, 1213 | "peerDependenciesMeta": { 1214 | "debug": { 1215 | "optional": true 1216 | } 1217 | } 1218 | }, 1219 | "node_modules/forever-agent": { 1220 | "version": "0.6.1", 1221 | "dev": true, 1222 | "license": "Apache-2.0", 1223 | "engines": { 1224 | "node": "*" 1225 | } 1226 | }, 1227 | "node_modules/form-data": { 1228 | "version": "2.3.3", 1229 | "dev": true, 1230 | "license": "MIT", 1231 | "dependencies": { 1232 | "asynckit": "^0.4.0", 1233 | "combined-stream": "^1.0.6", 1234 | "mime-types": "^2.1.12" 1235 | }, 1236 | "engines": { 1237 | "node": ">= 0.12" 1238 | } 1239 | }, 1240 | "node_modules/fs-extra": { 1241 | "version": "9.1.0", 1242 | "dev": true, 1243 | "license": "MIT", 1244 | "dependencies": { 1245 | "at-least-node": "^1.0.0", 1246 | "graceful-fs": "^4.2.0", 1247 | "jsonfile": "^6.0.1", 1248 | "universalify": "^2.0.0" 1249 | }, 1250 | "engines": { 1251 | "node": ">=10" 1252 | } 1253 | }, 1254 | "node_modules/fs-minipass": { 1255 | "version": "2.1.0", 1256 | "dev": true, 1257 | "license": "ISC", 1258 | "dependencies": { 1259 | "minipass": "^3.0.0" 1260 | }, 1261 | "engines": { 1262 | "node": ">= 8" 1263 | } 1264 | }, 1265 | "node_modules/fs-minipass/node_modules/minipass": { 1266 | "version": "3.3.6", 1267 | "dev": true, 1268 | "license": "ISC", 1269 | "dependencies": { 1270 | "yallist": "^4.0.0" 1271 | }, 1272 | "engines": { 1273 | "node": ">=8" 1274 | } 1275 | }, 1276 | "node_modules/fs.realpath": { 1277 | "version": "1.0.0", 1278 | "dev": true, 1279 | "license": "ISC" 1280 | }, 1281 | "node_modules/function-bind": { 1282 | "version": "1.1.2", 1283 | "dev": true, 1284 | "license": "MIT", 1285 | "funding": { 1286 | "url": "https://github.com/sponsors/ljharb" 1287 | } 1288 | }, 1289 | "node_modules/get-east-asian-width": { 1290 | "version": "1.2.0", 1291 | "dev": true, 1292 | "license": "MIT", 1293 | "engines": { 1294 | "node": ">=18" 1295 | }, 1296 | "funding": { 1297 | "url": "https://github.com/sponsors/sindresorhus" 1298 | } 1299 | }, 1300 | "node_modules/get-intrinsic": { 1301 | "version": "1.2.4", 1302 | "dev": true, 1303 | "license": "MIT", 1304 | "dependencies": { 1305 | "es-errors": "^1.3.0", 1306 | "function-bind": "^1.1.2", 1307 | "has-proto": "^1.0.1", 1308 | "has-symbols": "^1.0.3", 1309 | "hasown": "^2.0.0" 1310 | }, 1311 | "engines": { 1312 | "node": ">= 0.4" 1313 | }, 1314 | "funding": { 1315 | "url": "https://github.com/sponsors/ljharb" 1316 | } 1317 | }, 1318 | "node_modules/get-stream": { 1319 | "version": "5.2.0", 1320 | "dev": true, 1321 | "license": "MIT", 1322 | "dependencies": { 1323 | "pump": "^3.0.0" 1324 | }, 1325 | "engines": { 1326 | "node": ">=8" 1327 | }, 1328 | "funding": { 1329 | "url": "https://github.com/sponsors/sindresorhus" 1330 | } 1331 | }, 1332 | "node_modules/getos": { 1333 | "version": "3.2.1", 1334 | "dev": true, 1335 | "license": "MIT", 1336 | "dependencies": { 1337 | "async": "^3.2.0" 1338 | } 1339 | }, 1340 | "node_modules/getpass": { 1341 | "version": "0.1.7", 1342 | "dev": true, 1343 | "license": "MIT", 1344 | "dependencies": { 1345 | "assert-plus": "^1.0.0" 1346 | } 1347 | }, 1348 | "node_modules/giget": { 1349 | "version": "1.2.3", 1350 | "dev": true, 1351 | "license": "MIT", 1352 | "dependencies": { 1353 | "citty": "^0.1.6", 1354 | "consola": "^3.2.3", 1355 | "defu": "^6.1.4", 1356 | "node-fetch-native": "^1.6.3", 1357 | "nypm": "^0.3.8", 1358 | "ohash": "^1.1.3", 1359 | "pathe": "^1.1.2", 1360 | "tar": "^6.2.0" 1361 | }, 1362 | "bin": { 1363 | "giget": "dist/cli.mjs" 1364 | } 1365 | }, 1366 | "node_modules/glob": { 1367 | "version": "8.1.0", 1368 | "dev": true, 1369 | "license": "ISC", 1370 | "dependencies": { 1371 | "fs.realpath": "^1.0.0", 1372 | "inflight": "^1.0.4", 1373 | "inherits": "2", 1374 | "minimatch": "^5.0.1", 1375 | "once": "^1.3.0" 1376 | }, 1377 | "engines": { 1378 | "node": ">=12" 1379 | }, 1380 | "funding": { 1381 | "url": "https://github.com/sponsors/isaacs" 1382 | } 1383 | }, 1384 | "node_modules/glob-parent": { 1385 | "version": "5.1.2", 1386 | "dev": true, 1387 | "license": "ISC", 1388 | "dependencies": { 1389 | "is-glob": "^4.0.1" 1390 | }, 1391 | "engines": { 1392 | "node": ">= 6" 1393 | } 1394 | }, 1395 | "node_modules/global-dirs": { 1396 | "version": "3.0.1", 1397 | "dev": true, 1398 | "license": "MIT", 1399 | "dependencies": { 1400 | "ini": "2.0.0" 1401 | }, 1402 | "engines": { 1403 | "node": ">=10" 1404 | }, 1405 | "funding": { 1406 | "url": "https://github.com/sponsors/sindresorhus" 1407 | } 1408 | }, 1409 | "node_modules/gopd": { 1410 | "version": "1.0.1", 1411 | "dev": true, 1412 | "license": "MIT", 1413 | "dependencies": { 1414 | "get-intrinsic": "^1.1.3" 1415 | }, 1416 | "funding": { 1417 | "url": "https://github.com/sponsors/ljharb" 1418 | } 1419 | }, 1420 | "node_modules/graceful-fs": { 1421 | "version": "4.2.11", 1422 | "dev": true, 1423 | "license": "ISC" 1424 | }, 1425 | "node_modules/has-flag": { 1426 | "version": "4.0.0", 1427 | "dev": true, 1428 | "license": "MIT", 1429 | "engines": { 1430 | "node": ">=8" 1431 | } 1432 | }, 1433 | "node_modules/has-property-descriptors": { 1434 | "version": "1.0.2", 1435 | "dev": true, 1436 | "license": "MIT", 1437 | "dependencies": { 1438 | "es-define-property": "^1.0.0" 1439 | }, 1440 | "funding": { 1441 | "url": "https://github.com/sponsors/ljharb" 1442 | } 1443 | }, 1444 | "node_modules/has-proto": { 1445 | "version": "1.0.3", 1446 | "dev": true, 1447 | "license": "MIT", 1448 | "engines": { 1449 | "node": ">= 0.4" 1450 | }, 1451 | "funding": { 1452 | "url": "https://github.com/sponsors/ljharb" 1453 | } 1454 | }, 1455 | "node_modules/has-symbols": { 1456 | "version": "1.0.3", 1457 | "dev": true, 1458 | "license": "MIT", 1459 | "engines": { 1460 | "node": ">= 0.4" 1461 | }, 1462 | "funding": { 1463 | "url": "https://github.com/sponsors/ljharb" 1464 | } 1465 | }, 1466 | "node_modules/hasown": { 1467 | "version": "2.0.2", 1468 | "dev": true, 1469 | "license": "MIT", 1470 | "dependencies": { 1471 | "function-bind": "^1.1.2" 1472 | }, 1473 | "engines": { 1474 | "node": ">= 0.4" 1475 | } 1476 | }, 1477 | "node_modules/http-signature": { 1478 | "version": "1.3.6", 1479 | "dev": true, 1480 | "license": "MIT", 1481 | "dependencies": { 1482 | "assert-plus": "^1.0.0", 1483 | "jsprim": "^2.0.2", 1484 | "sshpk": "^1.14.1" 1485 | }, 1486 | "engines": { 1487 | "node": ">=0.10" 1488 | } 1489 | }, 1490 | "node_modules/human-signals": { 1491 | "version": "1.1.1", 1492 | "dev": true, 1493 | "license": "Apache-2.0", 1494 | "engines": { 1495 | "node": ">=8.12.0" 1496 | } 1497 | }, 1498 | "node_modules/husky": { 1499 | "version": "9.1.4", 1500 | "dev": true, 1501 | "license": "MIT", 1502 | "bin": { 1503 | "husky": "bin.js" 1504 | }, 1505 | "engines": { 1506 | "node": ">=18" 1507 | }, 1508 | "funding": { 1509 | "url": "https://github.com/sponsors/typicode" 1510 | } 1511 | }, 1512 | "node_modules/ieee754": { 1513 | "version": "1.2.1", 1514 | "dev": true, 1515 | "funding": [ 1516 | { 1517 | "type": "github", 1518 | "url": "https://github.com/sponsors/feross" 1519 | }, 1520 | { 1521 | "type": "patreon", 1522 | "url": "https://www.patreon.com/feross" 1523 | }, 1524 | { 1525 | "type": "consulting", 1526 | "url": "https://feross.org/support" 1527 | } 1528 | ], 1529 | "license": "BSD-3-Clause" 1530 | }, 1531 | "node_modules/ignore-walk": { 1532 | "version": "5.0.1", 1533 | "dev": true, 1534 | "license": "ISC", 1535 | "dependencies": { 1536 | "minimatch": "^5.0.1" 1537 | }, 1538 | "engines": { 1539 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1540 | } 1541 | }, 1542 | "node_modules/indent-string": { 1543 | "version": "4.0.0", 1544 | "dev": true, 1545 | "license": "MIT", 1546 | "engines": { 1547 | "node": ">=8" 1548 | } 1549 | }, 1550 | "node_modules/inflight": { 1551 | "version": "1.0.6", 1552 | "dev": true, 1553 | "license": "ISC", 1554 | "dependencies": { 1555 | "once": "^1.3.0", 1556 | "wrappy": "1" 1557 | } 1558 | }, 1559 | "node_modules/inherits": { 1560 | "version": "2.0.4", 1561 | "dev": true, 1562 | "license": "ISC" 1563 | }, 1564 | "node_modules/ini": { 1565 | "version": "2.0.0", 1566 | "dev": true, 1567 | "license": "ISC", 1568 | "engines": { 1569 | "node": ">=10" 1570 | } 1571 | }, 1572 | "node_modules/is-binary-path": { 1573 | "version": "2.1.0", 1574 | "dev": true, 1575 | "license": "MIT", 1576 | "dependencies": { 1577 | "binary-extensions": "^2.0.0" 1578 | }, 1579 | "engines": { 1580 | "node": ">=8" 1581 | } 1582 | }, 1583 | "node_modules/is-ci": { 1584 | "version": "3.0.1", 1585 | "dev": true, 1586 | "license": "MIT", 1587 | "dependencies": { 1588 | "ci-info": "^3.2.0" 1589 | }, 1590 | "bin": { 1591 | "is-ci": "bin.js" 1592 | } 1593 | }, 1594 | "node_modules/is-extglob": { 1595 | "version": "2.1.1", 1596 | "dev": true, 1597 | "license": "MIT", 1598 | "engines": { 1599 | "node": ">=0.10.0" 1600 | } 1601 | }, 1602 | "node_modules/is-fullwidth-code-point": { 1603 | "version": "3.0.0", 1604 | "dev": true, 1605 | "license": "MIT", 1606 | "engines": { 1607 | "node": ">=8" 1608 | } 1609 | }, 1610 | "node_modules/is-glob": { 1611 | "version": "4.0.3", 1612 | "dev": true, 1613 | "license": "MIT", 1614 | "dependencies": { 1615 | "is-extglob": "^2.1.1" 1616 | }, 1617 | "engines": { 1618 | "node": ">=0.10.0" 1619 | } 1620 | }, 1621 | "node_modules/is-installed-globally": { 1622 | "version": "0.4.0", 1623 | "dev": true, 1624 | "license": "MIT", 1625 | "dependencies": { 1626 | "global-dirs": "^3.0.0", 1627 | "is-path-inside": "^3.0.2" 1628 | }, 1629 | "engines": { 1630 | "node": ">=10" 1631 | }, 1632 | "funding": { 1633 | "url": "https://github.com/sponsors/sindresorhus" 1634 | } 1635 | }, 1636 | "node_modules/is-number": { 1637 | "version": "7.0.0", 1638 | "dev": true, 1639 | "license": "MIT", 1640 | "engines": { 1641 | "node": ">=0.12.0" 1642 | } 1643 | }, 1644 | "node_modules/is-path-inside": { 1645 | "version": "3.0.3", 1646 | "dev": true, 1647 | "license": "MIT", 1648 | "engines": { 1649 | "node": ">=8" 1650 | } 1651 | }, 1652 | "node_modules/is-stream": { 1653 | "version": "2.0.1", 1654 | "dev": true, 1655 | "license": "MIT", 1656 | "engines": { 1657 | "node": ">=8" 1658 | }, 1659 | "funding": { 1660 | "url": "https://github.com/sponsors/sindresorhus" 1661 | } 1662 | }, 1663 | "node_modules/is-typedarray": { 1664 | "version": "1.0.0", 1665 | "dev": true, 1666 | "license": "MIT" 1667 | }, 1668 | "node_modules/is-unicode-supported": { 1669 | "version": "0.1.0", 1670 | "dev": true, 1671 | "license": "MIT", 1672 | "engines": { 1673 | "node": ">=10" 1674 | }, 1675 | "funding": { 1676 | "url": "https://github.com/sponsors/sindresorhus" 1677 | } 1678 | }, 1679 | "node_modules/isexe": { 1680 | "version": "2.0.0", 1681 | "dev": true, 1682 | "license": "ISC" 1683 | }, 1684 | "node_modules/isstream": { 1685 | "version": "0.1.2", 1686 | "dev": true, 1687 | "license": "MIT" 1688 | }, 1689 | "node_modules/jiti": { 1690 | "version": "1.21.6", 1691 | "dev": true, 1692 | "license": "MIT", 1693 | "bin": { 1694 | "jiti": "bin/jiti.js" 1695 | } 1696 | }, 1697 | "node_modules/joi": { 1698 | "version": "17.12.2", 1699 | "dev": true, 1700 | "license": "BSD-3-Clause", 1701 | "dependencies": { 1702 | "@hapi/hoek": "^9.3.0", 1703 | "@hapi/topo": "^5.1.0", 1704 | "@sideway/address": "^4.1.5", 1705 | "@sideway/formula": "^3.0.1", 1706 | "@sideway/pinpoint": "^2.0.0" 1707 | } 1708 | }, 1709 | "node_modules/js-yaml": { 1710 | "version": "4.1.0", 1711 | "dev": true, 1712 | "license": "MIT", 1713 | "dependencies": { 1714 | "argparse": "^2.0.1" 1715 | }, 1716 | "bin": { 1717 | "js-yaml": "bin/js-yaml.js" 1718 | } 1719 | }, 1720 | "node_modules/jsbn": { 1721 | "version": "0.1.1", 1722 | "dev": true, 1723 | "license": "MIT" 1724 | }, 1725 | "node_modules/json-schema": { 1726 | "version": "0.4.0", 1727 | "dev": true, 1728 | "license": "(AFL-2.1 OR BSD-3-Clause)" 1729 | }, 1730 | "node_modules/json-stringify-safe": { 1731 | "version": "5.0.1", 1732 | "dev": true, 1733 | "license": "ISC" 1734 | }, 1735 | "node_modules/jsonc-parser": { 1736 | "version": "3.3.1", 1737 | "dev": true, 1738 | "license": "MIT" 1739 | }, 1740 | "node_modules/jsonfile": { 1741 | "version": "6.1.0", 1742 | "dev": true, 1743 | "license": "MIT", 1744 | "dependencies": { 1745 | "universalify": "^2.0.0" 1746 | }, 1747 | "optionalDependencies": { 1748 | "graceful-fs": "^4.1.6" 1749 | } 1750 | }, 1751 | "node_modules/jsprim": { 1752 | "version": "2.0.2", 1753 | "dev": true, 1754 | "engines": [ 1755 | "node >=0.6.0" 1756 | ], 1757 | "license": "MIT", 1758 | "dependencies": { 1759 | "assert-plus": "1.0.0", 1760 | "extsprintf": "1.3.0", 1761 | "json-schema": "0.4.0", 1762 | "verror": "1.10.0" 1763 | } 1764 | }, 1765 | "node_modules/kleur": { 1766 | "version": "3.0.3", 1767 | "dev": true, 1768 | "license": "MIT", 1769 | "engines": { 1770 | "node": ">=6" 1771 | } 1772 | }, 1773 | "node_modules/lazy-ass": { 1774 | "version": "1.6.0", 1775 | "dev": true, 1776 | "license": "MIT", 1777 | "engines": { 1778 | "node": "> 0.8" 1779 | } 1780 | }, 1781 | "node_modules/lilconfig": { 1782 | "version": "3.1.2", 1783 | "dev": true, 1784 | "license": "MIT", 1785 | "engines": { 1786 | "node": ">=14" 1787 | }, 1788 | "funding": { 1789 | "url": "https://github.com/sponsors/antonk52" 1790 | } 1791 | }, 1792 | "node_modules/lint-staged": { 1793 | "version": "15.2.9", 1794 | "dev": true, 1795 | "license": "MIT", 1796 | "dependencies": { 1797 | "chalk": "~5.3.0", 1798 | "commander": "~12.1.0", 1799 | "debug": "~4.3.6", 1800 | "execa": "~8.0.1", 1801 | "lilconfig": "~3.1.2", 1802 | "listr2": "~8.2.4", 1803 | "micromatch": "~4.0.7", 1804 | "pidtree": "~0.6.0", 1805 | "string-argv": "~0.3.2", 1806 | "yaml": "~2.5.0" 1807 | }, 1808 | "bin": { 1809 | "lint-staged": "bin/lint-staged.js" 1810 | }, 1811 | "engines": { 1812 | "node": ">=18.12.0" 1813 | }, 1814 | "funding": { 1815 | "url": "https://opencollective.com/lint-staged" 1816 | } 1817 | }, 1818 | "node_modules/lint-staged/node_modules/ansi-escapes": { 1819 | "version": "7.0.0", 1820 | "dev": true, 1821 | "license": "MIT", 1822 | "dependencies": { 1823 | "environment": "^1.0.0" 1824 | }, 1825 | "engines": { 1826 | "node": ">=18" 1827 | }, 1828 | "funding": { 1829 | "url": "https://github.com/sponsors/sindresorhus" 1830 | } 1831 | }, 1832 | "node_modules/lint-staged/node_modules/ansi-regex": { 1833 | "version": "6.1.0", 1834 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 1835 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 1836 | "dev": true, 1837 | "license": "MIT", 1838 | "engines": { 1839 | "node": ">=12" 1840 | }, 1841 | "funding": { 1842 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1843 | } 1844 | }, 1845 | "node_modules/lint-staged/node_modules/ansi-styles": { 1846 | "version": "6.2.1", 1847 | "dev": true, 1848 | "license": "MIT", 1849 | "engines": { 1850 | "node": ">=12" 1851 | }, 1852 | "funding": { 1853 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1854 | } 1855 | }, 1856 | "node_modules/lint-staged/node_modules/chalk": { 1857 | "version": "5.3.0", 1858 | "dev": true, 1859 | "license": "MIT", 1860 | "engines": { 1861 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 1862 | }, 1863 | "funding": { 1864 | "url": "https://github.com/chalk/chalk?sponsor=1" 1865 | } 1866 | }, 1867 | "node_modules/lint-staged/node_modules/cli-cursor": { 1868 | "version": "5.0.0", 1869 | "dev": true, 1870 | "license": "MIT", 1871 | "dependencies": { 1872 | "restore-cursor": "^5.0.0" 1873 | }, 1874 | "engines": { 1875 | "node": ">=18" 1876 | }, 1877 | "funding": { 1878 | "url": "https://github.com/sponsors/sindresorhus" 1879 | } 1880 | }, 1881 | "node_modules/lint-staged/node_modules/cli-truncate": { 1882 | "version": "4.0.0", 1883 | "dev": true, 1884 | "license": "MIT", 1885 | "dependencies": { 1886 | "slice-ansi": "^5.0.0", 1887 | "string-width": "^7.0.0" 1888 | }, 1889 | "engines": { 1890 | "node": ">=18" 1891 | }, 1892 | "funding": { 1893 | "url": "https://github.com/sponsors/sindresorhus" 1894 | } 1895 | }, 1896 | "node_modules/lint-staged/node_modules/commander": { 1897 | "version": "12.1.0", 1898 | "dev": true, 1899 | "license": "MIT", 1900 | "engines": { 1901 | "node": ">=18" 1902 | } 1903 | }, 1904 | "node_modules/lint-staged/node_modules/emoji-regex": { 1905 | "version": "10.4.0", 1906 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", 1907 | "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", 1908 | "dev": true, 1909 | "license": "MIT" 1910 | }, 1911 | "node_modules/lint-staged/node_modules/execa": { 1912 | "version": "8.0.1", 1913 | "dev": true, 1914 | "license": "MIT", 1915 | "dependencies": { 1916 | "cross-spawn": "^7.0.3", 1917 | "get-stream": "^8.0.1", 1918 | "human-signals": "^5.0.0", 1919 | "is-stream": "^3.0.0", 1920 | "merge-stream": "^2.0.0", 1921 | "npm-run-path": "^5.1.0", 1922 | "onetime": "^6.0.0", 1923 | "signal-exit": "^4.1.0", 1924 | "strip-final-newline": "^3.0.0" 1925 | }, 1926 | "engines": { 1927 | "node": ">=16.17" 1928 | }, 1929 | "funding": { 1930 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1931 | } 1932 | }, 1933 | "node_modules/lint-staged/node_modules/get-stream": { 1934 | "version": "8.0.1", 1935 | "dev": true, 1936 | "license": "MIT", 1937 | "engines": { 1938 | "node": ">=16" 1939 | }, 1940 | "funding": { 1941 | "url": "https://github.com/sponsors/sindresorhus" 1942 | } 1943 | }, 1944 | "node_modules/lint-staged/node_modules/human-signals": { 1945 | "version": "5.0.0", 1946 | "dev": true, 1947 | "license": "Apache-2.0", 1948 | "engines": { 1949 | "node": ">=16.17.0" 1950 | } 1951 | }, 1952 | "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { 1953 | "version": "4.0.0", 1954 | "dev": true, 1955 | "license": "MIT", 1956 | "engines": { 1957 | "node": ">=12" 1958 | }, 1959 | "funding": { 1960 | "url": "https://github.com/sponsors/sindresorhus" 1961 | } 1962 | }, 1963 | "node_modules/lint-staged/node_modules/is-stream": { 1964 | "version": "3.0.0", 1965 | "dev": true, 1966 | "license": "MIT", 1967 | "engines": { 1968 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1969 | }, 1970 | "funding": { 1971 | "url": "https://github.com/sponsors/sindresorhus" 1972 | } 1973 | }, 1974 | "node_modules/lint-staged/node_modules/listr2": { 1975 | "version": "8.2.5", 1976 | "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", 1977 | "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", 1978 | "dev": true, 1979 | "license": "MIT", 1980 | "dependencies": { 1981 | "cli-truncate": "^4.0.0", 1982 | "colorette": "^2.0.20", 1983 | "eventemitter3": "^5.0.1", 1984 | "log-update": "^6.1.0", 1985 | "rfdc": "^1.4.1", 1986 | "wrap-ansi": "^9.0.0" 1987 | }, 1988 | "engines": { 1989 | "node": ">=18.0.0" 1990 | } 1991 | }, 1992 | "node_modules/lint-staged/node_modules/log-update": { 1993 | "version": "6.1.0", 1994 | "dev": true, 1995 | "license": "MIT", 1996 | "dependencies": { 1997 | "ansi-escapes": "^7.0.0", 1998 | "cli-cursor": "^5.0.0", 1999 | "slice-ansi": "^7.1.0", 2000 | "strip-ansi": "^7.1.0", 2001 | "wrap-ansi": "^9.0.0" 2002 | }, 2003 | "engines": { 2004 | "node": ">=18" 2005 | }, 2006 | "funding": { 2007 | "url": "https://github.com/sponsors/sindresorhus" 2008 | } 2009 | }, 2010 | "node_modules/lint-staged/node_modules/log-update/node_modules/is-fullwidth-code-point": { 2011 | "version": "5.0.0", 2012 | "dev": true, 2013 | "license": "MIT", 2014 | "dependencies": { 2015 | "get-east-asian-width": "^1.0.0" 2016 | }, 2017 | "engines": { 2018 | "node": ">=18" 2019 | }, 2020 | "funding": { 2021 | "url": "https://github.com/sponsors/sindresorhus" 2022 | } 2023 | }, 2024 | "node_modules/lint-staged/node_modules/log-update/node_modules/slice-ansi": { 2025 | "version": "7.1.0", 2026 | "dev": true, 2027 | "license": "MIT", 2028 | "dependencies": { 2029 | "ansi-styles": "^6.2.1", 2030 | "is-fullwidth-code-point": "^5.0.0" 2031 | }, 2032 | "engines": { 2033 | "node": ">=18" 2034 | }, 2035 | "funding": { 2036 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2037 | } 2038 | }, 2039 | "node_modules/lint-staged/node_modules/mimic-fn": { 2040 | "version": "4.0.0", 2041 | "dev": true, 2042 | "license": "MIT", 2043 | "engines": { 2044 | "node": ">=12" 2045 | }, 2046 | "funding": { 2047 | "url": "https://github.com/sponsors/sindresorhus" 2048 | } 2049 | }, 2050 | "node_modules/lint-staged/node_modules/npm-run-path": { 2051 | "version": "5.3.0", 2052 | "dev": true, 2053 | "license": "MIT", 2054 | "dependencies": { 2055 | "path-key": "^4.0.0" 2056 | }, 2057 | "engines": { 2058 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2059 | }, 2060 | "funding": { 2061 | "url": "https://github.com/sponsors/sindresorhus" 2062 | } 2063 | }, 2064 | "node_modules/lint-staged/node_modules/onetime": { 2065 | "version": "6.0.0", 2066 | "dev": true, 2067 | "license": "MIT", 2068 | "dependencies": { 2069 | "mimic-fn": "^4.0.0" 2070 | }, 2071 | "engines": { 2072 | "node": ">=12" 2073 | }, 2074 | "funding": { 2075 | "url": "https://github.com/sponsors/sindresorhus" 2076 | } 2077 | }, 2078 | "node_modules/lint-staged/node_modules/path-key": { 2079 | "version": "4.0.0", 2080 | "dev": true, 2081 | "license": "MIT", 2082 | "engines": { 2083 | "node": ">=12" 2084 | }, 2085 | "funding": { 2086 | "url": "https://github.com/sponsors/sindresorhus" 2087 | } 2088 | }, 2089 | "node_modules/lint-staged/node_modules/restore-cursor": { 2090 | "version": "5.1.0", 2091 | "dev": true, 2092 | "license": "MIT", 2093 | "dependencies": { 2094 | "onetime": "^7.0.0", 2095 | "signal-exit": "^4.1.0" 2096 | }, 2097 | "engines": { 2098 | "node": ">=18" 2099 | }, 2100 | "funding": { 2101 | "url": "https://github.com/sponsors/sindresorhus" 2102 | } 2103 | }, 2104 | "node_modules/lint-staged/node_modules/restore-cursor/node_modules/onetime": { 2105 | "version": "7.0.0", 2106 | "dev": true, 2107 | "license": "MIT", 2108 | "dependencies": { 2109 | "mimic-function": "^5.0.0" 2110 | }, 2111 | "engines": { 2112 | "node": ">=18" 2113 | }, 2114 | "funding": { 2115 | "url": "https://github.com/sponsors/sindresorhus" 2116 | } 2117 | }, 2118 | "node_modules/lint-staged/node_modules/signal-exit": { 2119 | "version": "4.1.0", 2120 | "dev": true, 2121 | "license": "ISC", 2122 | "engines": { 2123 | "node": ">=14" 2124 | }, 2125 | "funding": { 2126 | "url": "https://github.com/sponsors/isaacs" 2127 | } 2128 | }, 2129 | "node_modules/lint-staged/node_modules/slice-ansi": { 2130 | "version": "5.0.0", 2131 | "dev": true, 2132 | "license": "MIT", 2133 | "dependencies": { 2134 | "ansi-styles": "^6.0.0", 2135 | "is-fullwidth-code-point": "^4.0.0" 2136 | }, 2137 | "engines": { 2138 | "node": ">=12" 2139 | }, 2140 | "funding": { 2141 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2142 | } 2143 | }, 2144 | "node_modules/lint-staged/node_modules/string-width": { 2145 | "version": "7.2.0", 2146 | "dev": true, 2147 | "license": "MIT", 2148 | "dependencies": { 2149 | "emoji-regex": "^10.3.0", 2150 | "get-east-asian-width": "^1.0.0", 2151 | "strip-ansi": "^7.1.0" 2152 | }, 2153 | "engines": { 2154 | "node": ">=18" 2155 | }, 2156 | "funding": { 2157 | "url": "https://github.com/sponsors/sindresorhus" 2158 | } 2159 | }, 2160 | "node_modules/lint-staged/node_modules/strip-ansi": { 2161 | "version": "7.1.0", 2162 | "dev": true, 2163 | "license": "MIT", 2164 | "dependencies": { 2165 | "ansi-regex": "^6.0.1" 2166 | }, 2167 | "engines": { 2168 | "node": ">=12" 2169 | }, 2170 | "funding": { 2171 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2172 | } 2173 | }, 2174 | "node_modules/lint-staged/node_modules/strip-final-newline": { 2175 | "version": "3.0.0", 2176 | "dev": true, 2177 | "license": "MIT", 2178 | "engines": { 2179 | "node": ">=12" 2180 | }, 2181 | "funding": { 2182 | "url": "https://github.com/sponsors/sindresorhus" 2183 | } 2184 | }, 2185 | "node_modules/lint-staged/node_modules/wrap-ansi": { 2186 | "version": "9.0.0", 2187 | "dev": true, 2188 | "license": "MIT", 2189 | "dependencies": { 2190 | "ansi-styles": "^6.2.1", 2191 | "string-width": "^7.0.0", 2192 | "strip-ansi": "^7.1.0" 2193 | }, 2194 | "engines": { 2195 | "node": ">=18" 2196 | }, 2197 | "funding": { 2198 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2199 | } 2200 | }, 2201 | "node_modules/listr2": { 2202 | "version": "3.14.0", 2203 | "dev": true, 2204 | "license": "MIT", 2205 | "dependencies": { 2206 | "cli-truncate": "^2.1.0", 2207 | "colorette": "^2.0.16", 2208 | "log-update": "^4.0.0", 2209 | "p-map": "^4.0.0", 2210 | "rfdc": "^1.3.0", 2211 | "rxjs": "^7.5.1", 2212 | "through": "^2.3.8", 2213 | "wrap-ansi": "^7.0.0" 2214 | }, 2215 | "engines": { 2216 | "node": ">=10.0.0" 2217 | }, 2218 | "peerDependencies": { 2219 | "enquirer": ">= 2.3.0 < 3" 2220 | }, 2221 | "peerDependenciesMeta": { 2222 | "enquirer": { 2223 | "optional": true 2224 | } 2225 | } 2226 | }, 2227 | "node_modules/lodash": { 2228 | "version": "4.17.21", 2229 | "dev": true, 2230 | "license": "MIT" 2231 | }, 2232 | "node_modules/lodash.once": { 2233 | "version": "4.1.1", 2234 | "dev": true, 2235 | "license": "MIT" 2236 | }, 2237 | "node_modules/log-symbols": { 2238 | "version": "4.1.0", 2239 | "dev": true, 2240 | "license": "MIT", 2241 | "dependencies": { 2242 | "chalk": "^4.1.0", 2243 | "is-unicode-supported": "^0.1.0" 2244 | }, 2245 | "engines": { 2246 | "node": ">=10" 2247 | }, 2248 | "funding": { 2249 | "url": "https://github.com/sponsors/sindresorhus" 2250 | } 2251 | }, 2252 | "node_modules/log-update": { 2253 | "version": "4.0.0", 2254 | "dev": true, 2255 | "license": "MIT", 2256 | "dependencies": { 2257 | "ansi-escapes": "^4.3.0", 2258 | "cli-cursor": "^3.1.0", 2259 | "slice-ansi": "^4.0.0", 2260 | "wrap-ansi": "^6.2.0" 2261 | }, 2262 | "engines": { 2263 | "node": ">=10" 2264 | }, 2265 | "funding": { 2266 | "url": "https://github.com/sponsors/sindresorhus" 2267 | } 2268 | }, 2269 | "node_modules/log-update/node_modules/slice-ansi": { 2270 | "version": "4.0.0", 2271 | "dev": true, 2272 | "license": "MIT", 2273 | "dependencies": { 2274 | "ansi-styles": "^4.0.0", 2275 | "astral-regex": "^2.0.0", 2276 | "is-fullwidth-code-point": "^3.0.0" 2277 | }, 2278 | "engines": { 2279 | "node": ">=10" 2280 | }, 2281 | "funding": { 2282 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 2283 | } 2284 | }, 2285 | "node_modules/log-update/node_modules/wrap-ansi": { 2286 | "version": "6.2.0", 2287 | "dev": true, 2288 | "license": "MIT", 2289 | "dependencies": { 2290 | "ansi-styles": "^4.0.0", 2291 | "string-width": "^4.1.0", 2292 | "strip-ansi": "^6.0.0" 2293 | }, 2294 | "engines": { 2295 | "node": ">=8" 2296 | } 2297 | }, 2298 | "node_modules/merge-stream": { 2299 | "version": "2.0.0", 2300 | "dev": true, 2301 | "license": "MIT" 2302 | }, 2303 | "node_modules/merge2": { 2304 | "version": "1.4.1", 2305 | "dev": true, 2306 | "license": "MIT", 2307 | "engines": { 2308 | "node": ">= 8" 2309 | } 2310 | }, 2311 | "node_modules/micromatch": { 2312 | "version": "4.0.7", 2313 | "dev": true, 2314 | "license": "MIT", 2315 | "dependencies": { 2316 | "braces": "^3.0.3", 2317 | "picomatch": "^2.3.1" 2318 | }, 2319 | "engines": { 2320 | "node": ">=8.6" 2321 | } 2322 | }, 2323 | "node_modules/mime-db": { 2324 | "version": "1.52.0", 2325 | "dev": true, 2326 | "license": "MIT", 2327 | "engines": { 2328 | "node": ">= 0.6" 2329 | } 2330 | }, 2331 | "node_modules/mime-types": { 2332 | "version": "2.1.35", 2333 | "dev": true, 2334 | "license": "MIT", 2335 | "dependencies": { 2336 | "mime-db": "1.52.0" 2337 | }, 2338 | "engines": { 2339 | "node": ">= 0.6" 2340 | } 2341 | }, 2342 | "node_modules/mimic-fn": { 2343 | "version": "2.1.0", 2344 | "dev": true, 2345 | "license": "MIT", 2346 | "engines": { 2347 | "node": ">=6" 2348 | } 2349 | }, 2350 | "node_modules/mimic-function": { 2351 | "version": "5.0.1", 2352 | "dev": true, 2353 | "license": "MIT", 2354 | "engines": { 2355 | "node": ">=18" 2356 | }, 2357 | "funding": { 2358 | "url": "https://github.com/sponsors/sindresorhus" 2359 | } 2360 | }, 2361 | "node_modules/minimatch": { 2362 | "version": "5.1.6", 2363 | "dev": true, 2364 | "license": "ISC", 2365 | "dependencies": { 2366 | "brace-expansion": "^2.0.1" 2367 | }, 2368 | "engines": { 2369 | "node": ">=10" 2370 | } 2371 | }, 2372 | "node_modules/minimist": { 2373 | "version": "1.2.8", 2374 | "dev": true, 2375 | "license": "MIT", 2376 | "funding": { 2377 | "url": "https://github.com/sponsors/ljharb" 2378 | } 2379 | }, 2380 | "node_modules/minipass": { 2381 | "version": "5.0.0", 2382 | "dev": true, 2383 | "license": "ISC", 2384 | "engines": { 2385 | "node": ">=8" 2386 | } 2387 | }, 2388 | "node_modules/minizlib": { 2389 | "version": "2.1.2", 2390 | "dev": true, 2391 | "license": "MIT", 2392 | "dependencies": { 2393 | "minipass": "^3.0.0", 2394 | "yallist": "^4.0.0" 2395 | }, 2396 | "engines": { 2397 | "node": ">= 8" 2398 | } 2399 | }, 2400 | "node_modules/minizlib/node_modules/minipass": { 2401 | "version": "3.3.6", 2402 | "dev": true, 2403 | "license": "ISC", 2404 | "dependencies": { 2405 | "yallist": "^4.0.0" 2406 | }, 2407 | "engines": { 2408 | "node": ">=8" 2409 | } 2410 | }, 2411 | "node_modules/mkdirp": { 2412 | "version": "1.0.4", 2413 | "dev": true, 2414 | "license": "MIT", 2415 | "bin": { 2416 | "mkdirp": "bin/cmd.js" 2417 | }, 2418 | "engines": { 2419 | "node": ">=10" 2420 | } 2421 | }, 2422 | "node_modules/mlly": { 2423 | "version": "1.7.1", 2424 | "dev": true, 2425 | "license": "MIT", 2426 | "dependencies": { 2427 | "acorn": "^8.11.3", 2428 | "pathe": "^1.1.2", 2429 | "pkg-types": "^1.1.1", 2430 | "ufo": "^1.5.3" 2431 | } 2432 | }, 2433 | "node_modules/mri": { 2434 | "version": "1.2.0", 2435 | "dev": true, 2436 | "license": "MIT", 2437 | "engines": { 2438 | "node": ">=4" 2439 | } 2440 | }, 2441 | "node_modules/ms": { 2442 | "version": "2.1.3", 2443 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2444 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2445 | "dev": true, 2446 | "license": "MIT" 2447 | }, 2448 | "node_modules/node-fetch-native": { 2449 | "version": "1.6.4", 2450 | "dev": true, 2451 | "license": "MIT" 2452 | }, 2453 | "node_modules/normalize-path": { 2454 | "version": "3.0.0", 2455 | "dev": true, 2456 | "license": "MIT", 2457 | "engines": { 2458 | "node": ">=0.10.0" 2459 | } 2460 | }, 2461 | "node_modules/npm-bundled": { 2462 | "version": "2.0.1", 2463 | "dev": true, 2464 | "license": "ISC", 2465 | "dependencies": { 2466 | "npm-normalize-package-bin": "^2.0.0" 2467 | }, 2468 | "engines": { 2469 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 2470 | } 2471 | }, 2472 | "node_modules/npm-normalize-package-bin": { 2473 | "version": "2.0.0", 2474 | "dev": true, 2475 | "license": "ISC", 2476 | "engines": { 2477 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 2478 | } 2479 | }, 2480 | "node_modules/npm-packlist": { 2481 | "version": "5.1.3", 2482 | "dev": true, 2483 | "license": "ISC", 2484 | "dependencies": { 2485 | "glob": "^8.0.1", 2486 | "ignore-walk": "^5.0.1", 2487 | "npm-bundled": "^2.0.0", 2488 | "npm-normalize-package-bin": "^2.0.0" 2489 | }, 2490 | "bin": { 2491 | "npm-packlist": "bin/index.js" 2492 | }, 2493 | "engines": { 2494 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 2495 | } 2496 | }, 2497 | "node_modules/npm-run-path": { 2498 | "version": "4.0.1", 2499 | "dev": true, 2500 | "license": "MIT", 2501 | "dependencies": { 2502 | "path-key": "^3.0.0" 2503 | }, 2504 | "engines": { 2505 | "node": ">=8" 2506 | } 2507 | }, 2508 | "node_modules/nypm": { 2509 | "version": "0.3.9", 2510 | "dev": true, 2511 | "license": "MIT", 2512 | "dependencies": { 2513 | "citty": "^0.1.6", 2514 | "consola": "^3.2.3", 2515 | "execa": "^8.0.1", 2516 | "pathe": "^1.1.2", 2517 | "pkg-types": "^1.1.1", 2518 | "ufo": "^1.5.3" 2519 | }, 2520 | "bin": { 2521 | "nypm": "dist/cli.mjs" 2522 | }, 2523 | "engines": { 2524 | "node": "^14.16.0 || >=16.10.0" 2525 | } 2526 | }, 2527 | "node_modules/nypm/node_modules/execa": { 2528 | "version": "8.0.1", 2529 | "dev": true, 2530 | "license": "MIT", 2531 | "dependencies": { 2532 | "cross-spawn": "^7.0.3", 2533 | "get-stream": "^8.0.1", 2534 | "human-signals": "^5.0.0", 2535 | "is-stream": "^3.0.0", 2536 | "merge-stream": "^2.0.0", 2537 | "npm-run-path": "^5.1.0", 2538 | "onetime": "^6.0.0", 2539 | "signal-exit": "^4.1.0", 2540 | "strip-final-newline": "^3.0.0" 2541 | }, 2542 | "engines": { 2543 | "node": ">=16.17" 2544 | }, 2545 | "funding": { 2546 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 2547 | } 2548 | }, 2549 | "node_modules/nypm/node_modules/get-stream": { 2550 | "version": "8.0.1", 2551 | "dev": true, 2552 | "license": "MIT", 2553 | "engines": { 2554 | "node": ">=16" 2555 | }, 2556 | "funding": { 2557 | "url": "https://github.com/sponsors/sindresorhus" 2558 | } 2559 | }, 2560 | "node_modules/nypm/node_modules/human-signals": { 2561 | "version": "5.0.0", 2562 | "dev": true, 2563 | "license": "Apache-2.0", 2564 | "engines": { 2565 | "node": ">=16.17.0" 2566 | } 2567 | }, 2568 | "node_modules/nypm/node_modules/is-stream": { 2569 | "version": "3.0.0", 2570 | "dev": true, 2571 | "license": "MIT", 2572 | "engines": { 2573 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2574 | }, 2575 | "funding": { 2576 | "url": "https://github.com/sponsors/sindresorhus" 2577 | } 2578 | }, 2579 | "node_modules/nypm/node_modules/mimic-fn": { 2580 | "version": "4.0.0", 2581 | "dev": true, 2582 | "license": "MIT", 2583 | "engines": { 2584 | "node": ">=12" 2585 | }, 2586 | "funding": { 2587 | "url": "https://github.com/sponsors/sindresorhus" 2588 | } 2589 | }, 2590 | "node_modules/nypm/node_modules/npm-run-path": { 2591 | "version": "5.3.0", 2592 | "dev": true, 2593 | "license": "MIT", 2594 | "dependencies": { 2595 | "path-key": "^4.0.0" 2596 | }, 2597 | "engines": { 2598 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2599 | }, 2600 | "funding": { 2601 | "url": "https://github.com/sponsors/sindresorhus" 2602 | } 2603 | }, 2604 | "node_modules/nypm/node_modules/onetime": { 2605 | "version": "6.0.0", 2606 | "dev": true, 2607 | "license": "MIT", 2608 | "dependencies": { 2609 | "mimic-fn": "^4.0.0" 2610 | }, 2611 | "engines": { 2612 | "node": ">=12" 2613 | }, 2614 | "funding": { 2615 | "url": "https://github.com/sponsors/sindresorhus" 2616 | } 2617 | }, 2618 | "node_modules/nypm/node_modules/path-key": { 2619 | "version": "4.0.0", 2620 | "dev": true, 2621 | "license": "MIT", 2622 | "engines": { 2623 | "node": ">=12" 2624 | }, 2625 | "funding": { 2626 | "url": "https://github.com/sponsors/sindresorhus" 2627 | } 2628 | }, 2629 | "node_modules/nypm/node_modules/signal-exit": { 2630 | "version": "4.1.0", 2631 | "dev": true, 2632 | "license": "ISC", 2633 | "engines": { 2634 | "node": ">=14" 2635 | }, 2636 | "funding": { 2637 | "url": "https://github.com/sponsors/isaacs" 2638 | } 2639 | }, 2640 | "node_modules/nypm/node_modules/strip-final-newline": { 2641 | "version": "3.0.0", 2642 | "dev": true, 2643 | "license": "MIT", 2644 | "engines": { 2645 | "node": ">=12" 2646 | }, 2647 | "funding": { 2648 | "url": "https://github.com/sponsors/sindresorhus" 2649 | } 2650 | }, 2651 | "node_modules/object-inspect": { 2652 | "version": "1.13.1", 2653 | "dev": true, 2654 | "license": "MIT", 2655 | "funding": { 2656 | "url": "https://github.com/sponsors/ljharb" 2657 | } 2658 | }, 2659 | "node_modules/ohash": { 2660 | "version": "1.1.3", 2661 | "dev": true, 2662 | "license": "MIT" 2663 | }, 2664 | "node_modules/once": { 2665 | "version": "1.4.0", 2666 | "dev": true, 2667 | "license": "ISC", 2668 | "dependencies": { 2669 | "wrappy": "1" 2670 | } 2671 | }, 2672 | "node_modules/onetime": { 2673 | "version": "5.1.2", 2674 | "dev": true, 2675 | "license": "MIT", 2676 | "dependencies": { 2677 | "mimic-fn": "^2.1.0" 2678 | }, 2679 | "engines": { 2680 | "node": ">=6" 2681 | }, 2682 | "funding": { 2683 | "url": "https://github.com/sponsors/sindresorhus" 2684 | } 2685 | }, 2686 | "node_modules/ospath": { 2687 | "version": "1.2.2", 2688 | "dev": true, 2689 | "license": "MIT" 2690 | }, 2691 | "node_modules/p-map": { 2692 | "version": "4.0.0", 2693 | "dev": true, 2694 | "license": "MIT", 2695 | "dependencies": { 2696 | "aggregate-error": "^3.0.0" 2697 | }, 2698 | "engines": { 2699 | "node": ">=10" 2700 | }, 2701 | "funding": { 2702 | "url": "https://github.com/sponsors/sindresorhus" 2703 | } 2704 | }, 2705 | "node_modules/path-key": { 2706 | "version": "3.1.1", 2707 | "dev": true, 2708 | "license": "MIT", 2709 | "engines": { 2710 | "node": ">=8" 2711 | } 2712 | }, 2713 | "node_modules/pathe": { 2714 | "version": "1.1.2", 2715 | "dev": true, 2716 | "license": "MIT" 2717 | }, 2718 | "node_modules/pend": { 2719 | "version": "1.2.0", 2720 | "dev": true, 2721 | "license": "MIT" 2722 | }, 2723 | "node_modules/perfect-debounce": { 2724 | "version": "1.0.0", 2725 | "dev": true, 2726 | "license": "MIT" 2727 | }, 2728 | "node_modules/performance-now": { 2729 | "version": "2.1.0", 2730 | "dev": true, 2731 | "license": "MIT" 2732 | }, 2733 | "node_modules/picocolors": { 2734 | "version": "1.0.1", 2735 | "dev": true, 2736 | "license": "ISC" 2737 | }, 2738 | "node_modules/picomatch": { 2739 | "version": "2.3.1", 2740 | "dev": true, 2741 | "license": "MIT", 2742 | "engines": { 2743 | "node": ">=8.6" 2744 | }, 2745 | "funding": { 2746 | "url": "https://github.com/sponsors/jonschlinkert" 2747 | } 2748 | }, 2749 | "node_modules/pidtree": { 2750 | "version": "0.6.0", 2751 | "dev": true, 2752 | "license": "MIT", 2753 | "bin": { 2754 | "pidtree": "bin/pidtree.js" 2755 | }, 2756 | "engines": { 2757 | "node": ">=0.10" 2758 | } 2759 | }, 2760 | "node_modules/pify": { 2761 | "version": "2.3.0", 2762 | "dev": true, 2763 | "license": "MIT", 2764 | "engines": { 2765 | "node": ">=0.10.0" 2766 | } 2767 | }, 2768 | "node_modules/pkg-types": { 2769 | "version": "1.1.3", 2770 | "dev": true, 2771 | "license": "MIT", 2772 | "dependencies": { 2773 | "confbox": "^0.1.7", 2774 | "mlly": "^1.7.1", 2775 | "pathe": "^1.1.2" 2776 | } 2777 | }, 2778 | "node_modules/preact": { 2779 | "version": "10.23.2", 2780 | "dev": true, 2781 | "license": "MIT", 2782 | "funding": { 2783 | "type": "opencollective", 2784 | "url": "https://opencollective.com/preact" 2785 | } 2786 | }, 2787 | "node_modules/prettier": { 2788 | "version": "3.3.3", 2789 | "dev": true, 2790 | "license": "MIT", 2791 | "bin": { 2792 | "prettier": "bin/prettier.cjs" 2793 | }, 2794 | "engines": { 2795 | "node": ">=14" 2796 | }, 2797 | "funding": { 2798 | "url": "https://github.com/prettier/prettier?sponsor=1" 2799 | } 2800 | }, 2801 | "node_modules/pretty-bytes": { 2802 | "version": "5.6.0", 2803 | "dev": true, 2804 | "license": "MIT", 2805 | "engines": { 2806 | "node": ">=6" 2807 | }, 2808 | "funding": { 2809 | "url": "https://github.com/sponsors/sindresorhus" 2810 | } 2811 | }, 2812 | "node_modules/process": { 2813 | "version": "0.11.10", 2814 | "dev": true, 2815 | "license": "MIT", 2816 | "engines": { 2817 | "node": ">= 0.6.0" 2818 | } 2819 | }, 2820 | "node_modules/prompts": { 2821 | "version": "2.4.2", 2822 | "dev": true, 2823 | "license": "MIT", 2824 | "dependencies": { 2825 | "kleur": "^3.0.3", 2826 | "sisteransi": "^1.0.5" 2827 | }, 2828 | "engines": { 2829 | "node": ">= 6" 2830 | } 2831 | }, 2832 | "node_modules/proxy-from-env": { 2833 | "version": "1.0.0", 2834 | "dev": true, 2835 | "license": "MIT" 2836 | }, 2837 | "node_modules/psl": { 2838 | "version": "1.9.0", 2839 | "dev": true, 2840 | "license": "MIT" 2841 | }, 2842 | "node_modules/publint": { 2843 | "version": "0.2.9", 2844 | "dev": true, 2845 | "license": "MIT", 2846 | "dependencies": { 2847 | "npm-packlist": "^5.1.3", 2848 | "picocolors": "^1.0.1", 2849 | "sade": "^1.8.1" 2850 | }, 2851 | "bin": { 2852 | "publint": "lib/cli.js" 2853 | }, 2854 | "engines": { 2855 | "node": ">=16" 2856 | }, 2857 | "funding": { 2858 | "url": "https://bjornlu.com/sponsor" 2859 | } 2860 | }, 2861 | "node_modules/pump": { 2862 | "version": "3.0.0", 2863 | "dev": true, 2864 | "license": "MIT", 2865 | "dependencies": { 2866 | "end-of-stream": "^1.1.0", 2867 | "once": "^1.3.1" 2868 | } 2869 | }, 2870 | "node_modules/punycode": { 2871 | "version": "2.3.1", 2872 | "dev": true, 2873 | "license": "MIT", 2874 | "engines": { 2875 | "node": ">=6" 2876 | } 2877 | }, 2878 | "node_modules/qs": { 2879 | "version": "6.10.4", 2880 | "dev": true, 2881 | "license": "BSD-3-Clause", 2882 | "dependencies": { 2883 | "side-channel": "^1.0.4" 2884 | }, 2885 | "engines": { 2886 | "node": ">=0.6" 2887 | }, 2888 | "funding": { 2889 | "url": "https://github.com/sponsors/ljharb" 2890 | } 2891 | }, 2892 | "node_modules/querystringify": { 2893 | "version": "2.2.0", 2894 | "dev": true, 2895 | "license": "MIT" 2896 | }, 2897 | "node_modules/queue-microtask": { 2898 | "version": "1.2.3", 2899 | "dev": true, 2900 | "funding": [ 2901 | { 2902 | "type": "github", 2903 | "url": "https://github.com/sponsors/feross" 2904 | }, 2905 | { 2906 | "type": "patreon", 2907 | "url": "https://www.patreon.com/feross" 2908 | }, 2909 | { 2910 | "type": "consulting", 2911 | "url": "https://feross.org/support" 2912 | } 2913 | ], 2914 | "license": "MIT" 2915 | }, 2916 | "node_modules/rc9": { 2917 | "version": "2.1.2", 2918 | "dev": true, 2919 | "license": "MIT", 2920 | "dependencies": { 2921 | "defu": "^6.1.4", 2922 | "destr": "^2.0.3" 2923 | } 2924 | }, 2925 | "node_modules/readdirp": { 2926 | "version": "3.6.0", 2927 | "dev": true, 2928 | "license": "MIT", 2929 | "dependencies": { 2930 | "picomatch": "^2.2.1" 2931 | }, 2932 | "engines": { 2933 | "node": ">=8.10.0" 2934 | } 2935 | }, 2936 | "node_modules/request-progress": { 2937 | "version": "3.0.0", 2938 | "dev": true, 2939 | "license": "MIT", 2940 | "dependencies": { 2941 | "throttleit": "^1.0.0" 2942 | } 2943 | }, 2944 | "node_modules/requires-port": { 2945 | "version": "1.0.0", 2946 | "dev": true, 2947 | "license": "MIT" 2948 | }, 2949 | "node_modules/restore-cursor": { 2950 | "version": "3.1.0", 2951 | "dev": true, 2952 | "license": "MIT", 2953 | "dependencies": { 2954 | "onetime": "^5.1.0", 2955 | "signal-exit": "^3.0.2" 2956 | }, 2957 | "engines": { 2958 | "node": ">=8" 2959 | } 2960 | }, 2961 | "node_modules/reusify": { 2962 | "version": "1.0.4", 2963 | "dev": true, 2964 | "license": "MIT", 2965 | "engines": { 2966 | "iojs": ">=1.0.0", 2967 | "node": ">=0.10.0" 2968 | } 2969 | }, 2970 | "node_modules/rfdc": { 2971 | "version": "1.4.1", 2972 | "dev": true, 2973 | "license": "MIT" 2974 | }, 2975 | "node_modules/run-parallel": { 2976 | "version": "1.2.0", 2977 | "dev": true, 2978 | "funding": [ 2979 | { 2980 | "type": "github", 2981 | "url": "https://github.com/sponsors/feross" 2982 | }, 2983 | { 2984 | "type": "patreon", 2985 | "url": "https://www.patreon.com/feross" 2986 | }, 2987 | { 2988 | "type": "consulting", 2989 | "url": "https://feross.org/support" 2990 | } 2991 | ], 2992 | "license": "MIT", 2993 | "dependencies": { 2994 | "queue-microtask": "^1.2.2" 2995 | } 2996 | }, 2997 | "node_modules/rxjs": { 2998 | "version": "7.8.1", 2999 | "dev": true, 3000 | "license": "Apache-2.0", 3001 | "dependencies": { 3002 | "tslib": "^2.1.0" 3003 | } 3004 | }, 3005 | "node_modules/sade": { 3006 | "version": "1.8.1", 3007 | "dev": true, 3008 | "license": "MIT", 3009 | "dependencies": { 3010 | "mri": "^1.1.0" 3011 | }, 3012 | "engines": { 3013 | "node": ">=6" 3014 | } 3015 | }, 3016 | "node_modules/safe-buffer": { 3017 | "version": "5.2.1", 3018 | "dev": true, 3019 | "funding": [ 3020 | { 3021 | "type": "github", 3022 | "url": "https://github.com/sponsors/feross" 3023 | }, 3024 | { 3025 | "type": "patreon", 3026 | "url": "https://www.patreon.com/feross" 3027 | }, 3028 | { 3029 | "type": "consulting", 3030 | "url": "https://feross.org/support" 3031 | } 3032 | ], 3033 | "license": "MIT" 3034 | }, 3035 | "node_modules/safer-buffer": { 3036 | "version": "2.1.2", 3037 | "dev": true, 3038 | "license": "MIT" 3039 | }, 3040 | "node_modules/semver": { 3041 | "version": "7.6.3", 3042 | "dev": true, 3043 | "license": "ISC", 3044 | "bin": { 3045 | "semver": "bin/semver.js" 3046 | }, 3047 | "engines": { 3048 | "node": ">=10" 3049 | } 3050 | }, 3051 | "node_modules/set-function-length": { 3052 | "version": "1.2.2", 3053 | "dev": true, 3054 | "license": "MIT", 3055 | "dependencies": { 3056 | "define-data-property": "^1.1.4", 3057 | "es-errors": "^1.3.0", 3058 | "function-bind": "^1.1.2", 3059 | "get-intrinsic": "^1.2.4", 3060 | "gopd": "^1.0.1", 3061 | "has-property-descriptors": "^1.0.2" 3062 | }, 3063 | "engines": { 3064 | "node": ">= 0.4" 3065 | } 3066 | }, 3067 | "node_modules/shebang-command": { 3068 | "version": "2.0.0", 3069 | "dev": true, 3070 | "license": "MIT", 3071 | "dependencies": { 3072 | "shebang-regex": "^3.0.0" 3073 | }, 3074 | "engines": { 3075 | "node": ">=8" 3076 | } 3077 | }, 3078 | "node_modules/shebang-regex": { 3079 | "version": "3.0.0", 3080 | "dev": true, 3081 | "license": "MIT", 3082 | "engines": { 3083 | "node": ">=8" 3084 | } 3085 | }, 3086 | "node_modules/side-channel": { 3087 | "version": "1.0.6", 3088 | "dev": true, 3089 | "license": "MIT", 3090 | "dependencies": { 3091 | "call-bind": "^1.0.7", 3092 | "es-errors": "^1.3.0", 3093 | "get-intrinsic": "^1.2.4", 3094 | "object-inspect": "^1.13.1" 3095 | }, 3096 | "engines": { 3097 | "node": ">= 0.4" 3098 | }, 3099 | "funding": { 3100 | "url": "https://github.com/sponsors/ljharb" 3101 | } 3102 | }, 3103 | "node_modules/signal-exit": { 3104 | "version": "3.0.7", 3105 | "dev": true, 3106 | "license": "ISC" 3107 | }, 3108 | "node_modules/sisteransi": { 3109 | "version": "1.0.5", 3110 | "dev": true, 3111 | "license": "MIT" 3112 | }, 3113 | "node_modules/slice-ansi": { 3114 | "version": "3.0.0", 3115 | "dev": true, 3116 | "license": "MIT", 3117 | "dependencies": { 3118 | "ansi-styles": "^4.0.0", 3119 | "astral-regex": "^2.0.0", 3120 | "is-fullwidth-code-point": "^3.0.0" 3121 | }, 3122 | "engines": { 3123 | "node": ">=8" 3124 | } 3125 | }, 3126 | "node_modules/sshpk": { 3127 | "version": "1.18.0", 3128 | "dev": true, 3129 | "license": "MIT", 3130 | "dependencies": { 3131 | "asn1": "~0.2.3", 3132 | "assert-plus": "^1.0.0", 3133 | "bcrypt-pbkdf": "^1.0.0", 3134 | "dashdash": "^1.12.0", 3135 | "ecc-jsbn": "~0.1.1", 3136 | "getpass": "^0.1.1", 3137 | "jsbn": "~0.1.0", 3138 | "safer-buffer": "^2.0.2", 3139 | "tweetnacl": "~0.14.0" 3140 | }, 3141 | "bin": { 3142 | "sshpk-conv": "bin/sshpk-conv", 3143 | "sshpk-sign": "bin/sshpk-sign", 3144 | "sshpk-verify": "bin/sshpk-verify" 3145 | }, 3146 | "engines": { 3147 | "node": ">=0.10.0" 3148 | } 3149 | }, 3150 | "node_modules/string-argv": { 3151 | "version": "0.3.2", 3152 | "dev": true, 3153 | "license": "MIT", 3154 | "engines": { 3155 | "node": ">=0.6.19" 3156 | } 3157 | }, 3158 | "node_modules/string-width": { 3159 | "version": "4.2.3", 3160 | "dev": true, 3161 | "license": "MIT", 3162 | "dependencies": { 3163 | "emoji-regex": "^8.0.0", 3164 | "is-fullwidth-code-point": "^3.0.0", 3165 | "strip-ansi": "^6.0.1" 3166 | }, 3167 | "engines": { 3168 | "node": ">=8" 3169 | } 3170 | }, 3171 | "node_modules/strip-ansi": { 3172 | "version": "6.0.1", 3173 | "dev": true, 3174 | "license": "MIT", 3175 | "dependencies": { 3176 | "ansi-regex": "^5.0.1" 3177 | }, 3178 | "engines": { 3179 | "node": ">=8" 3180 | } 3181 | }, 3182 | "node_modules/strip-final-newline": { 3183 | "version": "2.0.0", 3184 | "dev": true, 3185 | "license": "MIT", 3186 | "engines": { 3187 | "node": ">=6" 3188 | } 3189 | }, 3190 | "node_modules/supports-color": { 3191 | "version": "8.1.1", 3192 | "dev": true, 3193 | "license": "MIT", 3194 | "dependencies": { 3195 | "has-flag": "^4.0.0" 3196 | }, 3197 | "engines": { 3198 | "node": ">=10" 3199 | }, 3200 | "funding": { 3201 | "url": "https://github.com/chalk/supports-color?sponsor=1" 3202 | } 3203 | }, 3204 | "node_modules/tar": { 3205 | "version": "6.2.1", 3206 | "dev": true, 3207 | "license": "ISC", 3208 | "dependencies": { 3209 | "chownr": "^2.0.0", 3210 | "fs-minipass": "^2.0.0", 3211 | "minipass": "^5.0.0", 3212 | "minizlib": "^2.1.1", 3213 | "mkdirp": "^1.0.3", 3214 | "yallist": "^4.0.0" 3215 | }, 3216 | "engines": { 3217 | "node": ">=10" 3218 | } 3219 | }, 3220 | "node_modules/throttleit": { 3221 | "version": "1.0.1", 3222 | "dev": true, 3223 | "license": "MIT", 3224 | "funding": { 3225 | "url": "https://github.com/sponsors/sindresorhus" 3226 | } 3227 | }, 3228 | "node_modules/through": { 3229 | "version": "2.3.8", 3230 | "dev": true, 3231 | "license": "MIT" 3232 | }, 3233 | "node_modules/tmp": { 3234 | "version": "0.2.3", 3235 | "dev": true, 3236 | "license": "MIT", 3237 | "engines": { 3238 | "node": ">=14.14" 3239 | } 3240 | }, 3241 | "node_modules/to-regex-range": { 3242 | "version": "5.0.1", 3243 | "dev": true, 3244 | "license": "MIT", 3245 | "dependencies": { 3246 | "is-number": "^7.0.0" 3247 | }, 3248 | "engines": { 3249 | "node": ">=8.0" 3250 | } 3251 | }, 3252 | "node_modules/tough-cookie": { 3253 | "version": "4.1.3", 3254 | "dev": true, 3255 | "license": "BSD-3-Clause", 3256 | "dependencies": { 3257 | "psl": "^1.1.33", 3258 | "punycode": "^2.1.1", 3259 | "universalify": "^0.2.0", 3260 | "url-parse": "^1.5.3" 3261 | }, 3262 | "engines": { 3263 | "node": ">=6" 3264 | } 3265 | }, 3266 | "node_modules/tough-cookie/node_modules/universalify": { 3267 | "version": "0.2.0", 3268 | "dev": true, 3269 | "license": "MIT", 3270 | "engines": { 3271 | "node": ">= 4.0.0" 3272 | } 3273 | }, 3274 | "node_modules/tslib": { 3275 | "version": "2.6.2", 3276 | "dev": true, 3277 | "license": "0BSD" 3278 | }, 3279 | "node_modules/tunnel-agent": { 3280 | "version": "0.6.0", 3281 | "dev": true, 3282 | "license": "Apache-2.0", 3283 | "dependencies": { 3284 | "safe-buffer": "^5.0.1" 3285 | }, 3286 | "engines": { 3287 | "node": "*" 3288 | } 3289 | }, 3290 | "node_modules/tweetnacl": { 3291 | "version": "0.14.5", 3292 | "dev": true, 3293 | "license": "Unlicense" 3294 | }, 3295 | "node_modules/type-detect": { 3296 | "version": "4.0.8", 3297 | "dev": true, 3298 | "license": "MIT", 3299 | "engines": { 3300 | "node": ">=4" 3301 | } 3302 | }, 3303 | "node_modules/type-fest": { 3304 | "version": "0.21.3", 3305 | "dev": true, 3306 | "license": "(MIT OR CC0-1.0)", 3307 | "engines": { 3308 | "node": ">=10" 3309 | }, 3310 | "funding": { 3311 | "url": "https://github.com/sponsors/sindresorhus" 3312 | } 3313 | }, 3314 | "node_modules/typescript": { 3315 | "version": "5.5.4", 3316 | "dev": true, 3317 | "license": "Apache-2.0", 3318 | "bin": { 3319 | "tsc": "bin/tsc", 3320 | "tsserver": "bin/tsserver" 3321 | }, 3322 | "engines": { 3323 | "node": ">=14.17" 3324 | } 3325 | }, 3326 | "node_modules/ufo": { 3327 | "version": "1.5.4", 3328 | "dev": true, 3329 | "license": "MIT" 3330 | }, 3331 | "node_modules/undici-types": { 3332 | "version": "5.26.5", 3333 | "dev": true, 3334 | "license": "MIT", 3335 | "optional": true 3336 | }, 3337 | "node_modules/universalify": { 3338 | "version": "2.0.1", 3339 | "dev": true, 3340 | "license": "MIT", 3341 | "engines": { 3342 | "node": ">= 10.0.0" 3343 | } 3344 | }, 3345 | "node_modules/untildify": { 3346 | "version": "4.0.0", 3347 | "dev": true, 3348 | "license": "MIT", 3349 | "engines": { 3350 | "node": ">=8" 3351 | } 3352 | }, 3353 | "node_modules/url-parse": { 3354 | "version": "1.5.10", 3355 | "dev": true, 3356 | "license": "MIT", 3357 | "dependencies": { 3358 | "querystringify": "^2.1.1", 3359 | "requires-port": "^1.0.0" 3360 | } 3361 | }, 3362 | "node_modules/uuid": { 3363 | "version": "8.3.2", 3364 | "dev": true, 3365 | "license": "MIT", 3366 | "bin": { 3367 | "uuid": "dist/bin/uuid" 3368 | } 3369 | }, 3370 | "node_modules/verror": { 3371 | "version": "1.10.0", 3372 | "dev": true, 3373 | "engines": [ 3374 | "node >=0.6.0" 3375 | ], 3376 | "license": "MIT", 3377 | "dependencies": { 3378 | "assert-plus": "^1.0.0", 3379 | "core-util-is": "1.0.2", 3380 | "extsprintf": "^1.2.0" 3381 | } 3382 | }, 3383 | "node_modules/wait-on": { 3384 | "version": "7.2.0", 3385 | "dev": true, 3386 | "license": "MIT", 3387 | "dependencies": { 3388 | "axios": "^1.6.1", 3389 | "joi": "^17.11.0", 3390 | "lodash": "^4.17.21", 3391 | "minimist": "^1.2.8", 3392 | "rxjs": "^7.8.1" 3393 | }, 3394 | "bin": { 3395 | "wait-on": "bin/wait-on" 3396 | }, 3397 | "engines": { 3398 | "node": ">=12.0.0" 3399 | } 3400 | }, 3401 | "node_modules/which": { 3402 | "version": "2.0.2", 3403 | "dev": true, 3404 | "license": "ISC", 3405 | "dependencies": { 3406 | "isexe": "^2.0.0" 3407 | }, 3408 | "bin": { 3409 | "node-which": "bin/node-which" 3410 | }, 3411 | "engines": { 3412 | "node": ">= 8" 3413 | } 3414 | }, 3415 | "node_modules/wrap-ansi": { 3416 | "version": "7.0.0", 3417 | "dev": true, 3418 | "license": "MIT", 3419 | "dependencies": { 3420 | "ansi-styles": "^4.0.0", 3421 | "string-width": "^4.1.0", 3422 | "strip-ansi": "^6.0.0" 3423 | }, 3424 | "engines": { 3425 | "node": ">=10" 3426 | }, 3427 | "funding": { 3428 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3429 | } 3430 | }, 3431 | "node_modules/wrappy": { 3432 | "version": "1.0.2", 3433 | "dev": true, 3434 | "license": "ISC" 3435 | }, 3436 | "node_modules/yallist": { 3437 | "version": "4.0.0", 3438 | "dev": true, 3439 | "license": "ISC" 3440 | }, 3441 | "node_modules/yaml": { 3442 | "version": "2.5.0", 3443 | "dev": true, 3444 | "license": "ISC", 3445 | "bin": { 3446 | "yaml": "bin.mjs" 3447 | }, 3448 | "engines": { 3449 | "node": ">= 14" 3450 | } 3451 | }, 3452 | "node_modules/yauzl": { 3453 | "version": "2.10.0", 3454 | "dev": true, 3455 | "license": "MIT", 3456 | "dependencies": { 3457 | "buffer-crc32": "~0.2.3", 3458 | "fd-slicer": "~1.1.0" 3459 | } 3460 | } 3461 | } 3462 | } 3463 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@preachjs/datepicker", 3 | "version": "0.0.4", 4 | "description": "Headless Datepickers for preact", 5 | "keywords": [ 6 | "datepicker", 7 | "preact", 8 | "headless", 9 | "minimal" 10 | ], 11 | "license": "MIT", 12 | "author": "reaper ", 13 | "type": "module", 14 | "main": "./dist/index.js", 15 | "exports": "./dist/index.js", 16 | "types": "./src/index.d.ts", 17 | "files": [ 18 | "src", 19 | "dist" 20 | ], 21 | "publishConfig": { 22 | "access": "public" 23 | }, 24 | "scripts": { 25 | "build": "tsc", 26 | "prepack": "npm run build", 27 | "package:lint": "publint", 28 | "example:build": "node build.js", 29 | "example:dev": "node build.js --dev", 30 | "test:e2e": "node ./script/e2e-run.js", 31 | "test": "echo true", 32 | "next": "bumpp", 33 | "fix": "prettier --write .", 34 | "prepare": "husky" 35 | }, 36 | "prettier": "@barelyhuman/prettier-config", 37 | "devDependencies": { 38 | "@barelyhuman/prettier-config": "^1.1.0", 39 | "@preact/signals": "^1.3.0", 40 | "bumpp": "^9.5.1", 41 | "cypress": "^13.13.2", 42 | "esbuild": "^0.23.0", 43 | "husky": "^9.1.4", 44 | "lint-staged": "^15.2.9", 45 | "preact": "^10.23.2", 46 | "prettier": "^3.3.3", 47 | "publint": "^0.2.9", 48 | "typescript": "^5.5.4", 49 | "wait-on": "^7.2.0" 50 | }, 51 | "peerDependencies": { 52 | "@preact/signals": ">=1.2.2", 53 | "preact": ">=10" 54 | }, 55 | "lint-staged": { 56 | "*.{js,css,md}": "prettier --write" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # @preachjs/datepicker 2 | 3 | > Headless Datepicker(s) for preact 4 | 5 | - [@preachjs/datepicker](#preachjsdatepicker) 6 | - [Highlights](#highlights) 7 | - [Usage](#usage) 8 | - [Simple Inline Datepicker](#simple-inline-datepicker) 9 | - [Create a range select date picker](#create-a-range-select-date-picker) 10 | - [API](#api) 11 | - [License](#license) 12 | 13 | ## Highlights 14 | 15 | - Lightweight 16 | - Unstyled 17 | - Fast and runs on signals 18 | - For [Preact](https://preactjs.com/)! <3 19 | 20 | ## Usage 21 | 22 | - Install the package and it's deps 23 | 24 | ```sh 25 | npm i preact @preachjs/datepicker @preact/signals 26 | ``` 27 | 28 | ### Simple Inline Datepicker 29 | 30 | ```js 31 | import { Calendar } from '@preachjs/datepicker' 32 | 33 | function App() { 34 | const [date, setDate] = useState() 35 | return ( 36 | <> 37 | setDate(nextValue)} /> 38 | 39 | ) 40 | } 41 | ``` 42 | 43 | ### Create a range select date picker 44 | 45 | ```tsx 46 | import { Calendar } from '@preachjs/datepicker' 47 | 48 | function App() { 49 | const [dateRange, setDateRange] = useState([]) 50 | return ( 51 | <> 52 | setDateRange(nextValue)} 56 | /> 57 | 58 | ) 59 | } 60 | ``` 61 | 62 | ### API 63 | 64 | | prop | description | default | 65 | | --------------- | ----------------------------------------------------------------------------------------------------------------- | ------------ | 66 | | `value` | The current value of the datepicker | current date | 67 | | `onSelect` | Callback fired when a date selection is successful, in case of `range` selection, it'll fire with both the values | | 68 | | `mode` | Switch between single select and range selection mode | `single` | 69 | | `weekdayFormat` | `narrow,short,long` weekend format on the calendar header | `narrow` | 70 | | `arrowLeft` | Icon Rendered on the left of the month selector | `<` | 71 | | `arrowRight` | Icon Rendered on the right of the month selector | `>` | 72 | | `readOnly` | Change to readOnly mode, date selection will do nothing | `false` | 73 | 74 | ## License 75 | 76 | [MIT](/LICENSE) 77 | -------------------------------------------------------------------------------- /scripts/e2e-run.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { spawn } from 'node:child_process' 3 | import wait from 'wait-on' 4 | 5 | const serverRun = spawn('npm', ['run', 'example:dev'], { stdio: 'pipe' }) 6 | serverRun.stdout.pipe(process.stdout) 7 | serverRun.stderr.pipe(process.stderr) 8 | 9 | serverRun.on('error', err => { 10 | console.error('Failed to start server with error', err) 11 | process.exit(1) 12 | }) 13 | 14 | console.log('Waiting for server to start on :8000') 15 | await wait({ 16 | resources: ['http://127.0.0.1:8000/'], 17 | }) 18 | console.log('Server found') 19 | 20 | const cypressProcess = spawn('npx', ['cypress', 'run'], { stdio: 'pipe' }) 21 | cypressProcess.stdout.pipe(process.stdout) 22 | cypressProcess.stderr.pipe(process.stderr) 23 | 24 | cypressProcess.on('exit', () => { 25 | serverRun.kill('SIGTERM') 26 | process.exit(0) 27 | }) 28 | -------------------------------------------------------------------------------- /src/calendar.d.ts: -------------------------------------------------------------------------------- 1 | type CalendarValues = { 2 | single: Date 3 | range: [Date, Date] 4 | } 5 | 6 | export type CalendarValue = 7 | CalendarValues[M] 8 | 9 | export type CalendarMode = 'single' | 'range' 10 | 11 | export type CalendarProps = { 12 | value?: CalendarValue 13 | weekdayFormat?: 'narrow' | 'short' | 'long' 14 | arrowLeft?: () => any 15 | arrowRight?: () => any 16 | mode?: M 17 | readOnly: boolean 18 | onSelect?: (nextValue: CalendarValue) => void 19 | } 20 | -------------------------------------------------------------------------------- /src/calendar.js: -------------------------------------------------------------------------------- 1 | import { useSignal, useComputed } from '@preact/signals' 2 | import { useRef } from 'preact/hooks' 3 | import { 4 | getWeekdayList, 5 | generateListOfDaysForMonthAndYear, 6 | getMonthAndYearFromDate, 7 | formatToReadableDate, 8 | getDatesInRange, 9 | sortByDate, 10 | } from './utils.js' 11 | 12 | /** 13 | * @param {import("./calendar").CalendarProps} props 14 | * @returns 15 | */ 16 | export function Calendar({ 17 | value = new Date(), 18 | mode = 'single', 19 | onSelect = () => {}, 20 | locale = 'en-gb', 21 | readOnly = false, 22 | weekdayFormat = 'narrow', 23 | arrowLeft: ArrowLeft = () => <><, 24 | arrowRight: ArrowRight = () => <>>, 25 | }) { 26 | const selecting = useRef(false) 27 | const refRange$ = useSignal([]) 28 | const activeDate$ = useSignal(new Date(value)) 29 | const rangeHovering$ = useSignal(null) 30 | 31 | const weekdays = getWeekdayList(locale, { 32 | format: weekdayFormat, 33 | }) 34 | 35 | const possibleDates = useComputed(() => { 36 | const activeDate = activeDate$.value 37 | return generateListOfDaysForMonthAndYear( 38 | activeDate.getMonth(), 39 | activeDate.getFullYear(), 40 | { 41 | weekdays: weekdays, 42 | } 43 | ) 44 | }) 45 | 46 | const justDates = useComputed(() => 47 | possibleDates.value.map(d => d.map(x => x.date)).flat(2) 48 | ) 49 | 50 | const datesInSelectionRange = (() => { 51 | if ( 52 | mode == 'range' && 53 | Array.isArray(value) && 54 | value?.length == 2 && 55 | !selecting.current 56 | ) 57 | return getDatesInRange(justDates.value, value[0], value[1]) 58 | return [] 59 | })() 60 | 61 | const datesInHoverRange$ = useComputed(() => { 62 | const allDates = justDates.value 63 | if ( 64 | rangeHovering$.value && 65 | refRange$.value.length == 1 && 66 | mode == 'range' 67 | ) { 68 | const sorted = [refRange$.value[0], rangeHovering$.value].sort(sortByDate) 69 | return getDatesInRange(allDates, sorted[0], sorted[1]) 70 | } 71 | return [] 72 | }) 73 | 74 | let tabIndexOffset = 3 75 | 76 | return ( 77 |
78 |
79 | 90 | 91 | 102 |
103 | 109 | 110 | 111 | {weekdays.map(d => { 112 | return 113 | })} 114 | 115 | 116 | 117 | {possibleDates.value.map((dateRow, rowIndex) => { 118 | return ( 119 | 120 | {dateRow.map((dateItem, colIndex) => { 121 | const isDateActive = 122 | (mode == 'single' && 123 | !Array.isArray(value) && 124 | dateItem.date.getTime() === value.getTime()) || 125 | false 126 | 127 | let isRangeStart 128 | let isRangeEnd 129 | let isInRange = 130 | datesInSelectionRange.includes(dateItem.date) || 131 | datesInHoverRange$.value.includes(dateItem.date) 132 | 133 | if (mode == 'range') { 134 | if (refRange$.value.length && selecting.current) { 135 | isRangeStart = 136 | dateItem.date.getTime() === refRange$.value[0].getTime() 137 | } else if (Array.isArray(value) && !selecting.current) { 138 | isRangeStart = 139 | value[0] && 140 | dateItem.date.getTime() === value[0].getTime() 141 | isRangeEnd = 142 | value[1] && 143 | dateItem.date.getTime() === value[1].getTime() 144 | } 145 | } 146 | 147 | const gridCellStyles = [ 148 | 'preachjs-calendar--grid-cell', 149 | readOnly && 'read-only', 150 | isDateActive && 'active', 151 | isRangeStart && 'preachjs-calendar--grid-cell-start', 152 | isInRange && 'preachjs-calendar--grid-cell-in-range', 153 | isRangeEnd && 'preachjs-calendar--grid-cell-end', 154 | ] 155 | 156 | if (dateItem.previousMonth || dateItem.nextMonth) { 157 | return ( 158 | 174 | ) 175 | } 176 | return ( 177 | 220 | ) 221 | })} 222 | 223 | ) 224 | })} 225 | 226 |
{d}
170 | 173 | 186 | 219 |
227 |
228 | ) 229 | } 230 | 231 | function createKeypressHandler(mode) { 232 | return node => { 233 | if (!node) return 234 | if (mode !== 'single') return 235 | node.addEventListener('keyup', e => { 236 | const isParentCell = 237 | Array.from(e.target.parentNode.classList.entries()).findIndex( 238 | d => d[1] == 'preachjs-calendar--grid-cell' 239 | ) > -1 240 | const isCell = 241 | Array.from(e.target.classList.entries()).findIndex( 242 | d => d[1] == 'preachjs-calendar--grid-cell' 243 | ) > -1 244 | 245 | if (!(isCell || isParentCell)) return 246 | 247 | const CellTarget = isParentCell ? e.target.parentNode : e.target 248 | const currentRow = +CellTarget.dataset.row 249 | const currentCol = +CellTarget.dataset.col 250 | switch (e.key) { 251 | case 'ArrowDown': { 252 | const elem = e.target 253 | .closest('.preachjs-calendar--grid-body') 254 | .querySelector( 255 | `[data-row='${currentRow + 1}'][data-col='${currentCol}']` 256 | ) 257 | elem?.querySelector('button').focus() 258 | break 259 | } 260 | case 'ArrowUp': { 261 | const elem = e.target 262 | .closest('.preachjs-calendar--grid-body') 263 | .querySelector( 264 | `[data-row='${currentRow - 1}'][data-col='${currentCol}']` 265 | ) 266 | elem?.querySelector('button').focus() 267 | break 268 | } 269 | case 'ArrowRight': { 270 | let changedCol = currentCol + 1 271 | let changedRow = currentRow 272 | if (changedCol > 6) { 273 | changedRow += 1 274 | changedCol = 0 275 | } 276 | const elem = e.target 277 | .closest('.preachjs-calendar--grid-body') 278 | .querySelector( 279 | `[data-row='${changedRow}'][data-col='${changedCol}']` 280 | ) 281 | elem?.querySelector('button').focus() 282 | break 283 | } 284 | case 'ArrowLeft': { 285 | let changedCol = currentCol - 1 286 | let changedRow = currentRow 287 | if (changedCol < 0) { 288 | changedRow -= 1 289 | changedCol = 6 290 | } 291 | const elem = e.target 292 | .closest('.preachjs-calendar--grid-body') 293 | .querySelector( 294 | `[data-row='${changedRow}'][data-col='${changedCol}']` 295 | ) 296 | elem?.querySelector('button').focus() 297 | break 298 | } 299 | case ' ': 300 | case 'Enter': { 301 | const elem = e.target.closest(`[data-row][data-col]`) 302 | elem?.querySelector('button').click() 303 | break 304 | } 305 | } 306 | }) 307 | } 308 | } 309 | 310 | function tieHoveredElmToSignal(window, sign$) { 311 | window.addEventListener( 312 | 'mousemove', 313 | e => { 314 | const elm = document.elementFromPoint(e.clientX, e.clientY) 315 | 316 | const nearbyCell = elm.closest('.preachjs-calendar--grid-cell') 317 | if (!nearbyCell) return 318 | sign$.value = new Date(nearbyCell.dataset.date) 319 | }, 320 | { 321 | passive: true, 322 | } 323 | ) 324 | } 325 | 326 | function mergeStyle(arr, ...additional) { 327 | return additional.filter(Boolean).concat(arr.filter(Boolean)).join(' ') 328 | } 329 | -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | import { JSX } from 'preact' 2 | import type { CalendarMode, CalendarProps } from './calendar' 3 | export type { CalendarMode, CalendarProps } from './calendar' 4 | 5 | export const Calendar: ( 6 | props: CalendarProps 7 | ) => JSX.Element 8 | 9 | export * from './calendar' 10 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | export { Calendar } from './calendar.js' 2 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | export function getDaysOfMonthAndYear(month, year) { 2 | return new Date(year, month, 0).getDate() 3 | } 4 | 5 | export function generateListOfDaysForMonthAndYear( 6 | month, 7 | year, 8 | { locale = undefined } = {} 9 | ) { 10 | const weekdayList = getWeekdayList(locale) 11 | const lastDay = getDaysOfMonthAndYear(month + 1, year) 12 | const dates = range(1, lastDay).map(d => { 13 | return new Date(year, month, d) 14 | }) 15 | 16 | const startIndex = weekdayList.findIndex( 17 | d => d === formatToWeekday(dates[0], locale, {}) 18 | ) 19 | let currIndex = startIndex 20 | let missingStartIndices = range(0, startIndex) 21 | const daysArray = new Array(7 * 6).fill(-1) 22 | 23 | missingStartIndices.forEach((value, index) => { 24 | const d = new Date(dates[0]) 25 | d.setDate(d.getDate() + (index - startIndex)) 26 | daysArray[value] = { 27 | previousMonth: true, 28 | date: d, 29 | } 30 | }) 31 | 32 | dates.forEach((d, i) => { 33 | daysArray[currIndex++] = { 34 | date: d, 35 | } 36 | }) 37 | 38 | let lastIndex = currIndex - 1 39 | daysArray.slice(currIndex).forEach((_, i) => { 40 | const prevItem = daysArray[lastIndex] 41 | const currentDate = new Date(prevItem.date) 42 | currentDate.setDate(currentDate.getDate() + 1) 43 | daysArray[++lastIndex] = { 44 | nextMonth: true, 45 | date: currentDate, 46 | } 47 | }) 48 | 49 | return daysArray.reduce((acc, item, index) => { 50 | const rowIndex = Math.floor(index / 7) 51 | return (acc[rowIndex] || (acc[rowIndex] = [])).push(item), acc 52 | }, []) 53 | } 54 | 55 | export function getMonthAndYearFromDate(date) { 56 | return Intl.DateTimeFormat('en-gb', { 57 | dateStyle: 'medium', 58 | }) 59 | .format(date) 60 | .split(' ') 61 | .slice(1) 62 | .join(' ') 63 | } 64 | 65 | export function range(start, end) { 66 | if (end === undefined || end === null) { 67 | end = start 68 | start = 0 69 | } 70 | return new Array(end).fill(0).map((_, i) => start + i) 71 | } 72 | 73 | export function getWeekdayList(locale, options) { 74 | const arr = new Array(7) 75 | range(7).forEach((_, i) => { 76 | const d = new Date() 77 | d.setDate(d.getDate() + i) 78 | arr[d.getDay()] = formatToWeekday(d, locale, options) 79 | }) 80 | return arr 81 | } 82 | 83 | export function formatToWeekday(date, locale = 'en-gb', options = {}) { 84 | return Intl.DateTimeFormat(locale, { 85 | weekday: options.format || 'short', 86 | }).format(date) 87 | } 88 | 89 | export function formatToReadableDate(date, locale = 'en-gb') { 90 | return Intl.DateTimeFormat(locale).format(date) 91 | } 92 | 93 | export function getDatesInRange(allDates, startDate, endDate) { 94 | return allDates.filter(d => isDateInRange(d, startDate, endDate)) 95 | } 96 | 97 | export function isDateInRange(source, start, end) { 98 | return start.getTime() < source.getTime() && end.getTime() > source.getTime() 99 | } 100 | 101 | export function sortByDate(x, y) { 102 | return x.getTime() > y.getTime() 103 | } 104 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "baseUrl": ".", 5 | "outDir": "dist", 6 | "target": "es2020", 7 | "lib": ["es2020", "DOM"], 8 | "module": "ES2020", 9 | "moduleResolution": "Node", 10 | "forceConsistentCasingInFileNames": true, 11 | "strict": true, 12 | "sourceMap": true, 13 | "allowSyntheticDefaultImports": true, 14 | "skipLibCheck": true, 15 | }, 16 | "include": ["src/**/*"] 17 | } 18 | --------------------------------------------------------------------------------