From 9c97349ba7c0114b5e447bc5baed64005ef643af Mon Sep 17 00:00:00 2001
From: "Elf M. Sternberg"
Date: Sat, 16 Nov 2024 20:07:16 -0800
Subject: [PATCH] Working on the lit evolution.
---
.gitignore | 128 +-
LICENSE.md | 18 +
README.md | 113 +-
build.mjs | 133 +
eslint.config.mjs | 84 +
index.html | 15 +
package-lock.json | 5088 ++++++++++++++++++++++++++++++++++
package.json | 168 ++
scripts/eslint.mjs | 56 +
scripts/eslint.nightmare.mjs | 199 ++
scripts/eslint.precommit.mjs | 73 +
scripts/knip.config.ts | 29 +
src/fridge-magnets.ts | 48 +
src/fridge-tile.ts | 154 +
src/index.haml | 36 -
src/index.ts | 2 +
src/lit-draggable.ts | 150 +
src/magnets.coffee | 530 ----
src/pingbg.png | Bin 0 -> 360700 bytes
src/sat.coffee | 97 -
src/style.less | 269 --
src/styles.css | 23 +
src/test_sat.coffee | 34 -
src/wordlist.coffee | 210 --
src/wordlist.ts | 211 ++
tsconfig.base.json | 61 +
tsconfig.json | 17 +
27 files changed, 6660 insertions(+), 1286 deletions(-)
create mode 100644 LICENSE.md
create mode 100644 build.mjs
create mode 100644 eslint.config.mjs
create mode 100644 index.html
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 scripts/eslint.mjs
create mode 100644 scripts/eslint.nightmare.mjs
create mode 100644 scripts/eslint.precommit.mjs
create mode 100644 scripts/knip.config.ts
create mode 100644 src/fridge-magnets.ts
create mode 100644 src/fridge-tile.ts
delete mode 100644 src/index.haml
create mode 100644 src/index.ts
create mode 100644 src/lit-draggable.ts
delete mode 100644 src/magnets.coffee
create mode 100644 src/pingbg.png
delete mode 100644 src/sat.coffee
delete mode 100644 src/style.less
create mode 100644 src/styles.css
delete mode 100644 src/test_sat.coffee
delete mode 100644 src/wordlist.coffee
create mode 100644 src/wordlist.ts
create mode 100644 tsconfig.base.json
create mode 100644 tsconfig.json
diff --git a/.gitignore b/.gitignore
index 78f04e8..b12160e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,13 +1,115 @@
-*.pyc
-*.pyo
-*#
-.#*
-*~
-js/magnets.js
-js/sat.js
-js/wordlist.js
-node_modules
-server/magnet_server.js
-index.html
-style.css
-private/
+# Created by https://www.gitignore.io/api/node
+# Edit at https://www.gitignore.io/?templates=node
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+dist
+
+# Uncomment the public line if your project uses Gatsby
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# https://create-react-app.dev/docs/using-the-public-folder/#docsNav
+# public
+
+# Storybook build outputs
+.out
+.storybook-out
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# Temporary folders
+tmp/
+temp/
+
+# End of https://www.gitignore.io/api/node
+api/**
+storybook-static/
+
+# Wireit's cache
+.wireit
+
+custom-elements.json
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..e77cb2f
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,18 @@
+The MIT License (MIT)
+
+Copyright (c) 2024 Elf M. Sternberg
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
+OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
index e2ea5e0..e4152c4 100644
--- a/README.md
+++ b/README.md
@@ -1,101 +1,20 @@
-# Fridgemagnets - A Nifty HTML5 Toy With Some Twitterable Features!
+This repository contains the boilerplate package which I use to start most of my smaller Typescript
+projects. It is "primitive" in that it doesn't have hot module reloading or VSCode integration;
+instead, it runs the build process using a watcher that enables fast iteration via the command line.
+This boilerplate is focused on web components, primarily those build with [Lit](https://lit.dev).
-## Demo
+## Dependencies
-Main website: [HTML5 Magnets!](http://html5magnets.elfsternberg.com)
+Aside from the NodeJS dependencies, this script uses
+[codespell](https://github.com/codespell-project/codespell), which is a Python-based spell checker
+for comments and documentation.
-Happy results: [@HTML5Magnets](https://twitter.com/#!/html5magnets)
-
-## Main Idea
-
-Fridgemagnets is a straightforward simulation of a relaxing
-refrigerator poem tileset. It was inspired by
-[TwitterMagnets](http://twittermagnets.com/), a Flash app written by the
-brilliant graphic designers at
-[PlusGood](http://www.plusgood.co.uk/). I have a bit of Flash envy,
-since I'm not an Adobe developer, and the TwitterMagnets application
-bugged me. It didn't resize, it didn't do mobile very well, and
-nobody has a space reserved on their fridge for the poem: a "poem" is
-just a meaningful arrangement of words deliberately placed in close
-proximity that seems to convey meaning.
-
-Fridgemagnets has a lot of new and fun technologies: it uses the audio
-API, it involves all manner of write-only-DOM tricks to make resizing
-work well, and it's my first major piece of express.js software. (I
-originally thought of using Zappa, but decided against it; dispatch is
-not the biggest thing Node has to deal with, and express by itself
-works just fine in Coffee.)
-
-I can now add the Twitter API, the HTML5 Audio API, and some basic
-game mechanics ([Separate Axis
-Theorem](http://www.metanetsoftware.com/technique/tutorialA.html) for
-collision management, anyone?) to my resume.
-
-This is known to work in later versions of Chrome, Firefox, and IE8+
-under Windows XP. No promise is implied of it working on your version
-of those, or any other browser. It's not (yet) phone-ready.
-
-## Requirements
-
-Node.js. Most of the subsidiary requirements can be found in the two
-package.json files. For development purposes Coffeescript, LessCSS,
-and HAML are in heavy use.
-
-If you're running the server, you need MySQL. The schema for the
-MySQL database can be found in the server folder.
-
-A config file. There's an example in the server folder.
-
-A twitter developer's account. Get one at dev.twitter.com.
-
-If you're going to be using the test/deploy routine, inotify-tools and
-python's "fabric" program are very useful.
-
-If you're going to make this publicly available, I strongly recommend
-you run this as its own user in a low-permissions container, behind
-Nginx and a lot of smarts. Also, the Node.js program "forever" is
-very useful in keeping the server up.
-
-## Acknowledgements
-
-[PlusGood](http://www.plusgood.co.uk/), for the inspiration.
-
-[Emily Richards aka Snowflake](http://ccmixter.org/people/snowflake),
-for her beautiful music.
-
-The entire crew at [Nodejitsu](http://nodejitsu.com/), for all the
-encouragement, even if I don't use their services.
-
-## CREDITS
-
-"Ethereal Space" is copyright (c) 2011 Snowflake, licensed under a
-Creative Commons 3.0 Attribution-Required license.
-
-jQuery, jQuery UI and associated assets, Buzz.js, and jQuery CSS
-Transform are copyright their respective owners, and available under
-a permissive MIT license.
-
-## LICENSE AND COPYRIGHT NOTICE: NO WARRANTY GRANTED OR IMPLIED
-
-Copyright (c) 2012 Elf M. Sternberg
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
- - Elf M. Sternberg
+## Decisions:
+- TSC is still the best analyzer of Typescript's types.
+- Scripting ESBuild gives you enormous power.
+- Many of the commands have the `${NODE_RUNNER}` prefix. If you set `export NODE_RUNNER=bun`, you
+ can get a huge speedup in building and linting.
+- Knip makes sure you're not importing anything you're not using.
+- As this is a Lit-focused project, both Lit-Analyzer and WC-Analyzer are included
+- xo
diff --git a/build.mjs b/build.mjs
new file mode 100644
index 0000000..1eecdbd
--- /dev/null
+++ b/build.mjs
@@ -0,0 +1,133 @@
+import { execFileSync } from "child_process";
+import * as chokidar from "chokidar";
+import esbuild from "esbuild";
+import fs from "fs";
+import { globSync } from "glob";
+import path from "path";
+import { cwd } from "process";
+import process from "process";
+import { fileURLToPath } from "url";
+
+// Hack replaces what was lost when using Bun / later Node versions
+const __dirname = fileURLToPath(new URL(".", import.meta.url));
+
+const isProdBuild = process.env.NODE_ENV === "production";
+
+const definitions = {
+ "process.env.NODE_ENV": JSON.stringify(isProdBuild ? "production" : "development"),
+ "process.env.CWD": JSON.stringify(cwd()),
+};
+
+// If you have assets in your src folder that won't be built/bundled, put them into "otherFiles" to
+// copy them. All this is a replacement for rollup-copy-plugin, which I used to use.
+
+const otherFiles = [
+ ["./src/*.css", "."],
+ ["./src/*.png", "."]
+];
+
+const isFile = (filePath) => fs.statSync(filePath).isFile();
+function nameCopyTarget(src, dest, strip) {
+ const target = path.join(dest, strip ? src.replace(strip, "") : path.parse(src).base);
+ return [src, target];
+}
+
+function copyOthers() {
+ for (const [source, rawdest, strip] of otherFiles) {
+ const matchedPaths = globSync(source);
+ const dest = path.join("dist", rawdest);
+ const copyTargets = matchedPaths.map((path) => nameCopyTarget(path, dest, strip));
+ for (const [src, dest] of copyTargets) {
+ if (isFile(src)) {
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
+ fs.copyFileSync(src, dest);
+ }
+ }
+ }
+}
+
+// This starts the definitions used for esbuild: Targets, arguments, the function for running a
+// build, and the options for building: building or watching. If you're building more than one app,
+// order them by the approximately largest project to smallest to build even faster.
+
+const apps = [
+ ["index.ts", "."]
+];
+
+const baseArgs = {
+ bundle: true,
+ write: true,
+ sourcemap: true,
+ minify: isProdBuild,
+ splitting: true,
+ treeShaking: true,
+ external: ["*.woff", "*.woff2"],
+ tsconfig: "./tsconfig.json",
+ loader: { ".css": "text", ".md": "text" },
+ define: definitions,
+ format: "esm",
+};
+
+async function buildOneSource(source, dest) {
+ const DIST = path.join(__dirname, "./dist", dest);
+ console.log(`[${new Date(Date.now()).toISOString()}] Starting build for target ${source}`);
+
+ try {
+ const start = Date.now();
+ copyOthers();
+ await esbuild.build({
+ ...baseArgs,
+ entryPoints: [`./src/${source}`],
+ entryNames: '[dir]/[name]',
+ outdir: DIST,
+ });
+ const end = Date.now();
+ console.log(
+ `[${new Date(end).toISOString()}] Finished build for target ${source} in ${
+ Date.now() - start
+ }ms`,
+ );
+ } catch (exc) {
+ console.error(`[${new Date(Date.now()).toISOString()}] Failed to build ${source}: ${exc}`);
+ }
+}
+
+async function buildAll(apps) {
+ await Promise.allSettled(apps.map(([source, dest]) => buildOneSource(source, dest)));
+}
+
+let timeoutId = null;
+function debouncedBuild() {
+ if (timeoutId !== null) {
+ clearTimeout(timeoutId);
+ }
+ timeoutId = setTimeout(() => {
+ console.log("\x1bc");
+ buildAll(apps);
+ }, 250);
+}
+
+if (process.argv.length > 2 && (process.argv[2] === "-h" || process.argv[2] === "--help")) {
+ console.log(`Build:
+
+options:
+ -w, --watch: Build all ${apps.length} applications
+ -h, --help: This help message
+`);
+ process.exit(0);
+}
+
+if (process.argv.length > 2 && (process.argv[2] === "-w" || process.argv[2] === "--watch")) {
+ console.log("Watching ./src for changes");
+ chokidar.watch("./src").on("all", (event, path) => {
+ if (!["add", "change", "unlink"].includes(event)) {
+ return;
+ }
+ if (!/(\.css|\.ts|\.js)$/.test(path)) {
+ return;
+ }
+ debouncedBuild();
+ });
+} else {
+ await buildAll(apps);
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000..65b6199
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,84 @@
+import eslint from "@eslint/js";
+import tsparser from "@typescript-eslint/parser";
+import litconf from "eslint-plugin-lit";
+import wcconf from "eslint-plugin-wc";
+import globals from "globals";
+import tseslint from "typescript-eslint";
+
+export default [
+ // You would not believe how much this change has frustrated users: ["if an ignores key is used
+ // without any other keys in the configuration object, then the patterns act as global
+ // ignores"](https://eslint.org/docs/latest/use/configure/ignore)
+ {
+ ignores: [
+ "dist/",
+ // don't lint the cache
+ ".wireit/",
+ // let packages have their own configurations
+ "packages/",
+ // don't ever lint node_modules
+ "node_modules/",
+ ".storybook/*",
+ // don't lint build output (make sure it's set to your correct build folder name)
+ // don't lint nyc coverage output
+ "coverage/",
+ "src/locale-codes.ts",
+ "storybook-static/",
+ "src/locales/",
+ ],
+ },
+ eslint.configs.recommended,
+ wcconf.configs["flat/recommended"],
+ litconf.configs["flat/recommended"],
+ ...tseslint.configs.recommended,
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ },
+ files: ["src/**"],
+ rules: {
+ "no-unused-vars": "off",
+ "no-console": ["error", { allow: ["debug", "warn", "error"] }],
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ argsIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+ },
+ },
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ globals: {
+ ...globals.nodeBuiltin,
+ },
+ },
+ files: ["scripts/*.mjs", "*.ts", "*.mjs"],
+ rules: {
+ "no-unused-vars": "off",
+ // We WANT our scripts to output to the console!
+ "no-console": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ argsIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+ },
+ },
+];
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5222bdd
--- /dev/null
+++ b/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..ccf2013
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5088 @@
+{
+ "name": "elf-boilerplate",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "elf-boilerplate",
+ "version": "0.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@lit/localize": "^0.12.2",
+ "@neodrag/vanilla": "^2.0.5",
+ "lit": "^3.2.0"
+ },
+ "devDependencies": {
+ "@types/eslint__js": "^8.42.3",
+ "@types/node": "^22.5.5",
+ "@typescript-eslint/eslint-plugin": "^8.6.0",
+ "@typescript-eslint/parser": "^8.6.0",
+ "chokidar": "^4.0.1",
+ "esbuild": "^0.24.0",
+ "eslint": "^9.11.0",
+ "eslint-plugin-lit": "^1.15.0",
+ "eslint-plugin-wc": "^2.1.1",
+ "glob": "^10.4.5",
+ "http-server": "^14.1.1",
+ "knip": "^5.30.4",
+ "lit-analyzer": "^2.0.3",
+ "lockfile-lint": "^4.14.0",
+ "prettier": "^3.3.3",
+ "rimraf": "^5.0.10",
+ "syncpack": "^13.0.0",
+ "typescript": "^5.6.2",
+ "typescript-eslint": "^8.6.0",
+ "wireit": "^0.14.9"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "optionalDependencies": {
+ "@esbuild/darwin-arm64": "^0.23.0",
+ "@esbuild/linux-amd64": "^0.18.11",
+ "@esbuild/linux-arm64": "^0.23.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@effect/schema": {
+ "version": "0.71.1",
+ "resolved": "https://registry.npmjs.org/@effect/schema/-/schema-0.71.1.tgz",
+ "integrity": "sha512-XvFttkuBUL3s4ofZ+OVE4Pagb4wsPG8laSS8iO5lVI9Yt1zIM49uxlYIA2BJ45jjS3MdplUepC0NilotKnjU2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-check": "^3.21.0"
+ },
+ "peerDependencies": {
+ "effect": "^3.6.5"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
+ "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
+ "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
+ "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
+ "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+ "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
+ "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
+ "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
+ "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
+ "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.23.1",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+ "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
+ "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
+ "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
+ "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
+ "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
+ "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
+ "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
+ "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
+ "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
+ "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
+ "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
+ "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
+ "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
+ "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+ "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+ "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+ "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.4",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+ "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz",
+ "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
+ "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
+ "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz",
+ "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@lit/localize": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/@lit/localize/-/localize-0.12.2.tgz",
+ "integrity": "sha512-Qv9kvgJKDq/JVSwXOxuWvQnnOBysHA99ti9im9a4fImCmx+fto+XXcUYQbjZHqiueEEc4V20PcRDPO+1g/6seQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "lit": "^3.2.0"
+ }
+ },
+ "node_modules/@lit/reactive-element": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz",
+ "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.2.0"
+ }
+ },
+ "node_modules/@neodrag/vanilla": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@neodrag/vanilla/-/vanilla-2.0.5.tgz",
+ "integrity": "sha512-wgrqnFCTNj9uVNRnFR68CdP2jityT2CCgpDC1M45cIbn6s9phFmOc16LgqfFAlmQsH7wXwk/zq41BO89idCmqA==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@snyk/github-codeowners": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz",
+ "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^4.1.1",
+ "ignore": "^5.1.8",
+ "p-map": "^4.0.0"
+ },
+ "bin": {
+ "github-codeowners": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=8.10"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint__js": {
+ "version": "8.42.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz",
+ "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/eslint": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+ "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.19.8"
+ }
+ },
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz",
+ "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.13.0",
+ "@typescript-eslint/type-utils": "8.13.0",
+ "@typescript-eslint/utils": "8.13.0",
+ "@typescript-eslint/visitor-keys": "8.13.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz",
+ "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.13.0",
+ "@typescript-eslint/types": "8.13.0",
+ "@typescript-eslint/typescript-estree": "8.13.0",
+ "@typescript-eslint/visitor-keys": "8.13.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz",
+ "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.13.0",
+ "@typescript-eslint/visitor-keys": "8.13.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz",
+ "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.13.0",
+ "@typescript-eslint/utils": "8.13.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz",
+ "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz",
+ "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "8.13.0",
+ "@typescript-eslint/visitor-keys": "8.13.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz",
+ "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.13.0",
+ "@typescript-eslint/types": "8.13.0",
+ "@typescript-eslint/typescript-estree": "8.13.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz",
+ "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.13.0",
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vscode/web-custom-data": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/@vscode/web-custom-data/-/web-custom-data-0.4.12.tgz",
+ "integrity": "sha512-bCemuvwCC84wJQbJoaPou86sjz9DUvZgGa6sAWQwzw7oIELD7z+WnUj2Rdsu8/8XPhKLcg3IswQ2+Pm3OMinIg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@yarnpkg/parsers": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz",
+ "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "js-yaml": "^3.10.0",
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ }
+ },
+ "node_modules/@yarnpkg/parsers/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@yarnpkg/parsers/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz",
+ "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk-template?sponsor=1"
+ }
+ },
+ "node_modules/chalk-template/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+ "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz",
+ "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/defaults": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/didyoumean2": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/didyoumean2/-/didyoumean2-4.1.0.tgz",
+ "integrity": "sha512-qTBmfQoXvhKO75D/05C8m+fteQmn4U46FWYiLhXtZQInzitXLWY0EQ/2oKnpAz9g2lQWW8jYcLcT+hPJGT+kig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.10.2",
+ "leven": "^3.1.0",
+ "lodash.deburr": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=10.13"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/easy-table": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz",
+ "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "optionalDependencies": {
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "node_modules/effect": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/effect/-/effect-3.6.5.tgz",
+ "integrity": "sha512-NhopZTAKljaAlR0CEroOAJJngdqg7bzlnWcDrCwh4d2WNVohVbBtUS4SGqLt8tUy7IFsTWATYiUtmhDG+YELjA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
+ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.1",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/enquirer/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+ "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.24.0",
+ "@esbuild/android-arm": "0.24.0",
+ "@esbuild/android-arm64": "0.24.0",
+ "@esbuild/android-x64": "0.24.0",
+ "@esbuild/darwin-arm64": "0.24.0",
+ "@esbuild/darwin-x64": "0.24.0",
+ "@esbuild/freebsd-arm64": "0.24.0",
+ "@esbuild/freebsd-x64": "0.24.0",
+ "@esbuild/linux-arm": "0.24.0",
+ "@esbuild/linux-arm64": "0.24.0",
+ "@esbuild/linux-ia32": "0.24.0",
+ "@esbuild/linux-loong64": "0.24.0",
+ "@esbuild/linux-mips64el": "0.24.0",
+ "@esbuild/linux-ppc64": "0.24.0",
+ "@esbuild/linux-riscv64": "0.24.0",
+ "@esbuild/linux-s390x": "0.24.0",
+ "@esbuild/linux-x64": "0.24.0",
+ "@esbuild/netbsd-x64": "0.24.0",
+ "@esbuild/openbsd-arm64": "0.24.0",
+ "@esbuild/openbsd-x64": "0.24.0",
+ "@esbuild/sunos-x64": "0.24.0",
+ "@esbuild/win32-arm64": "0.24.0",
+ "@esbuild/win32-ia32": "0.24.0",
+ "@esbuild/win32-x64": "0.24.0"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
+ "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/esbuild/node_modules/@esbuild/linux-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
+ "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz",
+ "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.18.0",
+ "@eslint/core": "^0.7.0",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.14.0",
+ "@eslint/plugin-kit": "^0.2.0",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.0",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-lit": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.15.0.tgz",
+ "integrity": "sha512-Yhr2MYNz6Ln8megKcX503aVZQln8wsywCG49g0heiJ/Qr5UjkE4pGr4Usez2anNcc7NvlvHbQWMYwWcgH3XRKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse5": "^6.0.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
+ "requireindex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "eslint": ">= 5"
+ }
+ },
+ "node_modules/eslint-plugin-wc": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-2.2.0.tgz",
+ "integrity": "sha512-kjPp+aXz23fOl0JZJOJS+6adwhEv98KjZ2FJqWpc4vtmk4Oenz/JJmmNZrGSARgtyR0BLIF/kVWC6GSlHA+5MA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-valid-element-name": "^1.0.0",
+ "js-levenshtein-esm": "^1.2.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.40.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+ "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-check": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.21.0.tgz",
+ "integrity": "sha512-QpmbiqRFRZ+SIlBJh6xi5d/PgXciUc/xWKc4Vi2RWEHHIRx6oM3f0fWNna++zP9VB5HUBTObUK9gTKQP3vVcrQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "pure-rand": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+ "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-server": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz",
+ "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "basic-auth": "^2.0.1",
+ "chalk": "^4.1.2",
+ "corser": "^2.0.1",
+ "he": "^1.2.0",
+ "html-encoding-sniffer": "^3.0.0",
+ "http-proxy": "^1.18.1",
+ "mime": "^1.6.0",
+ "minimist": "^1.2.6",
+ "opener": "^1.5.1",
+ "portfinder": "^1.0.28",
+ "secure-compare": "3.0.1",
+ "union": "~0.5.0",
+ "url-join": "^4.0.1"
+ },
+ "bin": {
+ "http-server": "bin/http-server"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-valid-element-name": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz",
+ "integrity": "sha512-GZITEJY2LkSjQfaIPBha7eyZv+ge0PhBR7KITeCCWvy7VBQrCUdFkvpI+HrAPQjVtVjy1LvlEkqQTHckoszruw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "is-potential-custom-element-name": "^1.0.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.0.tgz",
+ "integrity": "sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/js-levenshtein-esm": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz",
+ "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/knip": {
+ "version": "5.36.5",
+ "resolved": "https://registry.npmjs.org/knip/-/knip-5.36.5.tgz",
+ "integrity": "sha512-SKfT9ae69ldqM8fwdhDU4CGtH9T8WXtRFqiJlzd9GdxRUebkktdDB7XayJvHP/1HbSWUrjAG7CQHa78pwjoftw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/webpro"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/knip"
+ },
+ {
+ "type": "polar",
+ "url": "https://polar.sh/webpro-nl"
+ }
+ ],
+ "license": "ISC",
+ "dependencies": {
+ "@nodelib/fs.walk": "1.2.8",
+ "@snyk/github-codeowners": "1.1.0",
+ "easy-table": "1.2.0",
+ "enhanced-resolve": "^5.17.1",
+ "fast-glob": "^3.3.2",
+ "jiti": "^2.4.0",
+ "js-yaml": "^4.1.0",
+ "minimist": "^1.2.8",
+ "picocolors": "^1.1.0",
+ "picomatch": "^4.0.1",
+ "pretty-ms": "^9.0.0",
+ "smol-toml": "^1.3.0",
+ "strip-json-comments": "5.0.1",
+ "summary": "2.1.0",
+ "zod": "^3.22.4",
+ "zod-validation-error": "^3.0.3"
+ },
+ "bin": {
+ "knip": "bin/knip.js",
+ "knip-bun": "bin/knip-bun.js"
+ },
+ "engines": {
+ "node": ">=18.6.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18",
+ "typescript": ">=5.0.4"
+ }
+ },
+ "node_modules/knip/node_modules/strip-json-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz",
+ "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lit": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz",
+ "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit/reactive-element": "^2.0.4",
+ "lit-element": "^4.1.0",
+ "lit-html": "^3.2.0"
+ }
+ },
+ "node_modules/lit-analyzer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/lit-analyzer/-/lit-analyzer-2.0.3.tgz",
+ "integrity": "sha512-XiAjnwVipNrKav7r3CSEZpWt+mwYxrhPRVC7h8knDmn/HWTzzWJvPe+mwBcL2brn4xhItAMzZhFC8tzzqHKmiQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/web-custom-data": "^0.4.2",
+ "chalk": "^2.4.2",
+ "didyoumean2": "4.1.0",
+ "fast-glob": "^3.2.11",
+ "parse5": "5.1.0",
+ "ts-simple-type": "~2.0.0-next.0",
+ "vscode-css-languageservice": "4.3.0",
+ "vscode-html-languageservice": "3.1.0",
+ "web-component-analyzer": "^2.0.0"
+ },
+ "bin": {
+ "lit-analyzer": "cli.js"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lit-analyzer/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lit-analyzer/node_modules/parse5": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lit-analyzer/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lit-element": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz",
+ "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.2.0",
+ "@lit/reactive-element": "^2.0.4",
+ "lit-html": "^3.2.0"
+ }
+ },
+ "node_modules/lit-html": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz",
+ "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@types/trusted-types": "^2.0.2"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lockfile-lint": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/lockfile-lint/-/lockfile-lint-4.14.0.tgz",
+ "integrity": "sha512-uyXZ8X4J6EsicG87p0y4SHorJBwABLcaXOpI/j3h8SO/OX4fKTJ6Cqqi+U3zjgU0fo+u/4KbB7fl8ZzTewd0Ow==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "cosmiconfig": "^9.0.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "lockfile-lint-api": "^5.9.1",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "lockfile-lint": "bin/lockfile-lint.js"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/lockfile-lint-api": {
+ "version": "5.9.1",
+ "resolved": "https://registry.npmjs.org/lockfile-lint-api/-/lockfile-lint-api-5.9.1.tgz",
+ "integrity": "sha512-us5IT1bGA6KXbq1WrhrSzk9mtPgHKz5nhvv3S4hwcYnhcVOKW2uK0W8+PN9oIgv4pI49WsD5wBdTQFTpNChF/Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@yarnpkg/parsers": "^3.0.0-rc.48.1",
+ "debug": "^4.3.4",
+ "object-hash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.deburr": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz",
+ "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-package-arg": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz",
+ "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "proc-log": "^4.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^5.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ora": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz",
+ "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^4.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/emoji-regex": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+ "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ora/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-ms": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
+ "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse5": "^6.0.1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.32",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+ "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "async": "^2.6.4",
+ "debug": "^3.2.7",
+ "mkdirp": "^0.5.6"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-ms": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.1.0.tgz",
+ "integrity": "sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parse-ms": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/proc-log": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/proper-lockfile": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
+ "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "retry": "^0.12.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "node_modules/proper-lockfile/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/read-yaml-file": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz",
+ "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-yaml": "^4.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10.13"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+ "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requireindex": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.5"
+ }
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/secure-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
+ "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/smol-toml": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.0.tgz",
+ "integrity": "sha512-tWpi2TsODPScmi48b/OQZGi2lgUmBCHy6SZrhi/FdnnHiU1GwebbCfuQuxsC3nHaLwtYeJGPrDZDIeodDOc4pA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/cyyynthia"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/summary": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz",
+ "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/syncpack": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/syncpack/-/syncpack-13.0.0.tgz",
+ "integrity": "sha512-0PIoEWMP2+YkllkcZXw8N9d2sFqpmr8ULBdvms3gc1vG5tnccEMqc6flxHYnF/N+NTTcUnf0J+4xAD5hwH6XGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@effect/schema": "0.71.1",
+ "chalk": "5.3.0",
+ "chalk-template": "1.1.0",
+ "commander": "12.1.0",
+ "cosmiconfig": "9.0.0",
+ "effect": "3.6.5",
+ "enquirer": "2.4.1",
+ "fast-check": "3.21.0",
+ "globby": "14.0.2",
+ "jsonc-parser": "3.3.1",
+ "minimatch": "9.0.5",
+ "npm-package-arg": "11.0.3",
+ "ora": "8.0.1",
+ "prompts": "2.4.2",
+ "read-yaml-file": "2.1.0",
+ "semver": "7.6.3",
+ "tightrope": "0.2.0",
+ "ts-toolbelt": "9.6.0"
+ },
+ "bin": {
+ "syncpack": "dist/bin.js",
+ "syncpack-fix-mismatches": "dist/bin-fix-mismatches/index.js",
+ "syncpack-format": "dist/bin-format/index.js",
+ "syncpack-lint": "dist/bin-lint/index.js",
+ "syncpack-lint-semver-ranges": "dist/bin-lint-semver-ranges/index.js",
+ "syncpack-list": "dist/bin-list/index.js",
+ "syncpack-list-mismatches": "dist/bin-list-mismatches/index.js",
+ "syncpack-prompt": "dist/bin-prompt/index.js",
+ "syncpack-set-semver-ranges": "dist/bin-set-semver-ranges/index.js",
+ "syncpack-update": "dist/bin-update/index.js"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/syncpack/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/syncpack/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tightrope": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/tightrope/-/tightrope-0.2.0.tgz",
+ "integrity": "sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
+ "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-simple-type": {
+ "version": "2.0.0-next.0",
+ "resolved": "https://registry.npmjs.org/ts-simple-type/-/ts-simple-type-2.0.0-next.0.tgz",
+ "integrity": "sha512-A+hLX83gS+yH6DtzNAhzZbPfU+D9D8lHlTSd7GeoMRBjOt3GRylDqLTYbdmjA4biWvq2xSfpqfIDj2l0OA/BVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ts-toolbelt": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz",
+ "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz",
+ "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.13.0",
+ "@typescript-eslint/parser": "8.13.0",
+ "@typescript-eslint/utils": "8.13.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/union": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
+ "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
+ "dev": true,
+ "dependencies": {
+ "qs": "^6.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/validate-npm-package-name": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+ "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/vscode-css-languageservice": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-4.3.0.tgz",
+ "integrity": "sha512-BkQAMz4oVHjr0oOAz5PdeE72txlLQK7NIwzmclfr+b6fj6I8POwB+VoXvrZLTbWt9hWRgfvgiQRkh5JwrjPJ5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "3.16.0-next.2",
+ "vscode-nls": "^4.1.2",
+ "vscode-uri": "^2.1.2"
+ }
+ },
+ "node_modules/vscode-html-languageservice": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-3.1.0.tgz",
+ "integrity": "sha512-QAyRHI98bbEIBCqTzZVA0VblGU40na0txggongw5ZgTj9UVsVk5XbLT16O9OTcbqBGSqn0oWmFDNjK/XGIDcqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "3.16.0-next.2",
+ "vscode-nls": "^4.1.2",
+ "vscode-uri": "^2.1.2"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.16.0-next.2",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz",
+ "integrity": "sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-nls": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz",
+ "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-uri": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+ "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/web-component-analyzer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-2.0.0.tgz",
+ "integrity": "sha512-UEvwfpD+XQw99sLKiH5B1T4QwpwNyWJxp59cnlRwFfhUW6JsQpw5jMeMwi7580sNou8YL3kYoS7BWLm+yJ/jVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-glob": "^3.2.2",
+ "ts-simple-type": "2.0.0-next.0",
+ "typescript": "~5.2.0",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "wca": "cli.js",
+ "web-component-analyzer": "cli.js"
+ }
+ },
+ "node_modules/web-component-analyzer/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wireit": {
+ "version": "0.14.9",
+ "resolved": "https://registry.npmjs.org/wireit/-/wireit-0.14.9.tgz",
+ "integrity": "sha512-hFc96BgyslfO1WGSzQqOVYd5N3TB+4u9w70L9GHR/T7SYjvFmeznkYMsRIjMLhPcVabCEYPW1vV66wmIVDs+dQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "workspaces": [
+ "vscode-extension",
+ "website"
+ ],
+ "dependencies": {
+ "brace-expansion": "^4.0.0",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.2.11",
+ "jsonc-parser": "^3.0.0",
+ "proper-lockfile": "^4.1.2"
+ },
+ "bin": {
+ "wireit": "bin/wireit.js"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/wireit/node_modules/balanced-match": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz",
+ "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/wireit/node_modules/brace-expansion": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.0.tgz",
+ "integrity": "sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/wireit/node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/wireit/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/wireit/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/wireit/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-validation-error": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz",
+ "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "zod": "^3.18.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3c3ebb1
--- /dev/null
+++ b/package.json
@@ -0,0 +1,168 @@
+{
+ "name": "elf-boilerplate",
+ "version": "0.0.0",
+ "dependencies": {
+ "@lit/localize": "^0.12.2",
+ "@neodrag/vanilla": "^2.0.5",
+ "lit": "^3.2.0"
+ },
+ "devDependencies": {
+ "@types/eslint__js": "^8.42.3",
+ "@types/node": "^22.5.5",
+ "@typescript-eslint/eslint-plugin": "^8.6.0",
+ "@typescript-eslint/parser": "^8.6.0",
+ "chokidar": "^4.0.1",
+ "esbuild": "^0.24.0",
+ "eslint": "^9.11.0",
+ "eslint-plugin-lit": "^1.15.0",
+ "eslint-plugin-wc": "^2.1.1",
+ "glob": "^10.4.5",
+ "http-server": "^14.1.1",
+ "knip": "^5.30.4",
+ "lit-analyzer": "^2.0.3",
+ "lockfile-lint": "^4.14.0",
+ "prettier": "^3.3.3",
+ "rimraf": "^5.0.10",
+ "syncpack": "^13.0.0",
+ "typescript": "^5.6.2",
+ "typescript-eslint": "^8.6.0",
+ "wireit": "^0.14.9"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "license": "MIT",
+ "optionalDependencies": {
+ "@esbuild/darwin-arm64": "^0.23.0",
+ "@esbuild/linux-amd64": "^0.18.11",
+ "@esbuild/linux-arm64": "^0.23.0"
+ },
+ "scripts": {
+ "build": "wireit",
+ "clean": "wireit",
+ "demo": "wireit",
+ "fix": "wireit",
+ "format": "wireit",
+ "lint": "wireit",
+ "realclean": "wireit",
+ "watch": "wireit"
+ },
+ "type": "module",
+ "wireit": {
+ "build": {
+ "command": "${NODE_RUNNER} build.mjs",
+ "files": [
+ "./src/**/*.{css,ts,js}"
+ ],
+ "output": [
+ "dist/**"
+ ],
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ }
+ }
+ },
+ "clean": {
+ "command": "rimraf ./dist"
+ },
+ "demo": {
+ "command": "${NODE_RUNNER} ./node_modules/.bin/http-server . --port ${HTTP_DEMO_PORT}",
+ "server": true,
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ },
+ "HTTP_DEMO_PORT": {
+ "external": true,
+ "default": "8000"
+ }
+ }
+ },
+ "fix": {
+ "command": "prettier --write .",
+ "dependencies": [
+ "fix:eslint",
+ "fix:package"
+ ]
+ },
+ "format": {
+ "command": "prettier --write ."
+ },
+ "fix:eslint": {
+ "command": "${NODE_RUNNER ./scripts/eslint.mjs --fix",
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ }
+ }
+ },
+ "lint:components": {
+ "command": "lit-analyzer src"
+ },
+ "lint:eslint": {
+ "command": "${NODE_RUNNER} ./scripts/eslint.mjs --precommit",
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ }
+ }
+ },
+ "lint:lockfile": {
+ "_comment": "Ensure every entry has a resolved hash",
+ "shell": true,
+ "command": "[ -z \"$(jq -r '.packages | to_entries[] | select((.key | startswith(\"node_modules\")) and (.value | has(\"resolved\") | not)) | .key' < package-lock.json)\" ]",
+ "dependencies": [
+ "lint:lockfile:base"
+ ]
+ },
+ "lint:lockfile:base": {
+ "command": "lockfile-lint --path ./package-lock.json --allowed-hosts npm --validate-https --validate-integrity"
+ },
+ "lint:spelling": {
+ "command": "${NODE_RUNNER} scripts/check-spelling.mjs",
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ }
+ }
+ },
+ "prettier": {
+ "command": "prettier ."
+ },
+ "lint": {
+ "dependencies": [
+ "lint:types",
+ "lint:components",
+ "lint:lit",
+ "lint:lockfile",
+ "lint:eslint",
+ "prettier"
+ ]
+ },
+ "lint:imports": {
+ "command": "knip --config scripts/knip.config.ts"
+ },
+ "lint:lit": {
+ "command": "lit-analyzer src"
+ },
+ "lint:types": {
+ "command": "tsc --noEmit -p ."
+ },
+ "watch": {
+ "command": "${NODE_RUNNER} build.mjs --watch",
+ "server": true,
+ "env": {
+ "NODE_RUNNER": {
+ "external": true,
+ "default": "node"
+ }
+ }
+ }
+ }
+}
diff --git a/scripts/eslint.mjs b/scripts/eslint.mjs
new file mode 100644
index 0000000..63ba74e
--- /dev/null
+++ b/scripts/eslint.mjs
@@ -0,0 +1,56 @@
+import { execFileSync } from "child_process";
+import { ESLint } from "eslint";
+import fs from "fs";
+import path from "path";
+import process from "process";
+import { fileURLToPath } from "url";
+
+function changedFiles() {
+ const gitStatus = execFileSync("git", ["diff", "--name-only", "HEAD"], { encoding: "utf8" });
+ const gitUntracked = execFileSync("git", ["ls-files", "--others", "--exclude-standard"], {
+ encoding: "utf8",
+ });
+
+ const changed = gitStatus
+ .split("\n")
+ .filter((line) => line.trim().substring(0, 4) === "web/")
+ .filter((line) => /\.(m|c)?(t|j)s$/.test(line))
+ .map((line) => line.substring(4))
+ .filter((line) => fs.existsSync(line));
+
+ const untracked = gitUntracked
+ .split("\n")
+ .filter((line) => /\.(m|c)?(t|j)s$/.test(line))
+ .filter((line) => fs.existsSync(line));
+
+ const sourceFiles = [...changed, ...untracked].filter((line) => /^src\//.test(line));
+ const scriptFiles = [...changed, ...untracked].filter(
+ (line) => /^scripts\//.test(line) || !/^src\//.test(line),
+ );
+
+ return [...sourceFiles, ...scriptFiles];
+}
+
+const __dirname = fileURLToPath(new URL(".", import.meta.url));
+const projectRoot = path.join(__dirname, "..");
+process.chdir(projectRoot);
+
+const hasFlag = (flags) => process.argv.length > 1 && flags.includes(process.argv[2]);
+
+const [configFile, files] = hasFlag(["-n", "--nightmare"])
+ ? [path.join(__dirname, "eslint.nightmare.mjs"), changedFiles()]
+ : hasFlag(["-p", "--precommit"])
+ ? [path.join(__dirname, "eslint.precommit.mjs"), changedFiles()]
+ : [path.join(projectRoot, "eslint.config.mjs"), ["."]];
+
+const eslint = new ESLint({
+ overrideConfigFile: configFile,
+ warnIgnored: false,
+});
+
+const results = await eslint.lintFiles(files);
+const formatter = await eslint.loadFormatter("stylish");
+const resultText = formatter.format(results);
+const errors = results.reduce((acc, result) => acc + result.errorCount, 0);
+console.log(resultText);
+process.exit(errors > 1 ? 1 : 0);
diff --git a/scripts/eslint.nightmare.mjs b/scripts/eslint.nightmare.mjs
new file mode 100644
index 0000000..21310c9
--- /dev/null
+++ b/scripts/eslint.nightmare.mjs
@@ -0,0 +1,199 @@
+import eslint from "@eslint/js";
+import tsparser from "@typescript-eslint/parser";
+import litconf from "eslint-plugin-lit";
+import wcconf from "eslint-plugin-wc";
+import globals from "globals";
+import tseslint from "typescript-eslint";
+
+const MAX_DEPTH = 4;
+const MAX_NESTED_CALLBACKS = 4;
+const MAX_PARAMS = 5;
+
+const rules = {
+ "accessor-pairs": "error",
+ "array-callback-return": "error",
+ "block-scoped-var": "error",
+ "consistent-return": "error",
+ "consistent-this": ["error", "that"],
+ "curly": ["error", "all"],
+ "dot-notation": [
+ "error",
+ {
+ allowKeywords: true,
+ },
+ ],
+ "eqeqeq": "error",
+ "func-names": "error",
+ "guard-for-in": "error",
+ "max-depth": ["error", MAX_DEPTH],
+ "max-nested-callbacks": ["error", MAX_NESTED_CALLBACKS],
+ "max-params": ["error", MAX_PARAMS],
+ "new-cap": "error",
+ "no-alert": "error",
+ "no-array-constructor": "error",
+ "no-bitwise": "error",
+ "no-caller": "error",
+ "no-case-declarations": "error",
+ "no-class-assign": "error",
+ "no-cond-assign": "error",
+ "no-const-assign": "error",
+ "no-constant-condition": "error",
+ "no-control-regex": "error",
+ "no-debugger": "error",
+ "no-delete-var": "error",
+ "no-div-regex": "error",
+ "no-dupe-args": "error",
+ "no-dupe-keys": "error",
+ "no-duplicate-case": "error",
+ "no-else-return": "error",
+ "no-empty": "error",
+ "no-empty-character-class": "error",
+ "no-empty-function": "error",
+ "no-labels": "error",
+ "no-eq-null": "error",
+ "no-eval": "error",
+ "no-ex-assign": "error",
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-boolean-cast": "error",
+ "no-extra-label": "error",
+ "no-fallthrough": "error",
+ "no-func-assign": "error",
+ "no-implied-eval": "error",
+ "no-implicit-coercion": "error",
+ "no-implicit-globals": "error",
+ "no-inner-declarations": ["error", "functions"],
+ "no-invalid-regexp": "error",
+ "no-irregular-whitespace": "error",
+ "no-iterator": "error",
+ "no-invalid-this": "error",
+ "no-label-var": "error",
+ "no-lone-blocks": "error",
+ "no-lonely-if": "error",
+ "no-loop-func": "error",
+ "no-magic-numbers": ["error", { ignore: [0, 1, -1] }],
+ "no-multi-str": "error",
+ "no-negated-condition": "error",
+ "no-nested-ternary": "error",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-wrappers": "error",
+ "no-obj-calls": "error",
+ "no-octal": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "error",
+ "no-proto": "error",
+ "no-redeclare": "error",
+ "no-regex-spaces": "error",
+ "no-restricted-syntax": ["error", "WithStatement"],
+ "no-script-url": "error",
+ "no-self-assign": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-shadow": "error",
+ "no-shadow-restricted-names": "error",
+ "no-sparse-arrays": "error",
+ "no-this-before-super": "error",
+ "no-throw-literal": "error",
+ "no-trailing-spaces": "error",
+ "no-undef": "error",
+ "no-undef-init": "error",
+ "no-unexpected-multiline": "error",
+ "no-useless-constructor": "error",
+ "no-unmodified-loop-condition": "error",
+ "no-unneeded-ternary": "error",
+ "no-unreachable": "error",
+ "no-unused-expressions": "error",
+ "no-unused-labels": "error",
+ "no-use-before-define": "error",
+ "no-useless-call": "error",
+ "no-dupe-class-members": "error",
+ "no-var": "error",
+ "no-void": "error",
+ "no-with": "error",
+ "prefer-arrow-callback": "error",
+ "prefer-const": "error",
+ "prefer-rest-params": "error",
+ "prefer-spread": "error",
+ "prefer-template": "error",
+ "radix": "error",
+ "require-yield": "error",
+ "strict": ["error", "global"],
+ "use-isnan": "error",
+ "valid-typeof": "error",
+ "vars-on-top": "error",
+ "yoda": ["error", "never"],
+
+ "no-unused-vars": "off",
+ "no-console": ["error", { allow: ["debug", "warn", "error"] }],
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ argsIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+};
+
+export default [
+ // You would not believe how much this change has frustrated users: ["if an ignores key is used
+ // without any other keys in the configuration object, then the patterns act as global
+ // ignores"](https://eslint.org/docs/latest/use/configure/ignore)
+ {
+ ignores: [
+ "dist/",
+ ".wireit/",
+ // don't ever lint node_modules
+ "node_modules/",
+ ],
+ },
+ eslint.configs.recommended,
+ wcconf.configs["flat/recommended"],
+ litconf.configs["flat/recommended"],
+ ...tseslint.configs.recommended,
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ globals: {
+ ...globals.browser,
+ },
+ },
+ files: ["src/**"],
+ rules,
+ },
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ globals: {
+ ...globals.nodeBuiltin,
+ },
+ },
+ files: ["scripts/*.mjs", "*.ts", "*.mjs"],
+ rules,
+ },
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ globals: {
+ ...globals.nodeBuiltin,
+ ...globals.jest,
+ },
+ },
+ files: ["src/**/*.test.ts"],
+ rules,
+ },
+];
diff --git a/scripts/eslint.precommit.mjs b/scripts/eslint.precommit.mjs
new file mode 100644
index 0000000..db97256
--- /dev/null
+++ b/scripts/eslint.precommit.mjs
@@ -0,0 +1,73 @@
+import eslint from "@eslint/js";
+import tsparser from "@typescript-eslint/parser";
+import litconf from "eslint-plugin-lit";
+import wcconf from "eslint-plugin-wc";
+import globals from "globals";
+import tseslint from "typescript-eslint";
+
+export default [
+ // You would not believe how much this change has frustrated users: ["if an ignores key is used
+ // without any other keys in the configuration object, then the patterns act as global
+ // ignores"](https://eslint.org/docs/latest/use/configure/ignore)
+ {
+ ignores: [
+ "dist/",
+ ".wireit/",
+ // don't ever lint node_modules
+ "node_modules/",
+ ],
+ },
+ eslint.configs.recommended,
+ wcconf.configs["flat/recommended"],
+ litconf.configs["flat/recommended"],
+ ...tseslint.configs.recommended,
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ },
+ files: ["src/**"],
+ rules: {
+ "no-unused-vars": "off",
+ "no-console": ["error", { allow: ["debug", "warn", "error"] }],
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ argsIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+ },
+ },
+ {
+ languageOptions: {
+ parser: tsparser,
+ parserOptions: {
+ ecmaVersion: 12,
+ sourceType: "module",
+ },
+ globals: {
+ ...globals.nodeBuiltin,
+ },
+ },
+ files: ["scripts/*.mjs", "*.ts", "*.mjs"],
+ rules: {
+ "no-unused-vars": "off",
+ "no-console": "off",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "@typescript-eslint/no-unused-vars": [
+ "error",
+ {
+ argsIgnorePattern: "^_",
+ varsIgnorePattern: "^_",
+ caughtErrorsIgnorePattern: "^_",
+ },
+ ],
+ },
+ },
+];
diff --git a/scripts/knip.config.ts b/scripts/knip.config.ts
new file mode 100644
index 0000000..2a06472
--- /dev/null
+++ b/scripts/knip.config.ts
@@ -0,0 +1,29 @@
+import { type KnipConfig } from "knip";
+
+const config: KnipConfig = {
+ "entry": [
+ "./src/index.ts",
+ ],
+ "project": ["src/**/*.ts", "src/**/*.js", "./scripts/*.mjs"],
+ // "ignore": ["src/**/*.test.ts", "src/**/*.stories.ts"],
+ // Prevent Knip from complaining about web components, which export their classes but also
+ // export their registration, and we don't always use both.
+ "ignoreExportsUsedInFile": true,
+ "typescript": {
+ config: ["tsconfig.json"],
+ },
+ "wireit": {
+ config: ["package.json"],
+ },
+ "eslint": {
+ entry: [
+ "eslint.config.mjs",
+ "scripts/eslint.precommit.mjs",
+ "scripts/eslint.nightmare.mjs",
+ "scripts/eslint.mjs",
+ ],
+ config: ["package.json"],
+ }
+};
+
+export default config;
diff --git a/src/fridge-magnets.ts b/src/fridge-magnets.ts
new file mode 100644
index 0000000..b37beb6
--- /dev/null
+++ b/src/fridge-magnets.ts
@@ -0,0 +1,48 @@
+import { LitElement, html, css } from "lit";
+import { customElement } from "lit/decorators/custom-element.js";
+import "./fridge-tile.js";
+
+@customElement("fridge-magnets")
+export class FridgeMagnets extends LitElement {
+ static get styles() {
+ return css`
+ :host {
+ display: block;
+ }
+ #fridgemagnets {
+ width: 100%;
+ height: 100%;
+ display: grid;
+ grid-template-rows: 100fr 18ex;
+ }
+
+ #fridge {
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+ background: url("./dist/pingbg.png") repeat;
+ }
+
+ #footer {
+ background-color: #32cd32;
+ width: 100%;
+ height: 18ex;
+ }
+ `;
+ }
+
+ render() {
+ return html` `;
+ }
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ "fridge-magnets": FridgeMagnets;
+ }
+}
diff --git a/src/fridge-tile.ts b/src/fridge-tile.ts
new file mode 100644
index 0000000..855bec5
--- /dev/null
+++ b/src/fridge-tile.ts
@@ -0,0 +1,154 @@
+import { LitElement, html, css } from "lit";
+import { customElement } from "lit/decorators/custom-element.js";
+import { property } from "lit/decorators/property.js";
+import { styleMap } from "lit/directives/style-map.js";
+import { LitDragEvent, LitDraggable } from "./lit-draggable.js";
+
+export function bound(_target: unknown, key: string, descriptor: PropertyDescriptor): PropertyDescriptor {
+ if (typeof descriptor?.value !== "function") {
+ throw new Error("Only methods can be @bound.");
+ }
+ return {
+ configurable: true,
+ get() {
+ const method = descriptor.value.bind(this);
+ Object.defineProperty(this, key, { value: method, configurable: true, writable: true });
+ return method;
+ },
+ };
+}
+
+@customElement("fridge-tile")
+export class FridgeTile extends LitElement {
+ @property({ type: String })
+ word = "";
+
+ dragHandle: LitDraggable;
+
+ static get styles() {
+ return css`
+ :host {
+ display: block;
+ position: absolute;
+ }
+
+ :host([data-dragging="idle"]) {
+ cursor: grab;
+ }
+
+ :host([data-dragging="dragging"]) {
+ cursor: grabbing;
+ }
+
+ .word {
+ font-family: Georgia, Palatino, "Palatino Linotype", Times, "Times New Roman", serif;
+ box-shadow: 0 0 0.375rem 0.125rem #aaa;
+ text-align: center;
+ user-select: none;
+ cursor: pointer;
+ color: #444;
+ font-size: 0.9375rem;
+ padding: 0.1875rem 0.25rem 0.25rem 0.25rem;
+ position: relative;
+ background: white;
+ z-index: 100;
+ }
+
+ .word.dragging {
+ font-size: 1.1875rem;
+ }
+ `;
+ }
+
+ constructor() {
+ super();
+ this.dragHandle = new LitDraggable(this);
+ this.onDragEnd = this.onDragEnd.bind(this);
+ this.addEventListener("lit-drag-end", this.onDragEnd);
+ }
+
+ onDragEnd(ev: LitDragEvent) {
+ this.style.setProperty("top", `${+ev.offsetY}px`);
+ this.style.setProperty("left", `${+ev.offsetX}px`);
+ }
+
+ render() {
+ const styles = styleMap({ width: `${this.word.length}ch` });
+ return html`${this.word}
`;
+ }
+}
+
+//
+// base_style:
+// 'font-size': "15px"
+//
+// drag_style:
+// 'font-size': "19px"
+//
+// visible: false
+//
+// # Initial tilt.
+// rotation: (Math.random() * 30) - 15
+//
+// constructor: (@word, @board, @master) ->
+// super()
+// @el = $('' + @word.w + '
')
+// @el.css @base_style
+// @board.append(@el)
+// @rotation = (Math.random() * 30) - 15
+//
+// @el.draggable
+// helper: "original"
+// refreshPositions: false
+// revertDuration: 1
+//
+// start: (event) =>
+// mod = (Math.random() * 16) - 8
+// @rotation = if Math.abs(@rotation + mod) > 15 then @rotation - mod else @rotation + mod
+// style = clone(@drag_style)
+// style.rotate = @rotation
+// @el.animate(style, 200, () => @new_width = @el.width())
+// true
+//
+// stop: (event) =>
+// # Drop the thing dead center, at least on the x-axis,
+// # and animate its return to the new font size.
+// mod = (Math.random() * 16) - 8
+// @rotation = if Math.abs(@rotation + mod) > 15 then @rotation - mod else @rotation + mod
+// style = clone(@base_style)
+// style.rotate = @rotation
+// style['left'] = parseInt(@el.position().left + (0.5 * (@new_width - @width())))
+// @el.animate style, 200, 'easeOutQuad', () =>
+// @reset_dims()
+// explode_hearts(@board, @)
+// @master.poemed(@)
+// true
+//
+// fadeOut: -> $.Deferred((d) => @el.fadeOut('fast', (() => @unset_dims(); @visible = false; d.resolve()))).promise()
+//
+// # Shape for deteriming poemed collision
+// fuzzyshape: -> shape @left() - WIDTH_FUZZ, @top() - HEIGHT_FUZZ, @width() + (2 * WIDTH_FUZZ), @height() + (2 * HEIGHT_FUZZ)
+//
+// get_new_pos: ->
+// bh = => parseInt(Math.random() * (@board.height() - @height()) * 0.985)
+// bw = => parseInt(Math.random() * (@board.width() - @width()) * 0.98)
+// [top, left] = [bh(), bw()]
+// [top, left] = [bh(), bw()] until @master.unoccupied(left, top, @width(), @height())
+// [top, left]
+//
+// flyIn: ->
+// fd = (mod) ->
+// m = parseInt(40 * Math.random())
+// if (Math.random() < 0.5) then mod + m else -1 * m
+// @el.css
+// left: fd(@board.width())
+// top: fd(@board.height())
+// dfd = $.Deferred()
+// x = Math.random()
+// [top, left] = @get_new_pos()
+// @el.fadeIn().animate {top: top, left: left, rotate: @rotation}, 1500, 'easeOutQuint', () =>
+// @visible = true
+// dfd.resolve()
+// dfd.promise()
+//
+//
diff --git a/src/index.haml b/src/index.haml
deleted file mode 100644
index ebc3e0d..0000000
--- a/src/index.haml
+++ /dev/null
@@ -1,36 +0,0 @@
-!!! 5
-%html{:xmlns => "http://www.w3.org/1999/xhtml"}
- %head
- %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}/
- %meta{"http-equiv" => "Acesss-Control-Allow-Origin", :content => "*"}/
- %title Fridge Magnets in HTML5
- %link{:href => "style.css", :rel => "stylesheet", :type => "text/css"}/
- %link{:href => "ui-lightness/jquery-ui-1.8.18.custom.css", :rel => "stylesheet", :type => "text/css"}/
- %body
- #board
- #results
- #footer
- #stripe
- #muteunmute(data-state='on')
- %img(src="unmute.png")
- %button(id="shuffler") Shuffle
-
- %p#f1
- HTML5 implementation by Elf M. Sternberg . You can see all our poems
- @html5magnets on Twitter.
- #f2
- %div
- Comments and feedback to elf.sternberg@gmail.com | inspired by twittermagents.com and an allergic reaction to all things flash.
- %p The music is Ethereal Space by snowflake and is licensed under a Creative Commons Attribution (3.0) license.
- %div(style="clear:both")/
-
- #message(style="display: none")
- %p
-
- %script{:src => "js/jquery-1.7.1.min.js", :type => "text/javascript"}
- %script{:src => "js/jquery-ui-1.8.18.custom.min.js", :type => "text/javascript"}
- %script{:src => "js/jquery-css-transform.js", :type => "text/javascript"}
- %script{:src => "js/jquery-animate-css-rotate-scale.js", :type => "text/javascript"}
- %script{:src => "js/buzz.js", :type => "text/javascript"}
- %script{:src => "js/sat.js", :type => "text/javascript"}
- %script{:src => "js/magnets.js", :type => "text/javascript"}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..1bdf53e
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,2 @@
+import "./fridge-magnets.js";
+import "./fridge-tile.js";
diff --git a/src/lit-draggable.ts b/src/lit-draggable.ts
new file mode 100644
index 0000000..bb181d3
--- /dev/null
+++ b/src/lit-draggable.ts
@@ -0,0 +1,150 @@
+import { ReactiveControllerHost, ReactiveController } from "lit";
+
+export type DragBoundaries = {
+ top: number;
+ left: number;
+ bottom: number;
+ right: number;
+};
+
+export type DragOptions = {
+ preventSelect: boolean;
+};
+
+export type DragAxes = "x" | "y" | "both" | "none";
+
+export type DragBounds = HTMLElement | Partial | "parent" | "body" | (string & Record);
+
+export interface LitDragEvent extends Event {
+ offsetX: number;
+ offsetY: number;
+ node: HTMLElement;
+}
+
+function makeLitDragEvent(name: string): LitDragEvent {
+ class _LitDragEvent extends Event implements LitDragEvent {
+ static readonly eventName = name;
+ offsetX: number = 0;
+ offsetY: number = 0;
+ node: HTMLElement;
+ // container: HTMLElement;
+ constructor(source: LitDraggable) {
+ super(_LitDragEvent.eventName, { bubbles: true, composed: true });
+ this.offsetX = source.translateX;
+ this.offsetY = source.translateY;
+ this.node = source.host;
+ // this.container = source.container;
+ }
+ }
+
+ return _LitDragEvent as unknown as LitDragEvent;
+}
+
+export const LitDragStart = makeLitDragEvent("lit-drag-start");
+
+export const LitDragging = makeLitDragEvent("lit-dragging");
+
+export const LitDragEnd: LitDragEvent = makeLitDragEvent("lit-drag-end");
+
+const defaultOptions: DragOptions = {
+ preventSelect: true,
+};
+
+export class LitDraggable implements ReactiveController {
+ host: ReactiveControllerHost & HTMLElement;
+
+ options: DragOptions;
+
+ translateX = 0;
+ translateY = 0;
+
+ initialX = 0;
+ initialY = 0;
+
+ dragging = false;
+
+ currentSelect?: string;
+
+ pointers = new Set();
+
+ constructor(host: ReactiveControllerHost & HTMLElement, options: DragOptions = defaultOptions) {
+ (this.host = host).addController(this);
+ this.options = options;
+ this.dragStart = this.dragStart.bind(this);
+ this.drag = this.drag.bind(this);
+ this.dragEnd = this.dragEnd.bind(this);
+ }
+
+ // TODO: Make this work with a handle, which will be a `ref` object.
+ hostConnected() {
+ console.log(this.host);
+ this.host.addEventListener("pointerdown", this.dragStart);
+ }
+
+ hostDisconnected() {
+ this.host.removeEventListener("pointerdown", this.dragStart);
+ }
+
+ dragStart(ev: PointerEvent) {
+ if (ev.button === 2) {
+ return;
+ }
+
+ document.addEventListener("pointerup", this.dragEnd);
+ document.addEventListener("pointermove", this.drag);
+
+ const event_target = ev.composedPath()[0] as HTMLElement;
+ if (!(event_target === this.host || this.host.shadowRoot?.contains(event_target))) {
+ console.log("HUH?");
+ return;
+ }
+
+ this.pointers.add(ev.pointerId);
+ this.dragging = true;
+
+ if (this.options.preventSelect) {
+ this.currentSelect = document.body.style.userSelect;
+ document.body.style.userSelect = "none";
+ }
+
+ this.initialX = ev.clientX;
+ this.initialY = ev.clientY;
+ this.host.dataset.litDrag = "true";
+ this.host.dispatchEvent(new LitDragStart(this));
+ }
+
+ drag(ev: PointerEvent) {
+ if (!this.dragging || !this.pointers.has(ev.pointerId)) {
+ return;
+ }
+ this.host.dataset.litDragging = "true";
+ ev.preventDefault();
+
+ this.translateX = ev.clientX - this.initialX;
+ this.translateY = ev.clientY - this.initialY;
+ this.host.dispatchEvent(new LitDragging(this));
+ this.host.style.setProperty("transform", `translate3d(${+this.translateX}px, ${+this.translateY}px, 0)`);
+ }
+
+ dragEnd(ev: PointerEvent) {
+ document.removeEventListener("pointerup", this.dragEnd);
+ document.removeEventListener("pointermove", this.drag);
+
+ if (!this.dragging || !this.pointers.has(ev.pointerId)) {
+ return;
+ }
+ this.pointers.delete(ev.pointerId);
+ this.dragging = false;
+
+ delete this.host.dataset.litDrag;
+ delete this.host.dataset.litDragging;
+ if (this.currentSelect) {
+ document.body.style.userSelect = this.currentSelect;
+ this.currentSelect = undefined;
+ }
+ this.initialX = this.translateX;
+ this.initialY = this.translateY;
+ this.host.dispatchEvent(new LitDragEnd(this));
+ this.host.style.removeProperty("transform");
+ }
+}
diff --git a/src/magnets.coffee b/src/magnets.coffee
deleted file mode 100644
index 6ac889e..0000000
--- a/src/magnets.coffee
+++ /dev/null
@@ -1,530 +0,0 @@
-SUFFIX = 1
-PREFIX = 2
-
-
-# Average number of words visible on any given iteration.
-AVG_VISIBLE = 60
-
-clone = (obj) ->
- return obj if not obj? or typeof obj isnt 'object'
- newInstance = new obj.constructor()
- for key of obj
- newInstance[key] = clone obj[key]
- newInstance
-
-
-HEIGHT_FUZZ = 8
-WIDTH_FUZZ = 6
-
-# A dimensioned object is one that appears on the board: it has an X
-# and Y coordinate, a width and a height. From this, we can create a
-# bounding box using the "shape" function. Dimensioned objects can be
-# compared to other dimensioned objects to assert whether or not
-# they're in collision. Some objects have bounding boxes that pull in
-# or push out the borders abstractly, in order to provide for "fuzzy"
-# collisions that correspond to drop shadows or similar visual effects.
-
-shape = (x, y, w, h) -> [{x: x, y: y}, {x: x + w, y: y}, {x: x + w, y: y + h}, {x: x, y: y + h}]
-
-class Dimensioned
- _width: null
- _height: null
- _left_p: null
- _top_p: null
- _left: null
- _top: null
- _pos: null
-
- constructor: (@el) ->
-
- unset_dims: ->
- @_left = @_top = @_width = @_height = @_pos = null
-
- reset_dims: ->
- @unset_dims()
- [@left(), @top(), @width(), @height()]
-
- positioned: -> return @_width? and @height?
-
- visibleReposition: ->
- @reposition()
- @el.css {top: @top(), left: @left()}
- @
-
- reposition: ->
- parent = @el.offsetParent()
- [@_top, @_left] = [parseInt(@_top_p * parent.height()), parseInt(@_left_p * parent.width())]
- @_pos = {left: @_left, top: @_top}
- @
-
- width: -> @_width = if @_width? then @_width else @el.outerWidth()
- height: -> @_height = if @_height? then @_height else @el.outerHeight()
- pos: -> @_pos = if @_pos? then @_pos else @el.position()
-
- left: -> @_left = if @_left?
- @_left
- else
- @_left = @pos().left
- @_left_p = @_left / @el.offsetParent().width()
- @_left
-
- top: -> @_top = if @_top?
- @_top
- else
- @_top = @pos().top
- @_top_p = @_top / @el.offsetParent().height()
- @_top
-
- dims: -> [@width(), @height()]
- shape: ->
- shape @left(), @top(), @width(), @height()
-
-
-# I can't decide if this is the right way to go, with a two-pass "set
-# it all up, then make it all blow up," but it works quite well, all
-# things considered. And after much consideration (like, one minute
-# of realizing I never, ever used the features) it became obvious I
-# didn't need Dimensioned.
-
-class Heart
-
- constructor: (@parent, @top, @left, symbol) ->
- dv = '' + symbol + '
'
- @el = $(dv)
- @el.css {'font-size': 'larger'} if Math.random() > 0.6
- @rot_dist = parseInt(90 * Math.random()) * (if Math.random() < 0.5 then 1 else -1)
- [@dir, @dst, @dur] = [Math.random() * 2 * Math.PI, Math.random() * 110, Math.random() * 1200 + 700]
- $(@parent).append(@el)
-
- explode: ->
- el = $(@el)
- el.show().animate({opacity: 0.0, top: parseInt(@top + (Math.sin(@dir) * @dst)), left: parseInt(@left + (Math.cos(@dir) * @dst)), rotate: @rot_dist}, @dur, "easeOutCubic", (() -> el.remove()))
-
-explode_hearts = (@board, @el) ->
- randomsymbol = -> ['♪','★','✶'][parseInt(Math.random() * 3)]
- symbol = if Math.random() < 0.3 then randomsymbol() else '♥'
- parent = @board.el
- [top, left, height, width] = [@el.top(), @el.left(), @el.height(), @el.width()]
- hearts = for i in [0..(22 + (6 - Math.floor(Math.random() * 12)))]
- new Heart(parent, top + (0.5 * height), left + (0.5 * width), symbol)
- (h.explode() for h in hearts)
-
-
-# The board is the principle object on which all other objects are
-# dependent. I decided to make it a 'Dimensioned' because I'm going
-# to be constantly querying its height and width.
-
-class Board extends Dimensioned
-
- append: (ob) -> @el.append(ob)
-
- css: (width, height) ->
- @el.css
- width: width
- height: height
- @reset_dims()
-
-
-
-class Footer extends Dimensioned
-
-
-
-# A Tile is a word tile. It has a single word.
-
-class Tile extends Dimensioned
-
- base_style:
- 'font-size': "15px"
-
- drag_style:
- 'font-size': "19px"
-
- visible: false
-
- # Initial tilt.
- rotation: (Math.random() * 30) - 15
-
- constructor: (@word, @board, @master) ->
- @el = $('' + @word.w + '
')
- @el.css @base_style
- @board.append(@el)
- @rotation = (Math.random() * 30) - 15
-
- @el.draggable
- helper: "original"
- refreshPositions: false
- revertDuration: 1
-
- start: (event) =>
- mod = (Math.random() * 16) - 8
- @rotation = if Math.abs(@rotation + mod) > 15 then @rotation - mod else @rotation + mod
- style = clone(@drag_style)
- style.rotate = @rotation
- @el.animate(style, 200, () => @new_width = @el.width())
- true
-
- stop: (event) =>
- # Drop the thing dead center, at least on the x-axis,
- # and animate its return to the new font size.
- mod = (Math.random() * 16) - 8
- @rotation = if Math.abs(@rotation + mod) > 15 then @rotation - mod else @rotation + mod
- style = clone(@base_style)
- style.rotate = @rotation
- style['left'] = parseInt(@el.position().left + (0.5 * (@new_width - @width())))
- @el.animate style, 200, 'easeOutQuad', () =>
- @reset_dims()
- explode_hearts(@board, @)
- @master.poemed(@)
- true
-
- fadeOut: -> $.Deferred((d) => @el.fadeOut('fast', (() => @unset_dims(); @visible = false; d.resolve()))).promise()
-
- # Shape for deteriming poemed collision
- fuzzyshape: -> shape @left() - WIDTH_FUZZ, @top() - HEIGHT_FUZZ, @width() + (2 * WIDTH_FUZZ), @height() + (2 * HEIGHT_FUZZ)
-
- get_new_pos: ->
- bh = => parseInt(Math.random() * (@board.height() - @height()) * 0.985)
- bw = => parseInt(Math.random() * (@board.width() - @width()) * 0.98)
- [top, left] = [bh(), bw()]
- [top, left] = [bh(), bw()] until @master.unoccupied(left, top, @width(), @height())
- [top, left]
-
- flyIn: ->
- fd = (mod) ->
- m = parseInt(40 * Math.random())
- if (Math.random() < 0.5) then mod + m else -1 * m
- @el.css
- left: fd(@board.width())
- top: fd(@board.height())
- dfd = $.Deferred()
- x = Math.random()
- [top, left] = @get_new_pos()
- @el.fadeIn().animate {top: top, left: left, rotate: @rotation}, 1500, 'easeOutQuint', () =>
- @visible = true
- dfd.resolve()
- dfd.promise()
-
-
-
-class PoemDisplay extends Dimensioned
- el: $('#results')
- _max_box: null
- dialog: $('#message')
- dtimer: null
-
- constructor: (@board) ->
- @el.css({top: @board.height()})
-
- sentSuccess: (data, textStatus) =>
- $('p', @dialog).html "Your poem has been immortalized! It can be seen on Twitter at @html5magnets ."
- if data.error
- $('p', @dialog).html data.message
-
- @dialog.dialog("open")
- if dtimer != null
- clearTimeout(dtimer)
- dtimer = null
- dtimer = setTimeout (() => @dialog.dialog("close")), 7500
-
- sentError: (query, textStatus) =>
- console.log(query, textStatus)
-
- sendToServer: (haiku) =>
- $.ajax 'http://html5magnets.elfsternberg.com/poems/',
- type: "POST"
- data: {"message": haiku}
- dataType: 'json'
- success: @sentSuccess
- error: @sentError
-
- update: (lines) ->
- lines = (l for l in lines when l.length > 0)
- if lines.length == 0
- @el.fadeOut()
- return
-
- @el.html('')
- @el.show()
- res = for words in lines
- line = words[0].w
- for word in words[1...words.length]
- line += if word.s == 1 then word.w else ' ' + word.w
- @el.append($('' + line + '
'))
-
- sentence = for words in lines
- line = words[0].w
- for word in words[1...words.length]
- line += if word.s == 1 then word.w else ' ' + word.w
- line
-
- haiku_add = 0
- if sentence.length > 1
- haiku = sentence.join(" / ")
- if haiku.length < 140
- haiku_add = 38
- @el.append('')
- $('#tweetthis').click(() => @sendToServer(lines))
-
- if lines.length != @lastlines
- lh = $('p', @el).height()
- setTimeout((() => @el.animate {top: @board.height() - ((lh * (lines.length + 1.7)) + haiku_add)}), 1)
- @
-
- max_box: =>
- return shape(@board.height() - (16 * 6.7), 0, 480, (16 * 6.7))
-
-
-# A poem is three or more *moved* words in fuzzy collision.
-
-class Poem
- words: []
-
- constructor: (@master) ->
- @poembox = new PoemDisplay(@master.board)
-
- real_poem: (poem = null) ->
- poem = @words if not poem?
- if poem.length > 1 then poem else []
-
- has: (word) ->
- return (w for w in @words when w == word).length > 0
-
- find_bbox: (words = null, sp = 0) ->
- words = @words if not words
- return null if words.length < 2
- [ul, ur, lr, ll] = words[0].shape()
- [mx, my, nx, ny] = [ul.x, ul.y, lr.x, lr.y]
- for i in [1...words.length]
- [ul1, ur1, lr1, ll1] = words[i].shape()
- mx = ul1.x if ul1.x < mx
- my = ul1.y if ul1.y < my
- nx = lr1.x if lr1.x > nx
- ny = lr1.y if lr1.y > ny
- return [{x: mx - sp, y: my - sp}, {x: nx + sp, y: my - sp}, {x: nx + sp, y: ny + sp}, {x: nx + sp, y: my - sp}]
-
- check_dismissal: (word) ->
- # If the word is colliding with another word in the poem, it
- # is not being dismissed.
- fuzzyshape = word.fuzzyshape()
- for w in @words
- if w != word and colliding(fuzzyshape, w.fuzzyshape())
- @inorder()
- return @words
-
- # Remove word from @words
- @words = @real_poem(w for w in @words when w != word)
- return @words if @words.length < 2
-
- # Reconstitute poem from what remains
- find_split_poem = (poem) =>
- # Why 2? Because a poem of length 1 is just a word!
- throw "Don't run on an empty poem!" if poem.length < 2
-
- # Transfer all words in *poem2* that are in collision with
- # words in poem1. If the poems don't change, return them,
- # otherwise repeat the process.
-
- edgefollow = (poem1, poem2) =>
- to_xfr = (w2 for w2 in poem2 when \
- ((w1 for w1 in poem1 when \
- colliding(w1.fuzzyshape(), w2.fuzzyshape())).length > 0))
-
- # Words are not being shuffled around
- return [poem1, poem2] if to_xfr.length == 0
-
- # Else...
- poem1 = poem1.concat(to_xfr)
- poem2 = (w for w in poem2 when w not in poem1)
- edgefollow(poem1, poem2)
-
- wordlist = (i for i in poem)
- first_word = wordlist.pop()
- [lpoem, rpoem] = edgefollow([first_word], wordlist)
- return [] if lpoem.length < 2 and lpoem.length < 2
- return rpoem if lpoem.length < 2
- return lpoem if rpoem.length < 2
- return if Math.vector.magnitude(@find_bbox(lpoem)[0]) < Math.vector.magnitude(@find_bbox(rpoem)[0])
- lpoem
- else
- rpoem
-
- @words = @real_poem(find_split_poem(@words))
- if @words
- @inorder()
- @words
-
- # Looks at the bounding box for the current poem and adds any words
- # to it that are in collision with the existing poem.
- # :: [tiles] -> [tiles]
-
- research_poem: (poem) ->
- nbbox = @find_bbox(poem)
- newpoem = (i for i in poem)
- potentials = (w for w in @master.visible() when \
- (w not in newpoem) and colliding(w.fuzzyshape(), nbbox))
-
- # [word, poem] -> boolean
- collides_with_existing_poem = (nw1, poem1) ->
- fzs1 = nw1.fuzzyshape()
- acw1 = nw1.word
- ((nw2 for nw2 in poem1 when \
- acw1 != nw2.word and \
- colliding(nw2.fuzzyshape(), fzs1)).length > 0)
-
- addenda = (nw for nw in potentials when collides_with_existing_poem(nw, newpoem))
- if addenda.length == 0 then newpoem else @research_poem(newpoem.concat(addenda))
-
-
- # Looks to see if the word has come into collision with another
- # word, creating a new poem.
- # :: tile -> [tiles]
-
- maybe_new_poem: (word) ->
- throw "Do not call maybe_new_poem on a working poem." if @words.length > 0
-
- fuzzyshape = word.fuzzyshape()
- @words = @real_poem((w for w in @master.visible() when \
- colliding(w.fuzzyshape(), fuzzyshape)))
-
- if @words.length
- @words = @research_poem(@words)
-
- @inorder()
- @words
-
-
- check_for_addition: (word) ->
- # See if this word collides with any of the words in our poem:
- fuzzyshape = word.fuzzyshape()
- for w in @words
- if colliding(fuzzyshape, w.fuzzyshape()) and w != word
- @words.push(word)
- # One collision is all it takes.
- break
-
- @words = @research_poem(@words)
- @inorder()
- @words
-
-
- check: (word) ->
- return @words = @maybe_new_poem(word) if @words.length == 0
-
- if @has(word)
- @words = @check_dismissal(word)
- return @words = if @words.length == 0 then @maybe_new_poem(word) else @words
-
- # This word doesn't create a new poem, and it isn't present in
- # our existing poem.
-
- return @words = @check_for_addition(word)
-
-
- inorder: ->
- return @poembox.update([]) if @words.length < 2
- nbbox = @find_bbox(@words)
- avg_height = 0
- for w in @words
- avg_height = avg_height + w.height()
- avg_height = parseInt(avg_height / @words.length)
- ret = []
- for i in (i for i in [nbbox[0].y...nbbox[2].y] by avg_height)
- zbot = i + avg_height
- zone_words = (w for w in @words when w.top() >= i and w.top() < zbot)
- zone_words.sort (a, b) -> a.left() - b.left()
- ret.push((i.word for i in zone_words))
- @poembox.update(ret)
-
-
-
-class Magnets extends Dimensioned
-
- constructor: (@wordlist) ->
- @el = $(window)
- @footer = new Footer($('#footer'))
- @board = new Board($('#board'))
- @recbox = $('#recbox')
- @results = $('#results')
- @words = (new Tile(word, @board, @) for word in @wordlist)
- @resize()
- @poem = new Poem(@)
- $('#shuffler').click(@reword)
- $(window).resize(@resize)
-
- resize: =>
- @unset_dims()
- @board.css('100%', @height() - @footer.height())
- (word.visibleReposition() for word in @words when word.visible)
- @
-
- unoccupied:(left, top, width, height) ->
- reserved = []
- if @poem.real_poem().length > 0
- reserved.push(@poem.find_bbox(null, 10))
- reserved.push(@poem.poembox.max_box())
- target = shape(left, top, width, height)
- for s in reserved
- if colliding(target, s)
- return false
- true
-
- visible: ->
- (w for w in @words when w.visible)
-
- poemed: (word) ->
- @poem.check(word)
-
- livewords: -> (w for w in @words when w.visible)
-
- reword: =>
- poemed = (w for w in @words when @poem.has(w))
- flyprob = AVG_VISIBLE / (@words.length - poemed.length)
- $.when.apply(null, (w.fadeOut() for w in @words when not @poem.has(w))).then () =>
- $.when.apply(null, (w.flyIn() for w in @words when not @poem.has(w) and Math.random() < flyprob)).then () =>
- (w.reset_dims() for w in @words when w.visible)
- @
-
-
-class MusicPlayer
- constructor: (control, tunes) ->
- @control = $(control)
- @control.data('state', 'on')
- @active = true
- @music = new buzz.sound(tunes, {preload:true, autoload: true, loop: true})
- @music.setVolume(0)
- @music.bind 'canplaythrough', () =>
- @music.play()
- @music.fadeTo(60, 10000)
-
- @control.click (ev) =>
- @active = if @active then @fadeOut() else @fadeIn()
-
- fadeOut: ->
- @music.fadeOut(600, () => @music.pause())
- $('img', @control).attr('src', 'mute.png')
- false
-
- fadeIn: ->
- @music.play().fadeIn(1200)
- $('img', @control).attr('src', 'unmute.png')
- true
-
-
-$ ->
- $.ajax
- url: 'js/wordlist.js'
- data: {}
- success: (data) -> (new Magnets(data)).resize().reword()
- error: -> console.log(arguments)
- dataType: 'json'
-
- v = new MusicPlayer('#muteunmute',
- ['media/snowflake_-_Ethereal_Space.mp3',
- 'media/snowflake_-_Ethereal_Space.ogg'])
-
- $( "#message" ).dialog
- autoOpen: false
- show: "fadeIn"
- hide: "fadeOut"
\ No newline at end of file
diff --git a/src/pingbg.png b/src/pingbg.png
new file mode 100644
index 0000000000000000000000000000000000000000..fca5ead4ae8fe87f744eeac2f9ab4ffb41e1d731
GIT binary patch
literal 360700
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