From 4fcb4312350186ecb8dbe0d4fd15936ba20c9c53 Mon Sep 17 00:00:00 2001 From: Aviv Ben Shahar Date: Fri, 7 Jun 2024 14:44:15 +0300 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20support=20fuzzy-search,=20refactor?= =?UTF-8?q?=20code=20structure=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 600 ++++++++++++++++++++---- package.json | 3 +- src/main/clear-cache.ts | 2 +- src/main/contacts.ts | 36 +- src/main/open-whatsapp.ts | 2 +- src/services/contacts.service.ts | 34 ++ src/services/search-contacts.config.ts | 3 - src/services/search-contacts.service.ts | 50 -- src/services/search.config.ts | 4 + src/services/search.service.ts | 16 + tsconfig.json | 7 +- 11 files changed, 596 insertions(+), 161 deletions(-) create mode 100644 src/services/contacts.service.ts delete mode 100644 src/services/search-contacts.config.ts delete mode 100644 src/services/search-contacts.service.ts create mode 100644 src/services/search.config.ts create mode 100644 src/services/search.service.ts diff --git a/package-lock.json b/package-lock.json index d92c954..0361f82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,11 @@ "packages": { "": { "name": "alfred-open-whatsapp", - "version": "1.2.4", + "version": "2.0.3", "license": "MIT", "dependencies": { "fast-alfred": "^1.3.3", + "fuse.js": "^7.0.0", "libphonenumber-js": "^1.11.2", "node-mac-contacts": "^1.7.2" }, @@ -5408,6 +5409,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==", + "engines": { + "node": ">=10" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -7770,6 +7779,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7786,6 +7796,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -7797,11 +7808,13 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7818,6 +7831,7 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -7832,11 +7846,13 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { "version": "2.2.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7852,6 +7868,7 @@ }, "node_modules/npm/node_modules/@npmcli/arborist": { "version": "7.5.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7900,6 +7917,7 @@ }, "node_modules/npm/node_modules/@npmcli/config": { "version": "8.3.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7918,6 +7936,7 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7929,6 +7948,7 @@ }, "node_modules/npm/node_modules/@npmcli/git": { "version": "5.0.7", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7947,6 +7967,7 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7962,6 +7983,7 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7976,6 +7998,7 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -7991,6 +8014,7 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -7999,6 +8023,7 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8007,6 +8032,7 @@ }, "node_modules/npm/node_modules/@npmcli/package-json": { "version": "5.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8024,6 +8050,7 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8035,6 +8062,7 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8046,6 +8074,7 @@ }, "node_modules/npm/node_modules/@npmcli/redact": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8054,6 +8083,7 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8070,6 +8100,7 @@ }, "node_modules/npm/node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -8079,6 +8110,7 @@ }, "node_modules/npm/node_modules/@sigstore/bundle": { "version": "2.3.2", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8090,6 +8122,7 @@ }, "node_modules/npm/node_modules/@sigstore/core": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -8098,6 +8131,7 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.3.2", + "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { @@ -8106,6 +8140,7 @@ }, "node_modules/npm/node_modules/@sigstore/sign": { "version": "2.3.2", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8122,6 +8157,7 @@ }, "node_modules/npm/node_modules/@sigstore/tuf": { "version": "2.3.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8134,6 +8170,7 @@ }, "node_modules/npm/node_modules/@sigstore/verify": { "version": "1.2.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -8147,6 +8184,7 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8155,6 +8193,7 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8167,6 +8206,7 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8175,6 +8215,7 @@ }, "node_modules/npm/node_modules/agent-base": { "version": "7.1.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8186,6 +8227,7 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8198,6 +8240,7 @@ }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8206,6 +8249,7 @@ }, "node_modules/npm/node_modules/ansi-styles": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8217,21 +8261,25 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8246,6 +8294,7 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8257,6 +8306,7 @@ }, "node_modules/npm/node_modules/brace-expansion": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8265,6 +8315,7 @@ }, "node_modules/npm/node_modules/cacache": { "version": "18.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8287,6 +8338,7 @@ }, "node_modules/npm/node_modules/chalk": { "version": "5.3.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8298,6 +8350,7 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8306,6 +8359,7 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "4.0.0", + "dev": true, "funding": [ { "type": "github", @@ -8320,6 +8374,7 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8331,6 +8386,7 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8339,6 +8395,7 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8351,6 +8408,7 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8359,6 +8417,7 @@ }, "node_modules/npm/node_modules/color-convert": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8370,16 +8429,19 @@ }, "node_modules/npm/node_modules/color-name": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/cross-spawn": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8393,6 +8455,7 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8407,6 +8470,7 @@ }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -8418,6 +8482,7 @@ }, "node_modules/npm/node_modules/debug": { "version": "4.3.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8434,11 +8499,13 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/diff": { "version": "5.2.0", + "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -8447,16 +8514,19 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -8466,6 +8536,7 @@ }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8474,16 +8545,19 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "Apache-2.0" }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8492,6 +8566,7 @@ }, "node_modules/npm/node_modules/foreground-child": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8507,6 +8582,7 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8518,6 +8594,7 @@ }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.2", + "dev": true, "inBundle": true, "license": "MIT", "funding": { @@ -8526,6 +8603,7 @@ }, "node_modules/npm/node_modules/glob": { "version": "10.4.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8547,11 +8625,13 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hasown": { "version": "2.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8563,6 +8643,7 @@ }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8574,11 +8655,13 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { "version": "7.0.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8591,6 +8674,7 @@ }, "node_modules/npm/node_modules/https-proxy-agent": { "version": "7.0.4", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8603,6 +8687,7 @@ }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -8615,6 +8700,7 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8626,6 +8712,7 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8634,6 +8721,7 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8642,6 +8730,7 @@ }, "node_modules/npm/node_modules/ini": { "version": "4.1.3", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8650,6 +8739,7 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8667,6 +8757,7 @@ }, "node_modules/npm/node_modules/ip-address": { "version": "9.0.5", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8679,6 +8770,7 @@ }, "node_modules/npm/node_modules/ip-regex": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8690,6 +8782,7 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "5.1.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -8701,6 +8794,7 @@ }, "node_modules/npm/node_modules/is-core-module": { "version": "2.13.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -8712,6 +8806,7 @@ }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8720,16 +8815,19 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { "version": "3.1.2", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -8747,11 +8845,13 @@ }, "node_modules/npm/node_modules/jsbn": { "version": "1.1.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -8760,6 +8860,7 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -8768,6 +8869,7 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", + "dev": true, "engines": [ "node >= 0.2.0" ], @@ -8776,16 +8878,19 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "8.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8798,6 +8903,7 @@ }, "node_modules/npm/node_modules/libnpmdiff": { "version": "6.1.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8816,6 +8922,7 @@ }, "node_modules/npm/node_modules/libnpmexec": { "version": "8.1.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8836,6 +8943,7 @@ }, "node_modules/npm/node_modules/libnpmfund": { "version": "5.0.11", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8847,6 +8955,7 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "10.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8859,6 +8968,7 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "6.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8871,6 +8981,7 @@ }, "node_modules/npm/node_modules/libnpmpack": { "version": "7.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8885,6 +8996,7 @@ }, "node_modules/npm/node_modules/libnpmpublish": { "version": "9.0.9", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8903,6 +9015,7 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "7.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8914,6 +9027,7 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "6.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8926,6 +9040,7 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "6.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8941,6 +9056,7 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "10.2.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8949,6 +9065,7 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "13.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8971,6 +9088,7 @@ }, "node_modules/npm/node_modules/minimatch": { "version": "9.0.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -8985,6 +9103,7 @@ }, "node_modules/npm/node_modules/minipass": { "version": "7.1.2", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -8993,6 +9112,7 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9004,6 +9124,7 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.5", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9020,6 +9141,7 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9031,6 +9153,7 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9042,6 +9165,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9051,6 +9175,7 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9062,6 +9187,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9073,6 +9199,7 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9084,6 +9211,7 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9095,6 +9223,7 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9106,6 +9235,7 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9118,6 +9248,7 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9129,6 +9260,7 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", + "dev": true, "inBundle": true, "license": "MIT", "bin": { @@ -9140,11 +9272,13 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9153,6 +9287,7 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9161,6 +9296,7 @@ }, "node_modules/npm/node_modules/node-gyp": { "version": "10.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9184,6 +9320,7 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9192,6 +9329,7 @@ }, "node_modules/npm/node_modules/nopt": { "version": "7.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9206,6 +9344,7 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -9220,6 +9359,7 @@ }, "node_modules/npm/node_modules/npm-audit-report": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9228,6 +9368,7 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9239,6 +9380,7 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.3.0", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -9250,6 +9392,7 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9258,6 +9401,7 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "11.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9272,6 +9416,7 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "8.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9283,6 +9428,7 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "9.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9297,6 +9443,7 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "10.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9309,6 +9456,7 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "17.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9327,6 +9475,7 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { @@ -9335,6 +9484,7 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9349,6 +9499,7 @@ }, "node_modules/npm/node_modules/pacote": { "version": "18.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9379,6 +9530,7 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9392,6 +9544,7 @@ }, "node_modules/npm/node_modules/path-key": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9400,6 +9553,7 @@ }, "node_modules/npm/node_modules/path-scurry": { "version": "1.11.1", + "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -9415,6 +9569,7 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9427,6 +9582,7 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9435,6 +9591,7 @@ }, "node_modules/npm/node_modules/proggy": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9443,6 +9600,7 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -9451,6 +9609,7 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "funding": { @@ -9459,11 +9618,13 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9476,6 +9637,7 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9487,6 +9649,7 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", + "dev": true, "inBundle": true, "bin": { "qrcode-terminal": "bin/qrcode-terminal.js" @@ -9494,6 +9657,7 @@ }, "node_modules/npm/node_modules/read": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9505,6 +9669,7 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9513,6 +9678,7 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9525,6 +9691,7 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9533,12 +9700,14 @@ }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", + "dev": true, "inBundle": true, "license": "MIT", "optional": true }, "node_modules/npm/node_modules/semver": { "version": "7.6.2", + "dev": true, "inBundle": true, "license": "ISC", "bin": { @@ -9550,6 +9719,7 @@ }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9561,6 +9731,7 @@ }, "node_modules/npm/node_modules/shebang-regex": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9569,6 +9740,7 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.1.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9580,6 +9752,7 @@ }, "node_modules/npm/node_modules/sigstore": { "version": "2.3.1", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -9596,6 +9769,7 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9605,6 +9779,7 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.8.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9618,6 +9793,7 @@ }, "node_modules/npm/node_modules/socks-proxy-agent": { "version": "8.0.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9631,6 +9807,7 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -9640,6 +9817,7 @@ }, "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9649,11 +9827,13 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.5.0", + "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9663,16 +9843,19 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.18", + "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/sprintf-js": { "version": "1.1.3", + "dev": true, "inBundle": true, "license": "BSD-3-Clause" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9684,6 +9867,7 @@ }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9698,6 +9882,7 @@ "node_modules/npm/node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9711,6 +9896,7 @@ }, "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9723,6 +9909,7 @@ "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9734,6 +9921,7 @@ }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9745,6 +9933,7 @@ }, "node_modules/npm/node_modules/tar": { "version": "6.2.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9761,6 +9950,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9772,6 +9962,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9783,6 +9974,7 @@ }, "node_modules/npm/node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9791,16 +9983,19 @@ }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9809,6 +10004,7 @@ }, "node_modules/npm/node_modules/tuf-js": { "version": "2.2.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9822,6 +10018,7 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9833,6 +10030,7 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9844,11 +10042,13 @@ }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", + "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { @@ -9858,6 +10058,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9867,6 +10068,7 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9875,11 +10077,13 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", + "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/which": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -9894,6 +10098,7 @@ }, "node_modules/npm/node_modules/which/node_modules/isexe": { "version": "3.1.1", + "dev": true, "inBundle": true, "license": "ISC", "engines": { @@ -9902,6 +10107,7 @@ }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9919,6 +10125,7 @@ "node_modules/npm/node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9935,6 +10142,7 @@ }, "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9949,6 +10157,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", + "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -9960,11 +10169,13 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", + "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9981,6 +10192,7 @@ }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "dev": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -9995,6 +10207,7 @@ }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", + "dev": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10007,6 +10220,7 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", + "dev": true, "inBundle": true, "license": "ISC" }, @@ -16356,6 +16570,11 @@ "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true }, + "fuse.js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz", + "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -17994,6 +18213,7 @@ "@isaacs/cliui": { "version": "8.0.2", "bundled": true, + "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -18005,15 +18225,18 @@ "dependencies": { "ansi-regex": { "version": "6.0.1", - "bundled": true + "bundled": true, + "dev": true }, "emoji-regex": { "version": "9.2.2", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "5.1.2", "bundled": true, + "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -18023,6 +18246,7 @@ "strip-ansi": { "version": "7.1.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -18031,11 +18255,13 @@ }, "@isaacs/string-locale-compare": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "@npmcli/agent": { "version": "2.2.2", "bundled": true, + "dev": true, "requires": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -18047,6 +18273,7 @@ "@npmcli/arborist": { "version": "7.5.3", "bundled": true, + "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^3.1.1", @@ -18088,6 +18315,7 @@ "@npmcli/config": { "version": "8.3.3", "bundled": true, + "dev": true, "requires": { "@npmcli/map-workspaces": "^3.0.2", "ci-info": "^4.0.0", @@ -18102,6 +18330,7 @@ "@npmcli/fs": { "version": "3.1.1", "bundled": true, + "dev": true, "requires": { "semver": "^7.3.5" } @@ -18109,6 +18338,7 @@ "@npmcli/git": { "version": "5.0.7", "bundled": true, + "dev": true, "requires": { "@npmcli/promise-spawn": "^7.0.0", "lru-cache": "^10.0.1", @@ -18123,6 +18353,7 @@ "@npmcli/installed-package-contents": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -18131,6 +18362,7 @@ "@npmcli/map-workspaces": { "version": "3.0.6", "bundled": true, + "dev": true, "requires": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", @@ -18141,6 +18373,7 @@ "@npmcli/metavuln-calculator": { "version": "7.1.1", "bundled": true, + "dev": true, "requires": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", @@ -18151,15 +18384,18 @@ }, "@npmcli/name-from-folder": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "@npmcli/node-gyp": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "@npmcli/package-json": { "version": "5.1.1", "bundled": true, + "dev": true, "requires": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -18173,6 +18409,7 @@ "@npmcli/promise-spawn": { "version": "7.0.2", "bundled": true, + "dev": true, "requires": { "which": "^4.0.0" } @@ -18180,17 +18417,20 @@ "@npmcli/query": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "postcss-selector-parser": "^6.0.10" } }, "@npmcli/redact": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "@npmcli/run-script": { "version": "8.1.0", "bundled": true, + "dev": true, "requires": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", @@ -18203,26 +18443,31 @@ "@pkgjs/parseargs": { "version": "0.11.0", "bundled": true, + "dev": true, "optional": true }, "@sigstore/bundle": { "version": "2.3.2", "bundled": true, + "dev": true, "requires": { "@sigstore/protobuf-specs": "^0.3.2" } }, "@sigstore/core": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "@sigstore/protobuf-specs": { "version": "0.3.2", - "bundled": true + "bundled": true, + "dev": true }, "@sigstore/sign": { "version": "2.3.2", "bundled": true, + "dev": true, "requires": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -18235,6 +18480,7 @@ "@sigstore/tuf": { "version": "2.3.4", "bundled": true, + "dev": true, "requires": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^2.2.1" @@ -18243,6 +18489,7 @@ "@sigstore/verify": { "version": "1.2.1", "bundled": true, + "dev": true, "requires": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.1.0", @@ -18251,11 +18498,13 @@ }, "@tufjs/canonical-json": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "@tufjs/models": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.4" @@ -18263,11 +18512,13 @@ }, "abbrev": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "agent-base": { "version": "7.1.1", "bundled": true, + "dev": true, "requires": { "debug": "^4.3.4" } @@ -18275,6 +18526,7 @@ "aggregate-error": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -18282,27 +18534,33 @@ }, "ansi-regex": { "version": "5.0.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-styles": { "version": "6.2.1", - "bundled": true + "bundled": true, + "dev": true }, "aproba": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "archy": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "balanced-match": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "bin-links": { "version": "4.0.4", "bundled": true, + "dev": true, "requires": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -18312,11 +18570,13 @@ }, "binary-extensions": { "version": "2.3.0", - "bundled": true + "bundled": true, + "dev": true }, "brace-expansion": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0" } @@ -18324,6 +18584,7 @@ "cacache": { "version": "18.0.3", "bundled": true, + "dev": true, "requires": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -18341,30 +18602,36 @@ }, "chalk": { "version": "5.3.0", - "bundled": true + "bundled": true, + "dev": true }, "chownr": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "ci-info": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "cidr-regex": { "version": "4.1.1", "bundled": true, + "dev": true, "requires": { "ip-regex": "^5.0.0" } }, "clean-stack": { "version": "2.2.0", - "bundled": true + "bundled": true, + "dev": true }, "cli-columns": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "string-width": "^4.2.3", "strip-ansi": "^6.0.1" @@ -18372,26 +18639,31 @@ }, "cmd-shim": { "version": "6.0.3", - "bundled": true + "bundled": true, + "dev": true }, "color-convert": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", - "bundled": true + "bundled": true, + "dev": true }, "common-ancestor-path": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "cross-spawn": { "version": "7.0.3", "bundled": true, + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -18401,6 +18673,7 @@ "which": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -18409,36 +18682,43 @@ }, "cssesc": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "debug": { "version": "4.3.4", "bundled": true, + "dev": true, "requires": { "ms": "2.1.2" }, "dependencies": { "ms": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true } } }, "diff": { "version": "5.2.0", - "bundled": true + "bundled": true, + "dev": true }, "eastasianwidth": { "version": "0.2.0", - "bundled": true + "bundled": true, + "dev": true }, "emoji-regex": { "version": "8.0.0", - "bundled": true + "bundled": true, + "dev": true }, "encoding": { "version": "0.1.13", "bundled": true, + "dev": true, "optional": true, "requires": { "iconv-lite": "^0.6.2" @@ -18446,23 +18726,28 @@ }, "env-paths": { "version": "2.2.1", - "bundled": true + "bundled": true, + "dev": true }, "err-code": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "exponential-backoff": { "version": "3.1.1", - "bundled": true + "bundled": true, + "dev": true }, "fastest-levenshtein": { "version": "1.0.16", - "bundled": true + "bundled": true, + "dev": true }, "foreground-child": { "version": "3.1.1", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -18471,17 +18756,20 @@ "fs-minipass": { "version": "3.0.3", "bundled": true, + "dev": true, "requires": { "minipass": "^7.0.3" } }, "function-bind": { "version": "1.1.2", - "bundled": true + "bundled": true, + "dev": true }, "glob": { "version": "10.4.1", "bundled": true, + "dev": true, "requires": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -18492,11 +18780,13 @@ }, "graceful-fs": { "version": "4.2.11", - "bundled": true + "bundled": true, + "dev": true }, "hasown": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "function-bind": "^1.1.2" } @@ -18504,17 +18794,20 @@ "hosted-git-info": { "version": "7.0.2", "bundled": true, + "dev": true, "requires": { "lru-cache": "^10.0.1" } }, "http-cache-semantics": { "version": "4.1.1", - "bundled": true + "bundled": true, + "dev": true }, "http-proxy-agent": { "version": "7.0.2", "bundled": true, + "dev": true, "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -18523,6 +18816,7 @@ "https-proxy-agent": { "version": "7.0.4", "bundled": true, + "dev": true, "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -18531,6 +18825,7 @@ "iconv-lite": { "version": "0.6.3", "bundled": true, + "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -18539,25 +18834,30 @@ "ignore-walk": { "version": "6.0.5", "bundled": true, + "dev": true, "requires": { "minimatch": "^9.0.0" } }, "imurmurhash": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "indent-string": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "ini": { "version": "4.1.3", - "bundled": true + "bundled": true, + "dev": true }, "init-package-json": { "version": "6.0.3", "bundled": true, + "dev": true, "requires": { "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", @@ -18571,6 +18871,7 @@ "ip-address": { "version": "9.0.5", "bundled": true, + "dev": true, "requires": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -18578,11 +18879,13 @@ }, "ip-regex": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-cidr": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "cidr-regex": "^4.1.1" } @@ -18590,25 +18893,30 @@ "is-core-module": { "version": "2.13.1", "bundled": true, + "dev": true, "requires": { "hasown": "^2.0.0" } }, "is-fullwidth-code-point": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-lambda": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "jackspeak": { "version": "3.1.2", "bundled": true, + "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -18616,31 +18924,38 @@ }, "jsbn": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "json-parse-even-better-errors": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "json-stringify-nice": { "version": "1.1.4", - "bundled": true + "bundled": true, + "dev": true }, "jsonparse": { "version": "1.3.1", - "bundled": true + "bundled": true, + "dev": true }, "just-diff": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true }, "just-diff-apply": { "version": "5.5.0", - "bundled": true + "bundled": true, + "dev": true }, "libnpmaccess": { "version": "8.0.6", "bundled": true, + "dev": true, "requires": { "npm-package-arg": "^11.0.2", "npm-registry-fetch": "^17.0.1" @@ -18649,6 +18964,7 @@ "libnpmdiff": { "version": "6.1.3", "bundled": true, + "dev": true, "requires": { "@npmcli/arborist": "^7.5.3", "@npmcli/installed-package-contents": "^2.1.0", @@ -18663,6 +18979,7 @@ "libnpmexec": { "version": "8.1.2", "bundled": true, + "dev": true, "requires": { "@npmcli/arborist": "^7.5.3", "@npmcli/run-script": "^8.1.0", @@ -18679,6 +18996,7 @@ "libnpmfund": { "version": "5.0.11", "bundled": true, + "dev": true, "requires": { "@npmcli/arborist": "^7.5.3" } @@ -18686,6 +19004,7 @@ "libnpmhook": { "version": "10.0.5", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "npm-registry-fetch": "^17.0.1" @@ -18694,6 +19013,7 @@ "libnpmorg": { "version": "6.0.6", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "npm-registry-fetch": "^17.0.1" @@ -18702,6 +19022,7 @@ "libnpmpack": { "version": "7.0.3", "bundled": true, + "dev": true, "requires": { "@npmcli/arborist": "^7.5.3", "@npmcli/run-script": "^8.1.0", @@ -18712,6 +19033,7 @@ "libnpmpublish": { "version": "9.0.9", "bundled": true, + "dev": true, "requires": { "ci-info": "^4.0.0", "normalize-package-data": "^6.0.1", @@ -18726,6 +19048,7 @@ "libnpmsearch": { "version": "7.0.6", "bundled": true, + "dev": true, "requires": { "npm-registry-fetch": "^17.0.1" } @@ -18733,6 +19056,7 @@ "libnpmteam": { "version": "6.0.5", "bundled": true, + "dev": true, "requires": { "aproba": "^2.0.0", "npm-registry-fetch": "^17.0.1" @@ -18741,6 +19065,7 @@ "libnpmversion": { "version": "6.0.3", "bundled": true, + "dev": true, "requires": { "@npmcli/git": "^5.0.7", "@npmcli/run-script": "^8.1.0", @@ -18751,11 +19076,13 @@ }, "lru-cache": { "version": "10.2.2", - "bundled": true + "bundled": true, + "dev": true }, "make-fetch-happen": { "version": "13.0.1", "bundled": true, + "dev": true, "requires": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -18774,17 +19101,20 @@ "minimatch": { "version": "9.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { "version": "7.1.2", - "bundled": true + "bundled": true, + "dev": true }, "minipass-collect": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "minipass": "^7.0.3" } @@ -18792,6 +19122,7 @@ "minipass-fetch": { "version": "3.0.5", "bundled": true, + "dev": true, "requires": { "encoding": "^0.1.13", "minipass": "^7.0.3", @@ -18802,6 +19133,7 @@ "minipass-flush": { "version": "1.0.5", "bundled": true, + "dev": true, "requires": { "minipass": "^3.0.0" }, @@ -18809,6 +19141,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18818,6 +19151,7 @@ "minipass-json-stream": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -18826,6 +19160,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18835,6 +19170,7 @@ "minipass-pipeline": { "version": "1.2.4", "bundled": true, + "dev": true, "requires": { "minipass": "^3.0.0" }, @@ -18842,6 +19178,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18851,6 +19188,7 @@ "minipass-sized": { "version": "1.0.3", "bundled": true, + "dev": true, "requires": { "minipass": "^3.0.0" }, @@ -18858,6 +19196,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18867,6 +19206,7 @@ "minizlib": { "version": "2.1.2", "bundled": true, + "dev": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -18875,6 +19215,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -18883,23 +19224,28 @@ }, "mkdirp": { "version": "1.0.4", - "bundled": true + "bundled": true, + "dev": true }, "ms": { "version": "2.1.3", - "bundled": true + "bundled": true, + "dev": true }, "mute-stream": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "negotiator": { "version": "0.6.3", - "bundled": true + "bundled": true, + "dev": true }, "node-gyp": { "version": "10.1.0", "bundled": true, + "dev": true, "requires": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -18915,13 +19261,15 @@ "dependencies": { "proc-log": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "nopt": { "version": "7.2.1", "bundled": true, + "dev": true, "requires": { "abbrev": "^2.0.0" } @@ -18929,6 +19277,7 @@ "normalize-package-data": { "version": "6.0.1", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^7.0.0", "is-core-module": "^2.8.1", @@ -18938,11 +19287,13 @@ }, "npm-audit-report": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "npm-bundled": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "npm-normalize-package-bin": "^3.0.0" } @@ -18950,17 +19301,20 @@ "npm-install-checks": { "version": "6.3.0", "bundled": true, + "dev": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "npm-package-arg": { "version": "11.0.2", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -18971,6 +19325,7 @@ "npm-packlist": { "version": "8.0.2", "bundled": true, + "dev": true, "requires": { "ignore-walk": "^6.0.4" } @@ -18978,6 +19333,7 @@ "npm-pick-manifest": { "version": "9.0.1", "bundled": true, + "dev": true, "requires": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -18988,6 +19344,7 @@ "npm-profile": { "version": "10.0.0", "bundled": true, + "dev": true, "requires": { "npm-registry-fetch": "^17.0.1", "proc-log": "^4.0.0" @@ -18996,6 +19353,7 @@ "npm-registry-fetch": { "version": "17.0.1", "bundled": true, + "dev": true, "requires": { "@npmcli/redact": "^2.0.0", "make-fetch-happen": "^13.0.0", @@ -19009,11 +19367,13 @@ }, "npm-user-validate": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "p-map": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -19021,6 +19381,7 @@ "pacote": { "version": "18.0.6", "bundled": true, + "dev": true, "requires": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -19044,6 +19405,7 @@ "parse-conflict-json": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^6.0.0", @@ -19052,11 +19414,13 @@ }, "path-key": { "version": "3.1.1", - "bundled": true + "bundled": true, + "dev": true }, "path-scurry": { "version": "1.11.1", "bundled": true, + "dev": true, "requires": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -19065,6 +19429,7 @@ "postcss-selector-parser": { "version": "6.1.0", "bundled": true, + "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19072,27 +19437,33 @@ }, "proc-log": { "version": "4.2.0", - "bundled": true + "bundled": true, + "dev": true }, "proggy": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "promise-all-reject-late": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "promise-call-limit": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "promise-inflight": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "promise-retry": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -19101,28 +19472,33 @@ "promzard": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "read": "^3.0.1" } }, "qrcode-terminal": { "version": "0.12.0", - "bundled": true + "bundled": true, + "dev": true }, "read": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "mute-stream": "^1.0.0" } }, "read-cmd-shim": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "read-package-json-fast": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -19130,35 +19506,42 @@ }, "retry": { "version": "0.12.0", - "bundled": true + "bundled": true, + "dev": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, + "dev": true, "optional": true }, "semver": { "version": "7.6.2", - "bundled": true + "bundled": true, + "dev": true }, "shebang-command": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "signal-exit": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "sigstore": { "version": "2.3.1", "bundled": true, + "dev": true, "requires": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -19170,11 +19553,13 @@ }, "smart-buffer": { "version": "4.2.0", - "bundled": true + "bundled": true, + "dev": true }, "socks": { "version": "2.8.3", "bundled": true, + "dev": true, "requires": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -19183,6 +19568,7 @@ "socks-proxy-agent": { "version": "8.0.3", "bundled": true, + "dev": true, "requires": { "agent-base": "^7.1.1", "debug": "^4.3.4", @@ -19192,6 +19578,7 @@ "spdx-correct": { "version": "3.2.0", "bundled": true, + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -19200,6 +19587,7 @@ "spdx-expression-parse": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -19209,11 +19597,13 @@ }, "spdx-exceptions": { "version": "2.5.0", - "bundled": true + "bundled": true, + "dev": true }, "spdx-expression-parse": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -19221,15 +19611,18 @@ }, "spdx-license-ids": { "version": "3.0.18", - "bundled": true + "bundled": true, + "dev": true }, "sprintf-js": { "version": "1.1.3", - "bundled": true + "bundled": true, + "dev": true }, "ssri": { "version": "10.0.6", "bundled": true, + "dev": true, "requires": { "minipass": "^7.0.3" } @@ -19237,6 +19630,7 @@ "string-width": { "version": "4.2.3", "bundled": true, + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19246,6 +19640,7 @@ "string-width-cjs": { "version": "npm:string-width@4.2.3", "bundled": true, + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19255,6 +19650,7 @@ "strip-ansi": { "version": "6.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -19262,17 +19658,20 @@ "strip-ansi-cjs": { "version": "npm:strip-ansi@6.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "supports-color": { "version": "9.4.0", - "bundled": true + "bundled": true, + "dev": true }, "tar": { "version": "6.2.1", "bundled": true, + "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -19285,6 +19684,7 @@ "fs-minipass": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "minipass": "^3.0.0" }, @@ -19292,6 +19692,7 @@ "minipass": { "version": "3.3.6", "bundled": true, + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -19300,25 +19701,30 @@ }, "minipass": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "text-table": { "version": "0.2.0", - "bundled": true + "bundled": true, + "dev": true }, "tiny-relative-date": { "version": "1.3.0", - "bundled": true + "bundled": true, + "dev": true }, "treeverse": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "tuf-js": { "version": "2.2.1", "bundled": true, + "dev": true, "requires": { "@tufjs/models": "2.0.1", "debug": "^4.3.4", @@ -19328,6 +19734,7 @@ "unique-filename": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "unique-slug": "^4.0.0" } @@ -19335,17 +19742,20 @@ "unique-slug": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -19354,6 +19764,7 @@ "spdx-expression-parse": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -19363,28 +19774,33 @@ }, "validate-npm-package-name": { "version": "5.0.1", - "bundled": true + "bundled": true, + "dev": true }, "walk-up-path": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "which": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "isexe": "^3.1.1" }, "dependencies": { "isexe": { "version": "3.1.1", - "bundled": true + "bundled": true, + "dev": true } } }, "wrap-ansi": { "version": "8.1.0", "bundled": true, + "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -19393,15 +19809,18 @@ "dependencies": { "ansi-regex": { "version": "6.0.1", - "bundled": true + "bundled": true, + "dev": true }, "emoji-regex": { "version": "9.2.2", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "5.1.2", "bundled": true, + "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -19411,6 +19830,7 @@ "strip-ansi": { "version": "7.1.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -19420,6 +19840,7 @@ "wrap-ansi-cjs": { "version": "npm:wrap-ansi@7.0.0", "bundled": true, + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19429,6 +19850,7 @@ "ansi-styles": { "version": "4.3.0", "bundled": true, + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -19438,6 +19860,7 @@ "write-file-atomic": { "version": "5.0.1", "bundled": true, + "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -19445,7 +19868,8 @@ }, "yallist": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, @@ -21302,4 +21726,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 9ebe399..43e6847 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "fast-alfred": "^1.3.3", + "fuse.js": "^7.0.0", "libphonenumber-js": "^1.11.2", "node-mac-contacts": "^1.7.2" }, @@ -81,4 +82,4 @@ "publishConfig": { "registry": "https://registry.npmjs.org/" } -} \ No newline at end of file +} diff --git a/src/main/clear-cache.ts b/src/main/clear-cache.ts index 7ef1629..262caea 100644 --- a/src/main/clear-cache.ts +++ b/src/main/clear-cache.ts @@ -1,5 +1,5 @@ import { FastAlfred } from 'fast-alfred' -import { CACHE_CONTACTS_KEY } from '../common/constants.js' +import { CACHE_CONTACTS_KEY } from '@common/constants.js' ;(() => { const alfredClient = new FastAlfred() diff --git a/src/main/contacts.ts b/src/main/contacts.ts index f3a54c4..1a00655 100644 --- a/src/main/contacts.ts +++ b/src/main/contacts.ts @@ -1,16 +1,16 @@ import type { AlfredScriptFilter } from 'fast-alfred' import { FastAlfred } from 'fast-alfred' import type { CountryCode } from 'libphonenumber-js' -import { DEFAULT_MAX_RESULTS_COUNT } from '../common/constants.js' -import { Variables } from '../common/variables.js' -import type { ContactPayload } from '../models/contact-payload.model.js' -import type { IContact } from '../models/contact.model.js' -import { searchContacts } from '../services/search-contacts.service.js' +import { DEFAULT_MAX_RESULTS_COUNT } from '@common/constants.js' +import { Variables } from '@common/variables.js' +import type { ContactPayload } from '@models/contact-payload.model.js' +import type { IContact } from '@models/contact.model.js' +import { getContacts } from '@services/contacts.service.js' +import { searchContacts } from '@services/search.service.js' ;(() => { const alfredClient = new FastAlfred() - const data: IContact[] = searchContacts(alfredClient) const countryCode: CountryCode = alfredClient.env.getEnv(Variables.COUNTRY_CODE, { defaultValue: 'US', }) @@ -20,17 +20,21 @@ import { searchContacts } from '../services/search-contacts.service.js' parser: Number, }) - const items: AlfredScriptFilter['items'] = data.map(({ firstName, lastName, phoneNumbers }: IContact) => { - const payload: ContactPayload = { phoneNumber: phoneNumbers[0], countryCode } + const contacts: IContact[] = getContacts(alfredClient) - return { - title: `${firstName} ${lastName}`, - subtitle: `Phone: ${phoneNumbers[0]}`, - arg: JSON.stringify(payload), - } - }) + const filteredContacts = searchContacts(contacts, alfredClient.input, sliceAmount) + + const items: AlfredScriptFilter['items'] = filteredContacts.map( + ({ firstName, lastName, phoneNumbers }: IContact) => { + const payload: ContactPayload = { phoneNumber: phoneNumbers[0], countryCode } - const sliced = items.slice(0, sliceAmount) + return { + title: `${firstName} ${lastName}`, + subtitle: `Phone: ${phoneNumbers[0]}`, + arg: JSON.stringify(payload), + } + }, + ) - alfredClient.output({ items: sliced }) + alfredClient.output({ items }) })() diff --git a/src/main/open-whatsapp.ts b/src/main/open-whatsapp.ts index c859462..25ab3d4 100644 --- a/src/main/open-whatsapp.ts +++ b/src/main/open-whatsapp.ts @@ -3,7 +3,7 @@ import type { PhoneNumber } from 'libphonenumber-js' import { parsePhoneNumber } from 'libphonenumber-js' import { exec } from 'node:child_process' import { promisify } from 'node:util' -import type { ContactPayload } from '../models/contact-payload.model.js' +import type { ContactPayload } from '@models/contact-payload.model.js' const execPrm = promisify(exec) diff --git a/src/services/contacts.service.ts b/src/services/contacts.service.ts new file mode 100644 index 0000000..9522311 --- /dev/null +++ b/src/services/contacts.service.ts @@ -0,0 +1,34 @@ +import type { FastAlfred } from 'fast-alfred' +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-expect-error +import contacts from 'node-mac-contacts' +import { CACHE_CONTACTS_KEY, CACHE_TTL } from '@common/constants.js' +import { AuthStatus } from '@models/auth-status.enum.js' +import type { IContact } from '@models/contact.model.js' + +export function isAuth(): boolean { + const status: AuthStatus = contacts.getAuthStatus() + return status === AuthStatus.Authorized +} + +export function requestAuth(): void { + contacts.requestAccess() +} + +export function getContacts(alfredClient: FastAlfred): IContact[] { + const isHasAccess: boolean = isAuth() + if (!isHasAccess) { + requestAuth() + return [] + } + + const cacheContacts: IContact[] = alfredClient.cache.get(CACHE_CONTACTS_KEY) ?? contacts.getAllContacts() + if (cacheContacts) { + return cacheContacts + } + + const fetchedContacts = contacts.getAllContacts() + alfredClient.cache.setWithTTL(CACHE_CONTACTS_KEY, fetchedContacts, { maxAge: CACHE_TTL }) + + return fetchedContacts +} diff --git a/src/services/search-contacts.config.ts b/src/services/search-contacts.config.ts deleted file mode 100644 index 80b1d83..0000000 --- a/src/services/search-contacts.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { IContact } from '../models/contact.model.js' - -export const SEARCH_FIELDS_CONFIG: (keyof IContact)[] = ['firstName', 'lastName', 'phoneNumbers'] diff --git a/src/services/search-contacts.service.ts b/src/services/search-contacts.service.ts deleted file mode 100644 index 4a35edd..0000000 --- a/src/services/search-contacts.service.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { FastAlfred } from 'fast-alfred' -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-expect-error -import contacts from 'node-mac-contacts' -import { CACHE_CONTACTS_KEY, CACHE_TTL } from '../common/constants.js' -import { AuthStatus } from '../models/auth-status.enum.js' -import type { IContact } from '../models/contact.model.js' -import { SEARCH_FIELDS_CONFIG } from './search-contacts.config.js' - -export function isAuth(): boolean { - const status: AuthStatus = contacts.getAuthStatus() - return status === AuthStatus.Authorized -} - -export function requestAuth(): void { - contacts.requestAccess() -} - -export function searchContacts(alfredClient: FastAlfred): IContact[] { - const isHasAccess: boolean = isAuth() - if (!isHasAccess) { - requestAuth() - return [] - } - - const lookFor = alfredClient.input.toLowerCase() - - // when in debug mode - always fetch contacts from the system - const allContacts: IContact[] = alfredClient.alfredInfo.isDebug() - ? contacts.getAllContacts() - : alfredClient.cache.get(CACHE_CONTACTS_KEY) ?? contacts.getAllContacts() - - alfredClient.cache.setWithTTL(CACHE_CONTACTS_KEY, allContacts, { maxAge: CACHE_TTL }) - - const res = allContacts.filter((contact) => { - const isMatchSome: boolean = SEARCH_FIELDS_CONFIG.some((fieldKey) => { - const field = contact[fieldKey] - if (typeof field === 'string') { - return field.toLowerCase().includes(lookFor) - } - if (Array.isArray(field)) { - return field.some((item) => item.toLowerCase().includes(lookFor)) - } - }) - - return isMatchSome - }) - - return res -} diff --git a/src/services/search.config.ts b/src/services/search.config.ts new file mode 100644 index 0000000..dafe749 --- /dev/null +++ b/src/services/search.config.ts @@ -0,0 +1,4 @@ +import type { IContact } from '@models/contact.model.js' + +type SearchField = keyof IContact +export const SEARCH_FIELDS_CONFIG: SearchField[] = ['firstName', 'lastName', 'phoneNumbers'] diff --git a/src/services/search.service.ts b/src/services/search.service.ts new file mode 100644 index 0000000..2c0cc58 --- /dev/null +++ b/src/services/search.service.ts @@ -0,0 +1,16 @@ +import Fuse from 'fuse.js' +import type { IContact } from '@models/contact.model.js' +import { SEARCH_FIELDS_CONFIG } from './search.config.js' + +export function searchContacts(contacts: IContact[], searchTerm: string, limit: number): IContact[] { + const fuse = new Fuse(contacts, { + keys: SEARCH_FIELDS_CONFIG, + isCaseSensitive: false, + shouldSort: true, + threshold: 0.4, + }) + + const res = fuse.search(searchTerm, { limit }) + + return res.map((item) => item.item) +} diff --git a/tsconfig.json b/tsconfig.json index fccde0f..56aee06 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,7 +24,12 @@ "strictNullChecks": true, "strictPropertyInitialization": false, "target": "ES2021", - "useUnknownInCatchVariables": false + "useUnknownInCatchVariables": false, + "paths": { + "@services/*": ["src/services/*"], + "@common/*": ["src/common/*"], + "@models/*": ["src/models/*"] + } }, "exclude": ["node_modules", ".eslintrc.cjs"], "include": ["src/**/*"] From e66c2954aaea01e15a41049856ec9b35b292a97a Mon Sep 17 00:00:00 2001 From: Aviv Ben Shahar Date: Fri, 7 Jun 2024 14:46:55 +0300 Subject: [PATCH 2/3] docs: remove README `npm` --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 1443cf2..3a96c15 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,6 @@ All formats of phone numbers are supported, including: - `(808)1234567` - etc ... -To activate, **install globally via npm**: - -```bash -npm i -g alfred-open-whatsapp -``` - -
-
- # Examples ## LIVE DEMO: From 65ae6f2e52227dfb0c2bbe0cde9653c47f358d8d Mon Sep 17 00:00:00 2001 From: Aviv Ben Shahar Date: Fri, 7 Jun 2024 14:50:14 +0300 Subject: [PATCH 3/3] ci(release-note): fix `base64` flag --- .github/workflows/semantic-release-report.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/semantic-release-report.yaml b/.github/workflows/semantic-release-report.yaml index 5887867..81074d8 100755 --- a/.github/workflows/semantic-release-report.yaml +++ b/.github/workflows/semantic-release-report.yaml @@ -29,7 +29,7 @@ jobs: run: | GITHUB_REF=${{ github.head_ref }} npx semantic-release --no-ci --dry-run --plugins @semantic-release/commit-analyzer,@semantic-release/release-notes-generator --branches ${{ github.head_ref }} > output.txt - REPORT=$(cat output.txt | base64 -w 0) + REPORT=$(cat output.txt | base64) VERSION=$(cat output.txt | \ grep "The next release version is" | \