diff --git a/.github/workflows/buildcheck.yml b/.github/workflows/buildcheck.yml index 080c25f1..e12252b0 100644 --- a/.github/workflows/buildcheck.yml +++ b/.github/workflows/buildcheck.yml @@ -8,6 +8,9 @@ on: branches: - "**" +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 9f1ab5f0..eb982e79 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ finder-template-generator-ssg/tsconfig.tsbuildinfo /.vs /finder-template-generator-ssg/third_party_licenses finder-template-generator-ssg/static-stats.html +finder.exe~ diff --git a/.vscode/settings.json b/.vscode/settings.json index 8392ad87..1b4bb337 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,7 @@ "**/.obsidian/": true, "Map.md": true, ".zed": true, + ".vs": true, // "dub": true }, } diff --git a/CHANGELOG.md b/CHANGELOG.md index d01df5e1..542cd852 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,13 @@ _The whole finder CHANGELOG_ -## Newest Version : prob 0.3.16 +## Newest prob 0.3.17 + +- added regex support +- added mcapp minecraft world dashboard +- fixed buildcheck workflow + +## 0.3.16 - 08.09.2026 - added cache creation - added config editor diff --git a/Credits.txt b/Credits.txt new file mode 100644 index 00000000..27fcc0a5 --- /dev/null +++ b/Credits.txt @@ -0,0 +1,214 @@ +Credits for code except the one added with package manager with is used +in finder + +======================================================================= +MCAPP + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 Shadowdara + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +======================================================================= +CSF generate + +======================================================================= + +======================================================================= \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..fd0e154c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# to test the finder install script + +FROM alpine:latest + +RUN apk add --no-cache curl + +CMD ["sh"] diff --git a/README.md b/README.md index ed04dccd..e345a504 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,9 @@ Maybe ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues-pr/shadowdara/finder?logo=github) [![GitHub top language](https://img.shields.io/github/languages/top/shadowdara/finder?logo=go&label=)](https://github.com/shadowdara/finder/) +docker build -t finderinstall . +docker run --rm -it finderinstall + --> # finder diff --git a/cmd/csf/main.go b/cmd/csf/main.go new file mode 100644 index 00000000..fb5706ff --- /dev/null +++ b/cmd/csf/main.go @@ -0,0 +1,130 @@ +package main + +import ( + "fmt" + "os" + + "github.com/shadowdara/finder/internal/bt/config" + conf "github.com/shadowdara/finder/internal/bt/config" + "github.com/shadowdara/finder/internal/bt/core" + "github.com/shadowdara/finder/internal/bt/gitrepo" + "github.com/shadowdara/finder/internal/bt/scriptcompiler" + "github.com/shadowdara/finder/pub/argparser" +) + +func ParseArgs() { + // Main Command + root := argparser.NewCommand("csf", "a simple build helping tool", false) + + root.String("tag", "", "Tag you want to add to a Git Repo", false, "t") + root.Bool("bin", false, "Add the script shortcuts to your terminal path", false) + // root.Bool("compile", false, "Compile the Scripts from the Config File", false) + + compileCMD := argparser.NewCommand("compile", "Compile the Scripts from json file", false) + goinstall := argparser.NewCommand("goinstall", "Install a go programm with CGO", false) + executeCMD := argparser.NewCommand("x", "Execute on of the scripts", false) + executeCMD.PassThrough = true + + gitrepoCMD := argparser.NewCommand("gitrepo", "pack/restore nested .git folders of sub-repositories", false) + packCMD := argparser.NewCommand("pack", "Pack a git repo into a base64 file", false) + restoreCMD := argparser.NewCommand("restore", "restore a git repo from a base64 file", false) + packCMD.String("output", "./git-archives", "Output directory", false, "o") + packCMD.Bool("encrypt", false, "Encrypt the archive with AES-256", false) + packCMD.Bool("base64", false, "Also encode the archive as Base64", false) + restoreCMD.Bool("decrypt", false, "Decrypt the archive", false) + gitrepoCMD.AddSubcommand(packCMD) + gitrepoCMD.AddSubcommand(restoreCMD) + + root.AddSubcommand(goinstall) + root.AddSubcommand(compileCMD) + root.AddSubcommand(executeCMD) + root.AddSubcommand(gitrepoCMD) + + cmd := root.Parse(os.Args[1:]) + + var config = config.LoadConfig() + + switch cmd { + case goinstall: + { + core.RunGoInstall() + return + } + case compileCMD: + { + scriptcompiler.CompileScripts(config) + return + } + case executeCMD: + { + if len(executeCMD.Args) == 0 { + executeCMD.PrintHelp() + return + } + + if err := core.Execute(executeCMD.Args); err != nil { + fmt.Println("Error:", err) + } + return + } + case packCMD: + { + if len(packCMD.Args) == 0 { + if err := gitrepo.PackInteractive(); err != nil { + fmt.Println("Error:", err) + } + return + } + + root := packCMD.Args[0] + if err := gitrepo.Pack(gitrepo.PackOptions{ + Root: root, Output: packCMD.GetString("output"), + Encrypt: packCMD.GetBool("encrypt"), Base64: packCMD.GetBool("base64"), + }); err != nil { + fmt.Println("Error:", err) + } + return + } + case restoreCMD: + { + if len(restoreCMD.Args) < 2 { + if err := gitrepo.RestoreInteractive(); err != nil { + fmt.Println("Error:", err) + } + return + } + + if err := gitrepo.Restore(gitrepo.RestoreOptions{ + Archive: restoreCMD.Args[0], Destination: restoreCMD.Args[1], + Decrypt: restoreCMD.GetBool("decrypt"), + }); err != nil { + fmt.Println("Error:", err) + } + return + } + } + + // Add a Tag to a Git Repo + res := cmd.GetString("tag") + if res != "" { + core.Addtag(res) + return + } + + // add script Path + if cmd.GetBool("bin") == true { + scriptcompiler.Addpath() + return + } + + switch cmd { + default: + conf.Banner() + fmt.Println("CSF Version " + core.GetVersion() + " by Shadowdara") + cmd.PrintHelp() + } +} + +func main() { + ParseArgs() +} diff --git a/cmd/findergen/cli.go b/cmd/findergen/cli.go index e4f4167f..f06f8664 100644 --- a/cmd/findergen/cli.go +++ b/cmd/findergen/cli.go @@ -4,8 +4,11 @@ import ( "fmt" "os" + "github.com/shadowdara/finder/internal/cache" "github.com/shadowdara/finder/internal/finderversion" + "github.com/shadowdara/finder/internal/mcapp" "github.com/shadowdara/finder/pub/argparser" + "github.com/shadowdara/finder/pub/fsd" ) type Conf struct { @@ -19,16 +22,24 @@ func parseCliArgs() Conf { // NEW root := argparser.NewCommand("findergen", - "the http server for finder to create and view templates", false) + "the http server for finder to create and view templates", "Check out github for more infos or the finder website:\nhttps://github.com/shadowdara/finder\nhttps://shadowdara.github.io/finder", false) // Add Version Command versionCmd := argparser.NewCommand( - "--version", "to get the Version of the Program", false, "-v", "v", "version") + "--version", "to get the Version of the Program", "", false, "-v", "v", "version") + + // Collect worlds from finder cache for minecraft worlds + worldsCmd := argparser.NewCommand("worlds", "Collects all Minecraft Worlds from the Finder Cache and creates a JSON file for the WebUI", "", false, "w") + + // Cache Size Command + cacheSizeCmd := argparser.NewCommand("cache-size", "Calculates the Size of the Finder Cache and prints it to the console", "", false, "cachesize", "cs") // Port root.Number("port", 0, "Change the Server Port", false, "p") root.AddSubcommand(versionCmd) + root.AddSubcommand(worldsCmd) + root.AddSubcommand(cacheSizeCmd) // Parse the Arguments cmd := root.Parse(os.Args[1:]) @@ -39,6 +50,37 @@ func parseCliArgs() Conf { case versionCmd: { fmt.Println(finderversion.Version) + os.Exit(0) + } + + case worldsCmd: + { + worlds, err := cache.LoadCache("minecraftworld") + if err != nil { + fmt.Println("Error loading worlds:", err) + os.Exit(1) + } + + mcapp.SaveWorlds(worlds.Paths) + + os.Exit(0) + } + case cacheSizeCmd: + { + path, err := cache.GetCachePath() + if err != nil { + fmt.Println("Error getting cache path:", err) + os.Exit(1) + } + + size, err := fsd.DirSize(path) + if err != nil { + fmt.Println("Error calculating cache size:", err) + os.Exit(1) + } + + fmt.Printf("Cache Size: %.2f MB\n", float64(size)/(1024*1024)) + os.Exit(0) } } diff --git a/cmd/findergen/frontend/assets/about.js b/cmd/findergen/frontend/assets/about.js new file mode 100644 index 00000000..73803fb6 --- /dev/null +++ b/cmd/findergen/frontend/assets/about.js @@ -0,0 +1 @@ +import{j as n,F as l}from"./main_entry.js";import{r as o}from"./mcappheader.js";function m(r){r.innerHTML=n(l,null,n(o,null),n("main",null,n("h1",null,"About"),n("p",null,"Some Infos about the Programm")))}export{m as default}; diff --git a/cmd/findergen/frontend/assets/index.js b/cmd/findergen/frontend/assets/index.js index e5ff057e..80514720 100644 --- a/cmd/findergen/frontend/assets/index.js +++ b/cmd/findergen/frontend/assets/index.js @@ -1 +1 @@ -import{j as e,r as a,F as o}from"./main_entry.js";function u(r,n){r.innerHTML=e(o,null,e("article",{class:"markdown"},e("h1",{id:"finder-server"},"Finder Server"),e("ul",null,e("li",null,e("a",{href:"./creator"},"Template Creator")),e("li",null,e("a",{href:"./viewer"},"Template Viewer")),e("li",null,e("a",{href:"./configeditor"},"Config Editor"))),e("p",null,"Here you can create new templates for finder or view existing, or read the changelog!"),e("ul",null,e("li",null,e("a",{href:"./changelog"},"Changelog")),e("li",null,e("a",{href:"./readme"},"README"))),e("button",{id:"stop"},"Stop Server"),e("h2",null,"Agents.md"),e("p",null,"A Markdown file to explain your AI how to write templates for finder!"),a(n),e("h2",null,"Tools"),e("ul",null,e("li",null,e("a",{href:"./tools/markdowneditor"},"Markdown Editor")),e("li",null,e("a",{href:"./tools/minecraft/tellraw"},"Minecraft Tellraw Updater to SNBT")))));{let t="/api/stop";const l=document.getElementById("stop");l!=null&&(l.onclick=async()=>{await fetch(t)})}}export{u as default}; +import{j as e,r as a,F as o}from"./main_entry.js";function u(r,n){r.innerHTML=e(o,null,e("article",{class:"markdown"},e("h1",{id:"finder-server"},"Finder Server"),e("ul",null,e("li",null,e("a",{href:"./creator"},"Template Creator")),e("li",null,e("a",{href:"./viewer"},"Template Viewer")),e("li",null,e("a",{href:"./configeditor"},"Config Editor")),e("li",null,e("a",{href:"./regexcreator"},"Regex Creator"))),e("p",null,"Here you can create new templates for finder or view existing, or read the changelog!"),e("ul",null,e("li",null,e("a",{href:"./changelog"},"Changelog")),e("li",null,e("a",{href:"./readme"},"README"))),e("button",{id:"stop"},"Stop Server"),e("h2",null,"Agents.md"),e("p",null,"A Markdown file to explain your AI how to write templates for finder!"),a(n),e("h2",null,"Tools"),e("ul",null,e("li",null,e("a",{href:"./tools/markdowneditor"},"Markdown Editor")),e("li",null,e("a",{href:"./tools/minecraft/tellraw"},"Minecraft Tellraw Updater to SNBT")))));{let t="/api/stop";const l=document.getElementById("stop");l!=null&&(l.onclick=async()=>{await fetch(t)})}}export{u as default}; diff --git a/cmd/findergen/frontend/assets/index2.js b/cmd/findergen/frontend/assets/index2.js new file mode 100644 index 00000000..c7c54f1a --- /dev/null +++ b/cmd/findergen/frontend/assets/index2.js @@ -0,0 +1 @@ +import{j as l,F as e}from"./main_entry.js";import{r as n}from"./mcappheader.js";function o(r){r.innerHTML=l(e,null,l(n,null),l("main",null,l("h1",null,"MC APP"),l("p",null,"This is the Homepage of the Server"),l("h3",null,"Features"),l("ul",null,l("li",null,l("a",{href:"./info"},"Info")),l("li",null,l("a",{href:"./worlds"},"World Searcher")))))}export{o as default}; diff --git a/cmd/findergen/frontend/assets/info.js b/cmd/findergen/frontend/assets/info.js new file mode 100644 index 00000000..99588642 --- /dev/null +++ b/cmd/findergen/frontend/assets/info.js @@ -0,0 +1 @@ +import{j as l,F as u}from"./main_entry.js";import{r as e}from"./mcappheader.js";function a(n){n.innerHTML=l(u,null,l(e,null),l("main",null,l("h1",null,"Info"),l("p",null,"Infos about the Programm"),l("h2",null,"Commands"),l("div",null,l("h3",{id:"0"},"0"),l("p",null,"Closes the Program completly")),l("div",null,l("h3",{id:"1"},"1")),l("div",null,l("h3",{id:"2"},"2")),l("div",null,l("h3",null,"exit"),l("p",null,"See ",l("a",{href:"#0"},"0"))),l("div",null,l("h3",null,"quit"),l("p",null,"See ",l("a",{href:"#0"},"0"))),l("div",null,l("h3",null,"status")),l("div",null)))}export{a as default}; diff --git a/cmd/findergen/frontend/assets/main_entry.js b/cmd/findergen/frontend/assets/main_entry.js index 8cb60d74..fec2d35a 100644 --- a/cmd/findergen/frontend/assets/main_entry.js +++ b/cmd/findergen/frontend/assets/main_entry.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cacheviewer.js","./cacheviewer.css","./configeditor.js","./configeditor.css","./creator.js","./creator.css","./home.js","./home.css","./samfile.js","./jquery.module.js","./samfile.css","./markdowneditor.js","./markdowneditor.css","./tellraw.js","./tellraw.css","./viewer.js","./viewer.css"])))=>i.map(i=>d[i]); -const x="modulepreload",_=function(e,s){return new URL(e,s).href},j={},c=function(s,n,a){let u=Promise.resolve();if(n&&n.length>0){const p=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),i=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));u=Promise.allSettled(n.map(o=>{if(o=_(o,a),o in j)return;j[o]=!0;const r=o.endsWith(".css"),T=r?'[rel="stylesheet"]':"";if(!!a)for(let h=p.length-1;h>=0;h--){const f=p[h];if(f.href===o&&(!r||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${T}`))return;const d=document.createElement("link");if(d.rel=r?"stylesheet":x,r||(d.as="script"),d.crossOrigin="",d.href=o,i&&d.setAttribute("nonce",i),document.head.appendChild(d),r)return new Promise((h,f)=>{d.addEventListener("load",h),d.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})}))}function g(p){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=p,window.dispatchEvent(l),!l.defaultPrevented)throw p}return u.then(p=>{for(const l of p||[])l.status==="rejected"&&g(l.reason);return s().catch(g)})},m=""+new URL("markdownrootstyle.css",import.meta.url).href,S=""+new URL("markdownstyle.css",import.meta.url).href,b={cacheviewer:{id:"cacheviewer",type:"component",load:()=>c(()=>import("./cacheviewer.js"),__vite__mapDeps([0,1]),import.meta.url),data:null,styles:[]},changelog:{id:"changelog",type:"markdown",html:'

CHANGELOG

The whole finder CHANGELOG

Newest Version : prob 0.3.16

0.3.15 - 02.09.2025

0.3.14 - 25.06.2026

0.3.13 - 22.06.2026

0.3.12 - 22.06.2026

0.3.11 - 10.04.2026

0.3.10 - 10.04.2026

0.3.9 - 09.04.2026

0.3.8 - 27.02.2026

0.3.7 - 24.02.2026

0.3.6 - 24.02.2026

0.3.5 - 18.02.2026

0.3.4 - 16.02.2026

0.3.3 - 15.02.2026

0.3.2 - 15.02.2026

0.3.1 - 15.02.2026

✨ Features

Runtime Custom Template System

CLI Reorganization & Modernization

Enhanced Help System

Enhanced List & Check Commands

🧪 Testing

📖 Documentation

🔧 Infrastructure

🎯 Quality Improvements

👥 User Experience

📊 Performance

🐛 Bug Fixes & Improvements

📝 Breaking Changes

🙏 Highlights

This version brings the biggest improvement since 0.2.0:


0.3.0 - 23.01.2026

Template System & CLI Foundations

0.2.0 - 23.01.2026

More Templates Better Console Output Help Message

0.1.0 - 17.11.2025

Programm Init

0.0.0 - 30.11.2025

the start

',styles:[m]},configeditor:{id:"configeditor",type:"component",load:()=>c(()=>import("./configeditor.js"),__vite__mapDeps([2,3]),import.meta.url),data:null,styles:[S]},creator:{id:"creator",type:"component",load:()=>c(()=>import("./creator.js"),__vite__mapDeps([4,5]),import.meta.url),data:null,styles:[]},"docs/config":{id:"docs/config",type:"markdown",html:'

Config fields

Port

Port for the findergen server to view and create templates.

Cache

When set to true, the results of will be saved as a cache and can then be used afterwards

Create Cache Database

When set to true, the cache data of finder will be saved in a Git DB. Git is required for this.

Finder Instances

Finder instances which will run at the same time when creating cache for all templates

',styles:[m]},"docs/index":{id:"docs/index",type:"markdown",html:'

Finder Docs

soon

',styles:[m]},home:{id:"home",type:"component",load:()=>c(()=>import("./home.js"),__vite__mapDeps([6,7]),import.meta.url),data:null,styles:[]},index:{id:"index",type:"component",load:()=>c(()=>import("./index.js"),[],import.meta.url),data:`
# AGENTS — Finder Template Authoring Guide
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cacheviewer.js","./cacheviewer.css","./configeditor.js","./configeditor.css","./creator.js","./creator.css","./home.js","./home.css","./about.js","./mcappheader.js","./mcappheader.css","./index2.js","./info.js","./worlds.js","./regexcreator.js","./regexcreator.css","./samfile.js","./jquery.module.js","./samfile.css","./markdowneditor.js","./markdowneditor.css","./tellraw.js","./tellraw.css","./viewer.js","./viewer.css"])))=>i.map(i=>d[i]);
+const T="modulepreload",x=function(e,s){return new URL(e,s).href},j={},r=function(s,n,a){let u=Promise.resolve();if(n&&n.length>0){const p=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),i=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));u=Promise.allSettled(n.map(o=>{if(o=x(o,a),o in j)return;j[o]=!0;const c=o.endsWith(".css"),_=c?'[rel="stylesheet"]':"";if(!!a)for(let h=p.length-1;h>=0;h--){const f=p[h];if(f.href===o&&(!c||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${_}`))return;const d=document.createElement("link");if(d.rel=c?"stylesheet":T,c||(d.as="script"),d.crossOrigin="",d.href=o,i&&d.setAttribute("nonce",i),document.head.appendChild(d),c)return new Promise((h,f)=>{d.addEventListener("load",h),d.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})}))}function g(p){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=p,window.dispatchEvent(l),!l.defaultPrevented)throw p}return u.then(p=>{for(const l of p||[])l.status==="rejected"&&g(l.reason);return s().catch(g)})},m=""+new URL("markdownrootstyle.css",import.meta.url).href,S=""+new URL("markdownstyle.css",import.meta.url).href,b={cacheviewer:{id:"cacheviewer",type:"component",load:()=>r(()=>import("./cacheviewer.js"),__vite__mapDeps([0,1]),import.meta.url),data:null,styles:[]},changelog:{id:"changelog",type:"markdown",html:'

CHANGELOG

The whole finder CHANGELOG

Newest prob 0.3.17

0.3.16 - 08.09.2026

0.3.15 - 02.09.2025

0.3.14 - 25.06.2026

0.3.13 - 22.06.2026

0.3.12 - 22.06.2026

0.3.11 - 10.04.2026

0.3.10 - 10.04.2026

0.3.9 - 09.04.2026

0.3.8 - 27.02.2026

0.3.7 - 24.02.2026

0.3.6 - 24.02.2026

0.3.5 - 18.02.2026

0.3.4 - 16.02.2026

0.3.3 - 15.02.2026

0.3.2 - 15.02.2026

0.3.1 - 15.02.2026

✨ Features

Runtime Custom Template System

CLI Reorganization & Modernization

Enhanced Help System

Enhanced List & Check Commands

🧪 Testing

📖 Documentation

🔧 Infrastructure

🎯 Quality Improvements

👥 User Experience

📊 Performance

🐛 Bug Fixes & Improvements

📝 Breaking Changes

🙏 Highlights

This version brings the biggest improvement since 0.2.0:


0.3.0 - 23.01.2026

Template System & CLI Foundations

0.2.0 - 23.01.2026

More Templates Better Console Output Help Message

0.1.0 - 17.11.2025

Programm Init

0.0.0 - 30.11.2025

the start

',styles:[m]},configeditor:{id:"configeditor",type:"component",load:()=>r(()=>import("./configeditor.js"),__vite__mapDeps([2,3]),import.meta.url),data:null,styles:[S]},creator:{id:"creator",type:"component",load:()=>r(()=>import("./creator.js"),__vite__mapDeps([4,5]),import.meta.url),data:null,styles:[]},"docs/config":{id:"docs/config",type:"markdown",html:'

Config fields

Port

Port for the findergen server to view and create templates.

Cache

When set to true, the results of will be saved as a cache and can then be used afterwards

Create Cache Database

When set to true, the cache data of finder will be saved in a Git DB. Git is required for this.

Finder Instances

Finder instances which will run at the same time when creating cache for all templates

',styles:[m]},"docs/index":{id:"docs/index",type:"markdown",html:'

Finder Docs

soon

',styles:[m]},home:{id:"home",type:"component",load:()=>r(()=>import("./home.js"),__vite__mapDeps([6,7]),import.meta.url),data:null,styles:[]},index:{id:"index",type:"component",load:()=>r(()=>import("./index.js"),[],import.meta.url),data:`
# AGENTS — Finder Template Authoring Guide
 
 This document is for AI assistants such as ChatGPT, Claude, Copilot,
 and similar tools that need to create valid Finder templates.
@@ -617,7 +617,7 @@ If the task is to add a template to this project, keep in mind:
 
 This repo has built-in examples in the templates folder and the project
 docs in the root files.
-
`,styles:[m]},readme:{id:"readme",type:"markdown",html:`

finder

Build StatusBuild CheckDeploy GitHub PagesGitHub contributorsGitHub commit activity (branch)Last CommitGitHub all releasesGitHub release (with filter)GitHub code size in bytesGitHub repo sizeLang CountGitHub Repo stars GitHub forks Maintained Handmade Go Reference

Finder is a small command-line tool written in Go to locate projects based on predefined folder/file structure templates.

In short: you can search for repositories (e.g. .git), project layouts, or your own custom structures using templates.

Commiting

feel free to help the Project by committing Code for the project are Templates. Feel although free to submit Templates via Issues!

Features

Requirements

Installation

Build from source:

go build ./cmd/finder

Or install with go install (Go 1.18+):

go install github.com/shadowdara/finder/cmd/finder@latest

The produced binary is finder (on Windows finder.exe).

Usage

Basic syntax:

finder <template-name>

Example — find Git repositories:

finder git

The program searches the current directory recursively and prints matches based on the template name.

Templates

Default templates are stored in internal/structure/templates. Templates are JSON5 files with fields such as name, files, and folders. A simple template to find Git repositories looks like:

// Template for Git
+
`,styles:[m]},"mcapp/about":{id:"mcapp/about",type:"component",load:()=>r(()=>import("./about.js"),__vite__mapDeps([8,9,10]),import.meta.url),data:null,styles:[]},"mcapp/index":{id:"mcapp/index",type:"component",load:()=>r(()=>import("./index2.js"),__vite__mapDeps([11,9,10]),import.meta.url),data:null,styles:[]},"mcapp/info":{id:"mcapp/info",type:"component",load:()=>r(()=>import("./info.js"),__vite__mapDeps([12,9,10]),import.meta.url),data:null,styles:[]},"mcapp/worlds":{id:"mcapp/worlds",type:"component",load:()=>r(()=>import("./worlds.js"),__vite__mapDeps([13,9,10]),import.meta.url),data:null,styles:[]},readme:{id:"readme",type:"markdown",html:`

finder

Build StatusBuild CheckDeploy GitHub PagesGitHub contributorsGitHub commit activity (branch)Last CommitGitHub all releasesGitHub release (with filter)GitHub code size in bytesGitHub repo sizeLang CountGitHub Repo stars GitHub forks Maintained Handmade Go Reference

Finder is a small command-line tool written in Go to locate projects based on predefined folder/file structure templates.

In short: you can search for repositories (e.g. .git), project layouts, or your own custom structures using templates.

Commiting

feel free to help the Project by committing Code for the project are Templates. Feel although free to submit Templates via Issues!

Features

Requirements

Installation

Build from source:

go build ./cmd/finder

Or install with go install (Go 1.18+):

go install github.com/shadowdara/finder/cmd/finder@latest

The produced binary is finder (on Windows finder.exe).

Usage

Basic syntax:

finder <template-name>

Example — find Git repositories:

finder git

The program searches the current directory recursively and prints matches based on the template name.

Templates

Default templates are stored in internal/structure/templates. Templates are JSON5 files with fields such as name, files, and folders. A simple template to find Git repositories looks like:

// Template for Git
 {
   "name": "*",
   "folders": [{ "name": ".git" }]
@@ -639,4 +639,4 @@ docs in the root files.
   // You dont have to use it obviously
   "create_cache_db": false
 }

For more and detailed Information and more config values check out the config editor here

Mistakes

I thing i would change is to use raw JSON for the templates instead of JSON with comments, which i called JSON5 back then, but it is no real JSON5.

Development

Run tests:

go test ./...

Generate coverage report:

go test -coverprofile=coverage ./...
-go tool cover -html=coverage

Build:

go build ./cmd/finder

Check the available Templates

go run ./cmd/finder check

Contributing

Roadmap / Ideas

License

See LICENSE.


Project: https://github.com/shadowdara/finder

Extra Info

The Project fs-tools was more or less the prototype for finder.

Info Video

(a Youtube Video)

INFO Video 1 about Finder

`,styles:[m]},samfile:{id:"samfile",type:"component",load:()=>c(()=>import("./samfile.js"),__vite__mapDeps([8,9,10]),import.meta.url),data:null,styles:[]},"tools/markdowneditor":{id:"tools/markdowneditor",type:"component",load:()=>c(()=>import("./markdowneditor.js"),__vite__mapDeps([11,12]),import.meta.url),data:null,styles:[]},"tools/minecraft/tellraw":{id:"tools/minecraft/tellraw",type:"component",load:()=>c(()=>import("./tellraw.js"),__vite__mapDeps([13,9,14]),import.meta.url),data:null,styles:[]},viewer:{id:"viewer",type:"component",load:()=>c(()=>import("./viewer.js"),__vite__mapDeps([15,16]),import.meta.url),data:null,styles:[]}},y=Symbol("html");function t(e,s,...n){if(typeof e=="function")return e({...s??{},children:n});const a=new Set(["disabled","checked","selected","readonly","required","multiple","hidden","autofocus","open"]),u=Object.entries(s??{}).filter(([i])=>i!=="children"&&i!=="key").map(([i,o])=>{if(o==null)return"";const r=i==="className"?"class":i;return typeof o=="boolean"&&a.has(r)?o?` ${r}`:"":typeof o=="boolean"?` ${r}="${o}"`:o===!1?"":` ${r}="${C(String(o))}"`}).join(""),g=n.flat(1/0).filter(i=>i!=null&&i!==!1).map(i=>w(i)?i.value:v(String(i))).join(""),l=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]).has(e)?`<${e}${u}>`:`<${e}${u}>${g}`;return q(l)}function E(e){const s=(e.children??[]).flat(1/0).filter(n=>n!=null&&n!==!1).map(n=>w(n)?n.value:v(String(n))).join("");return q(s)}function q(e){return{[y]:!0,value:e,toString(){return e}}}function w(e){return typeof e=="object"&&e!==null&&y in e}function C(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function v(e){return e.replace(/&/g,"&").replace(//g,">")}function H(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function k(e){return q(e)}function I(e){for(const s of e){const n=new URL(s,import.meta.url).href;if(document.head.querySelector(`link[data-page-style="${CSS.escape(n)}"]`))continue;const a=document.createElement("link");a.rel="stylesheet",a.href=n,a.dataset.pageStyle=n,document.head.appendChild(a)}}function A(e){e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"No page id was provided."),t("a",{href:"/"},"Go home"))}function L(e,s){const n=Object.keys(s).filter(a=>a!=="__404__").map(a=>t("li",null,t("a",{href:a==="index"?"/":`/${a}`},a))).join("");e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"Page not found."),t("h2",null,"Available pages"),t("ul",null,k(n)),t("a",{href:"/"},"Go home"))}function O(e,s){e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"Page ",s," not found."),t("a",{href:"/"},"Go home"))}function F(e,s,n){console.error(`[pages] Failed to load page "${s}"`,n),e.innerHTML=t("main",null,t("h1",null,"Failed to load page"),t("p",null,'Could not load "$',s,'".'),t("a",{href:"/"},"Go home"),t("pre",null,`[pages] Failed to load page "${s}"`),t("pre",null,n))}function R(e,s){s.type==="markdown"&&(e.innerHTML=t(E,null,t("a",{href:"../"},"Home"),t("article",{class:"markdown"},k(s.html??""))))}async function G(){const e=document.getElementById("app");if(e==null)throw new Error("Missing #app element");const s=window.PAGE_ID;if(!s){A(e);return}if(s==="__404__"){L(e,b);return}const n=b[s];if(!n){console.error(`[pages] Unknown page id: ${s}`),O(e,s);return}try{if(I(n.styles),n.type==="markdown"){R(e,n);return}await(await n.load()).default(e,n.data)}catch(a){F(e,s,a)}}G();export{E as F,H as e,t as j,k as r}; +go tool cover -html=coverage

Build:

go build ./cmd/finder

Check the available Templates

go run ./cmd/finder check

Contributing

Roadmap / Ideas

License

See LICENSE.


Project: https://github.com/shadowdara/finder

Extra Info

The Project fs-tools was more or less the prototype for finder.

Info Video

(a Youtube Video)

INFO Video 1 about Finder

`,styles:[m]},regexcreator:{id:"regexcreator",type:"component",load:()=>r(()=>import("./regexcreator.js"),__vite__mapDeps([14,15]),import.meta.url),data:null,styles:[]},samfile:{id:"samfile",type:"component",load:()=>r(()=>import("./samfile.js"),__vite__mapDeps([16,17,18]),import.meta.url),data:null,styles:[]},"tools/markdowneditor":{id:"tools/markdowneditor",type:"component",load:()=>r(()=>import("./markdowneditor.js"),__vite__mapDeps([19,20]),import.meta.url),data:null,styles:[]},"tools/minecraft/tellraw":{id:"tools/minecraft/tellraw",type:"component",load:()=>r(()=>import("./tellraw.js"),__vite__mapDeps([21,17,22]),import.meta.url),data:null,styles:[]},viewer:{id:"viewer",type:"component",load:()=>r(()=>import("./viewer.js"),__vite__mapDeps([23,24]),import.meta.url),data:null,styles:[]}},y=Symbol("html");function t(e,s,...n){if(typeof e=="function")return e({...s??{},children:n});const a=new Set(["disabled","checked","selected","readonly","required","multiple","hidden","autofocus","open"]),u=Object.entries(s??{}).filter(([i])=>i!=="children"&&i!=="key").map(([i,o])=>{if(o==null)return"";const c=i==="className"?"class":i;return typeof o=="boolean"&&a.has(c)?o?` ${c}`:"":typeof o=="boolean"?` ${c}="${o}"`:o===!1?"":` ${c}="${I(String(o))}"`}).join(""),g=n.flat(1/0).filter(i=>i!=null&&i!==!1).map(i=>w(i)?i.value:v(String(i))).join(""),l=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]).has(e)?`<${e}${u}>`:`<${e}${u}>${g}`;return q(l)}function E(e){const s=(e.children??[]).flat(1/0).filter(n=>n!=null&&n!==!1).map(n=>w(n)?n.value:v(String(n))).join("");return q(s)}function q(e){return{[y]:!0,value:e,toString(){return e}}}function w(e){return typeof e=="object"&&e!==null&&y in e}function I(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function v(e){return e.replace(/&/g,"&").replace(//g,">")}function G(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function k(e){return q(e)}function C(e){for(const s of e){const n=new URL(s,import.meta.url).href;if(document.head.querySelector(`link[data-page-style="${CSS.escape(n)}"]`))continue;const a=document.createElement("link");a.rel="stylesheet",a.href=n,a.dataset.pageStyle=n,document.head.appendChild(a)}}function A(e){e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"No page id was provided."),t("a",{href:"/"},"Go home"))}function L(e,s){const n=Object.keys(s).filter(a=>a!=="__404__").map(a=>t("li",null,t("a",{href:a==="index"?"/":`/${a}`},a))).join("");e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"Page not found."),t("h2",null,"Available pages"),t("ul",null,k(n)),t("a",{href:"/"},"Go home"))}function O(e,s){e.innerHTML=t("main",null,t("h1",null,"404"),t("p",null,"Page ",s," not found."),t("a",{href:"/"},"Go home"))}function R(e,s,n){console.error(`[pages] Failed to load page "${s}"`,n),e.innerHTML=t("main",null,t("h1",null,"Failed to load page"),t("p",null,'Could not load "$',s,'".'),t("a",{href:"/"},"Go home"),t("pre",null,`[pages] Failed to load page "${s}"`),t("pre",null,n))}function P(e,s){s.type==="markdown"&&(e.innerHTML=t(E,null,t("a",{href:"../"},"Home"),t("article",{class:"markdown"},k(s.html??""))))}async function F(){const e=document.getElementById("app");if(e==null)throw new Error("Missing #app element");const s=window.PAGE_ID;if(!s){A(e);return}if(s==="__404__"){L(e,b);return}const n=b[s];if(!n){console.error(`[pages] Unknown page id: ${s}`),O(e,s);return}try{if(C(n.styles),n.type==="markdown"){P(e,n);return}await(await n.load()).default(e,n.data)}catch(a){R(e,s,a)}}F();export{E as F,G as e,t as j,k as r}; diff --git a/cmd/findergen/frontend/assets/mcappheader.css b/cmd/findergen/frontend/assets/mcappheader.css new file mode 100644 index 00000000..a1119b94 --- /dev/null +++ b/cmd/findergen/frontend/assets/mcappheader.css @@ -0,0 +1 @@ +*{box-sizing:border-box;padding:0;margin:0}body{font-family:Inter,sans-serif;font-family:Roboto,sans-serif;font-family:Open Sans,sans-serif;font-family:Lato,sans-serif;font-family:Poppins,sans-serif}header{background-color:#2c3e50;color:#fff;padding:1rem 2rem;box-shadow:0 2px 5px #0003;position:sticky;top:0;z-index:1000}header nav ul{list-style:none;display:flex;gap:2rem;margin:0;padding:0}header nav ul li a{color:#fff;text-decoration:none;font-weight:700;transition:color .2s}header nav ul li a:hover{color:#1abc9c}main{padding:2rem;font-family:Arial,sans-serif;background-color:#ecf0f1;min-height:100vh}table{width:100%;border-collapse:collapse;margin-top:1rem;background-color:#fff;box-shadow:0 2px 5px #0000001a;border-radius:8px;overflow:hidden;font-family:Arial,sans-serif}table thead{background-color:#616161;color:#fff}table th,table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid #bdc3c7}table th{font-weight:700}table tbody tr:hover{background-color:#f1f1f1;cursor:pointer}table tbody tr:nth-child(2n){background-color:#f9f9f9}table tbody tr:nth-child(2n):hover{background-color:#f9f9f9}a{color:#007e0d}a:hover{color:#0059c0}@media (prefers-color-scheme: dark){body{background:#121212;color:#e0e0e0}header{background:#1f1f1f;box-shadow:0 2px 5px #ffffff1a}main{background:#000}table{background:#1e1e1e;border-color:#333}table thead{background-color:#303030;color:#fff}table th,table td{border-bottom:1px solid #0f0f0f}table tbody tr:hover{background-color:#3e3e3e;cursor:pointer}table tbody tr:nth-child(2n){background-color:#000}table tbody tr:nth-child(2n):hover{background-color:#3e3e3e}a{color:#11ff29}} diff --git a/cmd/findergen/frontend/assets/mcappheader.js b/cmd/findergen/frontend/assets/mcappheader.js new file mode 100644 index 00000000..990a15c2 --- /dev/null +++ b/cmd/findergen/frontend/assets/mcappheader.js @@ -0,0 +1 @@ +import{j as l,F as r}from"./main_entry.js";function u(){return l(r,null,l("header",null,l("nav",null,l("ul",null,l("li",null,l("a",{href:"./"},"Home")),l("li",null,l("a",{href:"./worlds"},"Worlds")),l("li",null,l("a",{href:"./about"},"About")),l("li",null,l("a",{href:"../"},"|-|"))))))}export{u as r}; diff --git a/cmd/findergen/frontend/assets/regexcreator.css b/cmd/findergen/frontend/assets/regexcreator.css new file mode 100644 index 00000000..4e49215c --- /dev/null +++ b/cmd/findergen/frontend/assets/regexcreator.css @@ -0,0 +1 @@ +:root{--bg: #f5f6f2;--panel: #ffffff;--ink: #14181c;--muted: #5b6169;--line: #dbddd6;--teal: #1f6f63;--teal-soft: #e4efec;--brick: #9c3d33;--brick-soft: #f5e7e4;--sans: "Space Grotesk", system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--radius: 10px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}#app{max-width:880px;margin:0 auto;padding:3.5rem 1.5rem 5rem}.intro h1{font-size:1.9rem;font-weight:600;margin:0 0 .6rem;letter-spacing:-.01em}.intro p{margin:0 0 2.5rem;max-width:46ch;color:var(--muted);line-height:1.5}.stage{display:flex;flex-direction:column;gap:1.25rem}.sets{display:grid;grid-template-columns:1fr auto 1fr;align-items:stretch;gap:1rem}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:1.1rem 1.2rem 1.3rem}.card label{display:block;font-size:.85rem;font-weight:500;margin-bottom:.55rem;color:var(--muted)}.card--accept{border-left:3px solid var(--teal)}.card--disallow{border-left:3px solid var(--brick)}textarea{width:100%;resize:vertical;min-height:9rem;border:none;outline:none;background:transparent;font-family:var(--mono);font-size:.92rem;line-height:1.6;color:var(--ink)}textarea::placeholder{color:#b7bab3}.operator{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;color:var(--muted);padding-top:1.2rem}.operator__glyph{font-family:var(--mono);font-size:1.7rem;line-height:1}.operator__label{font-size:.78rem}.settings{display:flex;justify-content:flex-end}.checkbox{display:flex;align-items:center;gap:.5rem;font-size:.88rem;color:var(--muted);cursor:pointer}.checkbox input{accent-color:var(--teal);width:1rem;height:1rem}.flow-line{align-self:center;width:1px;height:1.5rem;background:var(--line)}.card--output{border-left:3px solid var(--ink)}.card__head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:.6rem}.card__head label{margin-bottom:0}#output{display:block;font-family:var(--mono);font-size:.95rem;line-height:1.6;word-break:break-all;white-space:pre-wrap;min-height:1.6em}.card--output[data-state=empty] #output:before{content:'Mindestens ein Wort unter "Akzeptieren" eingeben.';color:var(--muted);font-family:var(--sans);font-size:.88rem}.card--output[data-state=error] #output{color:var(--brick)}#copy-btn{border:1px solid var(--line);background:var(--panel);color:var(--ink);font-family:var(--sans);font-size:.82rem;padding:.35rem .7rem;border-radius:6px;cursor:pointer}#copy-btn:hover:not(:disabled){border-color:var(--ink)}#copy-btn:disabled{opacity:.4;cursor:not-allowed}.tester-row{display:flex;gap:.7rem;align-items:center}#tester{flex:1;border:1px solid var(--line);border-radius:6px;padding:.55rem .7rem;font-family:var(--mono);font-size:.92rem;color:var(--ink);background:var(--panel)}#tester:focus{outline:2px solid var(--ink);outline-offset:1px}.badge{font-size:.85rem;font-weight:500;padding:.4rem .75rem;border-radius:999px;white-space:nowrap;background:var(--line);color:var(--muted)}.badge[data-state=match]{background:var(--teal-soft);color:var(--teal)}.badge[data-state=no-match]{background:var(--brick-soft);color:var(--brick)}@media (max-width: 640px){.sets{grid-template-columns:1fr}.operator{flex-direction:row;padding-top:0}}@media (prefers-reduced-motion: reduce){*{transition:none!important}} diff --git a/cmd/findergen/frontend/assets/regexcreator.js b/cmd/findergen/frontend/assets/regexcreator.js new file mode 100644 index 00000000..6cc0b4eb --- /dev/null +++ b/cmd/findergen/frontend/assets/regexcreator.js @@ -0,0 +1,8 @@ +import{j as e}from"./main_entry.js";function m(){return{children:new Map,isEnd:!1}}function y(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function v(t){const n=m();for(const a of t){let s=n;for(const r of a){let l=s.children.get(r);l||(l=m(),s.children.set(r,l)),s=l}s.isEnd=!0}return n}function x(t){if(t.children.size===0)return"";const n=[],a=[];for(const[s,r]of t.children)if(r.children.size===0&&r.isEnd)a.push(y(s));else{const o=x(r),u=o.includes("|")?`(?:${o})`:o,c=r.isEnd?"?":"";n.push(`${y(s)}${u}${c}`)}return a.length===1?n.push(a[0]):a.length>1&&n.push(`[${a.join("")}]`),n.join("|")}function L(t){if(!t||t.length===0)return null;const n=v(t);return x(n)||null}function C(t,n=[],a={}){if(t.length===0)throw new Error("accept-Array darf nicht leer sein.");const s=a.flags??"",r=s.includes("i"),l=new Set(n.map(c=>r?c.toLocaleLowerCase():c)),o=t.filter(c=>{const i=r?c.toLocaleLowerCase():c;return!l.has(i)});if(o.length===0)throw new Error("Alle akzeptierten Wörter werden abgelehnt.");const u=L(o);if(!u)throw new Error("Keine gültigen akzeptierten Wörter.");return new RegExp(`^(?:${u})$`,s)}function S(t){t.innerHTML=e("main",{class:"regexcreator-page"},e("header",{class:"intro"},e("h1",null,e("span",null,"Regex-Generator")," /"," ",e("span",null,e("a",{href:"../"},"Home"))),e("p",null,"Zwei Wortlisten werden zu einem Muster verrechnet: alles aus der ersten Liste passt, alles aus der zweiten nicht.")),e("main",{class:"stage"},e("section",{class:"sets"},e("div",{class:"card card--accept"},e("label",{for:"accept"},"Akzeptieren"),e("textarea",{id:"accept",rows:"8",spellcheck:"false",placeholder:"ein Wort pro Zeile"},"cat",` +`,"car",` +`,"cart",` +`,"dog",` +`,"do")),e("div",{class:"operator","aria-hidden":"true"},e("span",{class:"operator__glyph"},"∖"),e("span",{class:"operator__label"},"ohne")),e("div",{class:"card card--disallow"},e("label",{for:"disallow"},"Ablehnen"),e("textarea",{id:"disallow",rows:"8",spellcheck:"false",placeholder:"ein Wort pro Zeile"},"cot",` +`,"cats",` +`,"dot"))),e("div",{class:"settings"},e("label",{class:"checkbox"},e("input",{type:"checkbox",id:"ignore-case"}),e("span",null,"Groß-/Kleinschreibung ignorieren"))),e("div",{class:"flow-line","aria-hidden":"true"}),e("section",{class:"card card--output",id:"output-wrap","data-state":"ready"},e("div",{class:"card__head"},e("label",{for:"output"},"Ergebnis"),e("button",{id:"copy-btn",type:"button"},"Kopieren")),e("code",{id:"output"})),e("section",{class:"card card--tester"},e("label",{for:"tester"},"Testen"),e("div",{class:"tester-row"},e("input",{id:"tester",type:"text",placeholder:"Text eingeben …",autocomplete:"off"}),e("span",{id:"badge",class:"badge","data-state":"idle"},"–")))));const n=t.querySelector("#accept"),a=t.querySelector("#disallow"),s=t.querySelector("#ignore-case"),r=t.querySelector("#output-wrap"),l=t.querySelector("#output"),o=t.querySelector("#copy-btn"),u=t.querySelector("#tester"),c=t.querySelector("#badge");let i=null,w;function b(p){return p.split(` +`).map(d=>d.trim()).filter(d=>d.length>0)}function h(){const p=b(n.value),d=b(a.value),E=s.checked?"i":"";if(p.length===0){i=null,l.textContent="",r.dataset.state="empty",o.disabled=!0,f();return}try{i=C(p,d,{flags:E}),l.textContent=i.source,r.dataset.state="ready",o.disabled=!1}catch(g){i=null,l.textContent=g instanceof Error?g.message:String(g),r.dataset.state="error",o.disabled=!0}f()}function f(){const p=u.value;if(!i||p.length===0){c.textContent="–",c.dataset.state="idle";return}const d=i.test(p);c.textContent=d?"passt":"passt nicht",c.dataset.state=d?"match":"no-match"}n.addEventListener("input",h),a.addEventListener("input",h),s.addEventListener("change",h),u.addEventListener("input",f),o.addEventListener("click",async()=>{i&&(await navigator.clipboard.writeText(i.source),o.textContent="Kopiert",window.clearTimeout(w),w=window.setTimeout(()=>{o.textContent="Kopieren"},1200))}),h()}export{S as default}; diff --git a/cmd/findergen/frontend/assets/viewer.js b/cmd/findergen/frontend/assets/viewer.js index 3e28a6a3..ab76c8aa 100644 --- a/cmd/findergen/frontend/assets/viewer.js +++ b/cmd/findergen/frontend/assets/viewer.js @@ -1 +1 @@ -import{j as t,F as U,e as p,r as $}from"./main_entry.js";let I="/api/template/load/all";function N(e){j(e)}let M=t("dialog",{class:"template-modal",id:"template-modal"},t("div",{class:"modal-card"},t("div",{class:"modal-header"},t("div",null,t("span",{class:"eyebrow"},"TEMPLATE"),t("h2",{id:"modal-title"},"Template")),t("button",{class:"modal-close",id:"modal-close",type:"button","aria-label":"Schließen"},"×")),t("div",{class:"modal-tags",id:"modal-tags"}),t("div",{class:"modal-code"},t("pre",{id:"modal-content"})),t("div",{class:"modal-footer"},t("span",{id:"modal-size"}),t("a",{class:"copy-button",type:"button",id:"modal-edit"},"Edit"),t("button",{class:"copy-button",id:"modal-copy",type:"button"},"Copy"))));async function j(e){try{const n=await fetch(I);if(!n.ok)throw new Error(`HTTP ${n.status}`);const s=await n.json(),c=Object.entries(s.templates),i=Object.entries(s.builtin),m=Object.entries(s.custom),r=F(c);e.innerHTML=t(U,null,M,t("main",{class:"viewer"},t("header",{class:"viewer-header"},t("div",null,t("span",{class:"eyebrow"},"TEMPLATE VIEWER")," /",t("span",{class:"eyebrow"},t("a",{href:"../creator"},"TEMPLATE CREATOR")),"/",t("span",{class:"eyebrow"},t("a",{href:"../"},"HOME")),t("h1",null,"Templates"),t("p",null,"Durchsuche und erkunde alle verfügbaren Templates.")),t("div",{class:"stats"},t("div",{class:"stat"},t("strong",null,s.count_templates),t("span",null,"Templates")),t("div",{class:"stat"},t("strong",null,s.count_buildin_templates),t("span",null,"Built-in")),t("div",{class:"stat"},t("strong",null,s.count_custom_templates),t("span",null,"Custom")))),t("section",{class:"toolbar"},t("div",{class:"search"},t("span",null,"⌕"),t("input",{id:"template-search",type:"search",placeholder:"Templates suchen...",autocomplete:"off"})),t("div",{class:"filters"},t("button",{class:"filter active","data-filter":"all"},"Alle",t("span",null,c.length)),t("button",{class:"filter","data-filter":"builtin"},"Built-in",t("span",null,i.length)),t("button",{class:"filter","data-filter":"custom"},"Custom",t("span",null,m.length)))),t("div",{class:"tag-filters"},t("span",{class:"tag-filter-label"},"Tags:"),t("button",{class:"tag-filter active",type:"button","data-tag-filter":"all"},"Alle"),r.map(u=>t("button",{class:"tag-filter",type:"button","data-tag-filter":p(u)},p(u)))),t("br",null),t("section",{class:"template-grid",id:"template-grid"},R(i,"builtin"),R(m,"custom")),t("div",{class:"empty-state",id:"empty-state",hidden:!0},t("div",{class:"empty-icon"},"⌕"),t("h2",null,"Keine Templates gefunden"),t("p",null,"Versuche einen anderen Suchbegriff.")))),J(e)}catch(n){console.error(n),e.innerHTML=t("main",{class:"viewer error"},t("div",{class:"error-card"},t("span",{class:"eyebrow"},"ERROR"),t("h1",null,"Templates konnten nicht geladen werden."),t("p",null,"Der Template-Server ist momentan nicht erreichbar.")))}}function R(e,n){return e.map(([s,c])=>{const i=O(c),m=`../creator?template=${encodeURIComponent(c)}&filename=${encodeURIComponent(s)}`,r=`../cacheviewer?name=${encodeURIComponent(s)}`;return t("article",{class:"template-card","data-type":n,"data-name":p(s).toLowerCase(),"data-tags":p(i.join("|").toLowerCase()),tabindex:"0",role:"button","aria-label":`Template ${p(s)} öffnen`},t("div",{class:"card-header"},t("div",{class:"template-icon"},n==="builtin"?"★":"◇"),t("div",{class:"template-info"},t("h2",null,p(s)),t("span",{class:`badge ${n}`},n==="builtin"?"Built-in":"Template"),i.length?t("div",{class:"template-tags"},i.map(u=>t("button",{class:"tag",type:"button","data-tag":p(u)},p(u)))):"")),t("div",{class:"code-preview"},t("pre",null,$(B(c)))),t("div",{class:"card-footer"},t("span",null,c.length.toLocaleString()," Zeichen"),t("a",{href:r,class:"copy-button"},"View Cache"),t("a",{href:m,class:"copy-button"},"Edit"),t("button",{class:"copy-button","data-content":encodeURIComponent(c),type:"button"},"Copy")))})}function J(e){const n=e.querySelector("#template-search"),s=[...e.querySelectorAll(".template-card")],c=[...e.querySelectorAll(".filter")],i=[...e.querySelectorAll(".tag-filter")],m=e.querySelector("#empty-state"),r=e.querySelector("#template-modal"),u=e.querySelector("#modal-title"),w=e.querySelector("#modal-content"),L=e.querySelector("#modal-tags"),q=e.querySelector("#modal-size"),T=e.querySelector("#modal-close"),d=e.querySelector("#modal-copy"),x=e.querySelector("#modal-edit");let S="all",C="all";function E(){var o,f;const a=(n==null?void 0:n.value.trim().toLowerCase())??"";let l=0;for(const y of s){const h=!a||((o=y.dataset.name)==null?void 0:o.includes(a)),v=S==="all"||y.dataset.type===S,g=((f=y.dataset.tags)==null?void 0:f.split("|").filter(Boolean))??[],b=C==="all"||g.includes(C.toLowerCase()),A=h&&v&&b;y.hidden=!A,A&&l++}m&&(m.hidden=l!==0)}n==null||n.addEventListener("input",E),c.forEach(a=>{a.addEventListener("click",()=>{c.forEach(l=>{l.classList.remove("active")}),a.classList.add("active"),S=a.dataset.filter??"all",E()})}),i.forEach(a=>{a.addEventListener("click",()=>{i.forEach(l=>{l.classList.remove("active")}),a.classList.add("active"),C=a.dataset.tagFilter??"all",E()})}),e.querySelectorAll(".tag").forEach(a=>{a.addEventListener("click",()=>{const l=a.dataset.tag;if(!l)return;const o=e.querySelector(`.tag-filter[data-tag-filter="${CSS.escape(l)}"]`);o==null||o.click()})}),e.querySelectorAll(".copy-button").forEach(a=>{a.addEventListener("click",async()=>{const l=decodeURIComponent(a.dataset.content??"");await navigator.clipboard.writeText(l);const o=a.textContent;a.textContent="Copied ✓",setTimeout(()=>{a.textContent=o},1200)})});function k(a){var h,v;const l=a,o=((h=l.querySelector("h2"))==null?void 0:h.textContent)??"Template",f=((v=l.querySelector("pre"))==null?void 0:v.textContent)??"",y=[...l.querySelectorAll(".tag")].map(g=>{var b;return((b=g.textContent)==null?void 0:b.trim())??""}).filter(Boolean);if(!(!r||!u||!w)){if(u.textContent=o,w.textContent=f,q&&(q.textContent=`${f.length.toLocaleString()} Zeichen`),L&&(L.innerHTML=y.map(g=>`${p(g)}`).join("")),d&&(d.dataset.content=encodeURIComponent(f),d.textContent="Copy"),x){const g=JSON.stringify(JSON.parse(f),null,0);x.href=`../creator?template=${encodeURIComponent(g)}&filename=${encodeURIComponent(o)}`}r.showModal()}}e.addEventListener("click",a=>{const l=a.target;if(l.closest(".copy-button")||l.closest(".tag"))return;const o=l.closest(".template-card");o&&k(o)}),e.addEventListener("keydown",a=>{const o=a.target.closest(".template-card");o&&(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),k(o))}),T==null||T.addEventListener("click",()=>{r==null||r.close()}),r==null||r.addEventListener("click",a=>{a.target===r&&r.close()}),d==null||d.addEventListener("click",async()=>{const a=decodeURIComponent(d.dataset.content??"");await navigator.clipboard.writeText(a),d.textContent="Copied ✓",setTimeout(()=>{d.textContent="Copy"},1200)})}function B(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function O(e){try{const n=JSON.parse(e);return Array.isArray(n.tags)?n.tags.filter(s=>typeof s=="string").map(s=>s.trim()).filter(Boolean):[]}catch{return[]}}function F(e){const n=new Set;for(const[,s]of e)for(const c of O(s))n.add(c);return[...n].sort((s,c)=>s.localeCompare(c))}export{N as default}; +import{j as t,F as _,e as d,r as U}from"./main_entry.js";let $="/api/template/load/all";function N(e){j(e)}let I=t("dialog",{class:"template-modal",id:"template-modal"},t("div",{class:"modal-card"},t("div",{class:"modal-header"},t("div",null,t("span",{class:"eyebrow"},"TEMPLATE"),t("h2",{id:"modal-title"},"Template")),t("button",{class:"modal-close",id:"modal-close",type:"button","aria-label":"Schließen"},"×")),t("div",{class:"modal-tags",id:"modal-tags"}),t("div",{class:"modal-code"},t("pre",{id:"modal-content"})),t("div",{class:"modal-footer"},t("span",{id:"modal-size"}),t("a",{class:"copy-button",type:"button",id:"modal-edit"},"Edit"),t("button",{class:"copy-button",id:"modal-copy",type:"button"},"Copy"))));function M(e,a){const s=F(a.templates);e.innerHTML=t(_,null,I,t("main",{class:"viewer"},t("header",{class:"viewer-header"},t("div",null,t("span",{class:"eyebrow"},"TEMPLATE VIEWER")," /"," ",t("span",{class:"eyebrow"},t("a",{href:"../creator"},"TEMPLATE CREATOR"))," ","/"," ",t("span",{class:"eyebrow"},t("a",{href:"../"},"HOME")),t("h1",null,"Templates"),t("p",null,"Search and explore all available templates.")),t("div",{class:"stats"},t("div",{class:"stat"},t("strong",null,a.count_templates),t("span",null,"Templates")),t("div",{class:"stat"},t("strong",null,a.count_buildin_templates),t("span",null,"Built-in")),t("div",{class:"stat"},t("strong",null,a.count_custom_templates),t("span",null,"Custom")))),t("section",{class:"toolbar"},t("div",{class:"search"},t("span",null,"⌕"),t("input",{id:"template-search",type:"search",placeholder:"Search templates...",autocomplete:"off"})),t("div",{class:"filters"},t("button",{class:"filter active","data-filter":"all"},"All",t("span",null,a.templates.length)),t(_,null,t("button",{class:"filter","data-filter":"builtin"},"Built-in",t("span",null,a.builtin.length)),t("button",{class:"filter","data-filter":"custom"},"Custom",t("span",null,a.custom.length))))),t("div",{class:"tag-filters"},t("span",{class:"tag-filter-label"},"Tags:"),t("button",{class:"tag-filter active",type:"button","data-tag-filter":"all"},"All"),s.map(c=>t("button",{class:"tag-filter",type:"button","data-tag-filter":d(c)},d(c)))),t("br",null),t("section",{class:"template-grid",id:"template-grid"},k(a.builtin,"builtin"),k(a.custom,"custom")),t("div",{class:"empty-state",id:"empty-state",hidden:!0},t("div",{class:"empty-icon"},"⌕"),t("h2",null,"No templates found"),t("p",null,"Try a different search term.")))),J(e)}async function j(e){try{const a=await fetch($);if(!a.ok)throw new Error(`HTTP ${a.status}`);const s=await a.json();M(e,{templates:Object.entries(s.templates),builtin:Object.entries(s.builtin),custom:Object.entries(s.custom),count_templates:s.count_templates,count_buildin_templates:s.count_buildin_templates,count_custom_templates:s.count_custom_templates})}catch(a){console.error(a),e.innerHTML=t("main",{class:"viewer error"},t("div",{class:"error-card"},t("span",{class:"eyebrow"},"ERROR"),t("h1",null,"Templates could not be loaded."),t("p",null,"The template server is currently not reachable.")))}}function k(e,a){return e.map(([s,c])=>{const m=O(c),y=`../creator?template=${encodeURIComponent(c)}&filename=${encodeURIComponent(s)}`,r=`../cacheviewer?name=${encodeURIComponent(s)}`;return t("article",{class:"template-card","data-type":a,"data-name":d(s).toLowerCase(),"data-tags":d(m.join("|").toLowerCase()),tabindex:"0",role:"button","aria-label":`Template ${d(s)} open`},t("div",{class:"card-header"},t("div",{class:"template-icon"},a==="builtin"?"★":"◇"),t("div",{class:"template-info"},t("h2",null,d(s)),t("span",{class:`badge ${a}`},a==="builtin"?"Built-in":"Template"),m.length?t("div",{class:"template-tags"},m.map(g=>t("button",{class:"tag",type:"button","data-tag":d(g)},d(g)))):"")),t("div",{class:"code-preview"},t("pre",null,U(B(c)))),t("div",{class:"card-footer"},t("span",null,c.length.toLocaleString()," Zeichen"),t("a",{href:r,class:"copy-button"},"View Cache"),t("a",{href:y,class:"copy-button"},"Edit"),t("button",{class:"copy-button","data-content":encodeURIComponent(c),type:"button"},"Copy")))})}function J(e){const a=e.querySelector("#template-search"),s=[...e.querySelectorAll(".template-card")],c=[...e.querySelectorAll(".filter")],m=[...e.querySelectorAll(".tag-filter")],y=e.querySelector("#empty-state"),r=e.querySelector("#template-modal"),g=e.querySelector("#modal-title"),w=e.querySelector("#modal-content"),L=e.querySelector("#modal-tags"),q=e.querySelector("#modal-size"),S=e.querySelector("#modal-close"),i=e.querySelector("#modal-copy"),x=e.querySelector("#modal-edit");let C="all",T="all";function E(){var o,p;const l=(a==null?void 0:a.value.trim().toLowerCase())??"";let n=0;for(const f of s){const h=!l||((o=f.dataset.name)==null?void 0:o.includes(l)),v=C==="all"||f.dataset.type===C,u=((p=f.dataset.tags)==null?void 0:p.split("|").filter(Boolean))??[],b=T==="all"||u.includes(T.toLowerCase()),R=h&&v&&b;f.hidden=!R,R&&n++}y&&(y.hidden=n!==0)}a==null||a.addEventListener("input",E),c.forEach(l=>{l.addEventListener("click",()=>{c.forEach(n=>{n.classList.remove("active")}),l.classList.add("active"),C=l.dataset.filter??"all",E()})}),m.forEach(l=>{l.addEventListener("click",()=>{m.forEach(n=>{n.classList.remove("active")}),l.classList.add("active"),T=l.dataset.tagFilter??"all",E()})}),e.querySelectorAll(".tag").forEach(l=>{l.addEventListener("click",()=>{const n=l.dataset.tag;if(!n)return;const o=e.querySelector(`.tag-filter[data-tag-filter="${CSS.escape(n)}"]`);o==null||o.click()})}),e.querySelectorAll(".copy-button").forEach(l=>{l.addEventListener("click",async()=>{const n=decodeURIComponent(l.dataset.content??"");await navigator.clipboard.writeText(n);const o=l.textContent;l.textContent="Copied ✓",setTimeout(()=>{l.textContent=o},1200)})});function A(l){var h,v;const n=l,o=((h=n.querySelector("h2"))==null?void 0:h.textContent)??"Template",p=((v=n.querySelector("pre"))==null?void 0:v.textContent)??"",f=[...n.querySelectorAll(".tag")].map(u=>{var b;return((b=u.textContent)==null?void 0:b.trim())??""}).filter(Boolean);if(!(!r||!g||!w)){if(g.textContent=o,w.textContent=p,q&&(q.textContent=`${p.length.toLocaleString()} Zeichen`),L&&(L.innerHTML=f.map(u=>`${d(u)}`).join("")),i&&(i.dataset.content=encodeURIComponent(p),i.textContent="Copy"),x){const u=JSON.stringify(JSON.parse(p),null,0);x.href=`../creator?template=${encodeURIComponent(u)}&filename=${encodeURIComponent(o)}`}r.showModal()}}e.addEventListener("click",l=>{const n=l.target;if(n.closest(".copy-button")||n.closest(".tag"))return;const o=n.closest(".template-card");o&&A(o)}),e.addEventListener("keydown",l=>{const o=l.target.closest(".template-card");o&&(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),A(o))}),S==null||S.addEventListener("click",()=>{r==null||r.close()}),r==null||r.addEventListener("click",l=>{l.target===r&&r.close()}),i==null||i.addEventListener("click",async()=>{const l=decodeURIComponent(i.dataset.content??"");await navigator.clipboard.writeText(l),i.textContent="Copied ✓",setTimeout(()=>{i.textContent="Copy"},1200)})}function B(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function O(e){try{const a=JSON.parse(e);return Array.isArray(a.tags)?a.tags.filter(s=>typeof s=="string").map(s=>s.trim()).filter(Boolean):[]}catch{return[]}}function F(e){const a=new Set;for(const[,s]of e)for(const c of O(s))a.add(c);return[...a].sort((s,c)=>s.localeCompare(c))}export{N as default}; diff --git a/cmd/findergen/frontend/assets/worlds.js b/cmd/findergen/frontend/assets/worlds.js new file mode 100644 index 00000000..3a35a7e9 --- /dev/null +++ b/cmd/findergen/frontend/assets/worlds.js @@ -0,0 +1 @@ +import{j as t,F as r}from"./main_entry.js";import{r as f}from"./mcappheader.js";function L(d){d.innerHTML=t(r,null,t(f,null),t("main",null,t("table",null,t("thead",null,t("tr",null,t("th",null,"Icon"),t("th",null,"Folder Name"),t("th",null,"Last Modified"),t("th",null,"Size"),t("th",null,"Path"))),t("tbody",{id:"world-list"}))));async function c(){try{let l="";const _=(await(await fetch(l+"/api/system")).json()).os==="windows",h=await(await fetch(l+"/api/mcapp/worlds")).json(),s=document.getElementById("world-list");s.innerHTML="",h.forEach(n=>{const a=document.createElement("tr");let u=n.icon,o=n.path;const i=n.path.split(/[/\\]+/),p=i[i.length-2],m=encodeURIComponent(o.replace(/[/\\]level\.dat$/i,""));let e=n.size;e>=1024*1024?e=(e/(1024*1024)).toFixed(2)+" MB":e>=1024?e=(e/1024).toFixed(2)+" KB":e=e+" B",a.innerHTML=t(r,null,t("td",null,t("img",{src:l+`/___static___/webcache/${u}`,width:"32"})),t("td",null,p),t("td",null,n.last_modified),t("td",null,e),t("td",null,t("a",{target:"_blanc",href:l+`/api/openfolder?path=${m}`},o))),s.appendChild(a)})}catch(l){console.error("Fehler beim Laden:",l)}}c()}export{L as default}; diff --git a/cmd/findergen/frontend/dependencies.txt b/cmd/findergen/frontend/dependencies.txt index cea58f18..c8f77313 100644 --- a/cmd/findergen/frontend/dependencies.txt +++ b/cmd/findergen/frontend/dependencies.txt @@ -161,7 +161,7 @@ fast-levenshtein@2.0.6 -- MIT fdir@6.5.0 -- MIT file-entry-cache@8.0.0 -- MIT find-up@5.0.0 -- MIT -finder-template-generator@0.3.16 -- UNLICENSED +finder-template-generator@0.3.17 -- UNLICENSED flat-cache@4.0.1 -- MIT flatted@3.4.4 -- ISC fs.realpath@1.0.0 -- ISC diff --git a/cmd/findergen/frontend/install.sh b/cmd/findergen/frontend/install.sh index 1b080010..69e88ea6 100644 --- a/cmd/findergen/frontend/install.sh +++ b/cmd/findergen/frontend/install.sh @@ -86,3 +86,8 @@ echo echo "Finder installed successfully!" echo echo " $INSTALL_DIR/finder" + +if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then + echo "export PATH=\"\$PATH:$INSTALL_DIR\"" >> "$HOME/.bashrc" + export PATH="$PATH:$INSTALL_DIR" +fi diff --git a/cmd/findergen/frontend/mcapp/about/index.html b/cmd/findergen/frontend/mcapp/about/index.html new file mode 100644 index 00000000..66f86341 --- /dev/null +++ b/cmd/findergen/frontend/mcapp/about/index.html @@ -0,0 +1 @@ +Finder
\ No newline at end of file diff --git a/cmd/findergen/frontend/mcapp/index.html b/cmd/findergen/frontend/mcapp/index.html new file mode 100644 index 00000000..6fc563c7 --- /dev/null +++ b/cmd/findergen/frontend/mcapp/index.html @@ -0,0 +1 @@ +Finder
\ No newline at end of file diff --git a/cmd/findergen/frontend/mcapp/info/index.html b/cmd/findergen/frontend/mcapp/info/index.html new file mode 100644 index 00000000..7e624661 --- /dev/null +++ b/cmd/findergen/frontend/mcapp/info/index.html @@ -0,0 +1 @@ +Finder
\ No newline at end of file diff --git a/cmd/findergen/frontend/mcapp/worlds/index.html b/cmd/findergen/frontend/mcapp/worlds/index.html new file mode 100644 index 00000000..db9e768c --- /dev/null +++ b/cmd/findergen/frontend/mcapp/worlds/index.html @@ -0,0 +1 @@ +Finder
\ No newline at end of file diff --git a/cmd/findergen/frontend/regexcreator/index.html b/cmd/findergen/frontend/regexcreator/index.html new file mode 100644 index 00000000..514c4291 --- /dev/null +++ b/cmd/findergen/frontend/regexcreator/index.html @@ -0,0 +1 @@ +Finder
\ No newline at end of file diff --git a/cmd/findergen/main.go b/cmd/findergen/main.go index 6bf98e11..3ffc6250 100644 --- a/cmd/findergen/main.go +++ b/cmd/findergen/main.go @@ -11,6 +11,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strconv" "strings" "sync" @@ -19,7 +20,9 @@ import ( "github.com/shadowdara/finder/internal/cache" "github.com/shadowdara/finder/internal/config" "github.com/shadowdara/finder/internal/finderversion" + "github.com/shadowdara/finder/internal/mcapp" "github.com/shadowdara/finder/internal/templates" + "github.com/shadowdara/finder/pub/fsd" "github.com/shadowdara/finder/pub/json5" ) @@ -128,6 +131,23 @@ func main() { }) }) + // System Info + mux.HandleFunc("/api/system", func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) + return + } + + w.Header().Set("Content-Type", "application/json") + + json.NewEncoder(w).Encode(map[string]any{ + "go_version": runtime.Version(), + "os": runtime.GOOS, + "arch": runtime.GOARCH, + "cpus": runtime.NumCPU(), + }) + }) + // Stop Server mux.HandleFunc("/api/stop", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { @@ -179,6 +199,40 @@ func main() { }) }) + // Open a folder in the system's file explorer + mux.HandleFunc("/api/openfolder", func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) + return + } + + path := r.URL.Query().Get("path") + + if path == "" { + http.Error(w, "Missing path", http.StatusBadRequest) + return + } + + if err := fsd.OpenFolder(path); err != nil { + log.Printf("openfolder: %v", err) + http.Error(w, "Failed to open folder", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusOK) + + fmt.Fprint(w, ` + + Folder Opened + + +

Folder opened - Tab is closing or close it manually if this didn't work!

+ + + `) + }) + // Create a Template mux.HandleFunc("/api/template/create", func(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { @@ -480,6 +534,33 @@ func main() { }) }) + // mcapp handler + + // worlds handler + mux.HandleFunc("/api/mcapp/worlds", func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) + return + } + + worlds := mcapp.LoadWorlds() + + w.Header().Set("Content-Type", "application/json") + + json.NewEncoder(w).Encode(worlds) + }) + + webcachePath := filepath.Join(path, "webcache") + + // Static files from the webcache + mux.Handle( + "/___static___/webcache/", + http.StripPrefix( + "/___static___/webcache/", + http.FileServer(http.Dir(webcachePath)), + ), + ) + // Embedded frontend staticFS, err := fs.Sub(frontend, "frontend") if err != nil { diff --git a/finder-template-generator-ssg/bun.lock b/finder-template-generator-ssg/bun.lock new file mode 100644 index 00000000..3189839e --- /dev/null +++ b/finder-template-generator-ssg/bun.lock @@ -0,0 +1,977 @@ +{ + "lockfileVersion": 1, + "configVersion": 0, + "workspaces": { + "": { + "name": "finder-template-generator", + "dependencies": { + "@shadowdara/dlib": "^0.0.4", + "@tailwindcss/vite": "^4.3.3", + "@vitejs/devtools": "^0.7.2", + "highlight.js": "^11.12.0", + "jquery": "^4.0.0", + "tailwindcss": "^4.3.3", + "tellraw-parser": "^1.0.2", + "unplugin-remove": "^1.0.3", + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@rollup/plugin-yaml": "^5.0.0", + "@types/html-minifier-terser": "^7.0.2", + "@types/jquery": "^4.0.1", + "@types/license-checker": "^25.0.6", + "@types/node": "^26.5.0", + "chalk": "^6.0.0", + "eslint": "^10.9.1", + "html-minifier-terser": "^7.2.0", + "license-checker": "^25.0.1", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-visualizer": "^7.1.1", + "sass": "^1.104.0", + "tinyglobby": "^0.2.17", + "tsx": "^4.23.13", + "typescript": "^5.5.0", + "typescript-eslint": "^8.69.0", + "vite": "^5.4.0", + "vite-plugin-eslint": "^1.8.1", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], + + "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], + + "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], + + "@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.29.7", "", {}, "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw=="], + + "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], + + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], + + "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], + + "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], + + "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], + + "@devframes/hub": ["@devframes/hub@0.9.12", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "destr": "^2.0.5", "h3": "^2.0.1-rc.29", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "tinyexec": "^1.3.0", "ufo": "^1.6.4", "zigpty": "^0.2.1" }, "peerDependencies": { "devframe": "0.9.12" } }, "sha512-4QTBpH0PWQEl7GJKpDHF/uA4S3pFGisfzJJucY7BKytHYRoeLi8Cu16Jz+mEngu84ODgONDzS6Ax0ZiurnoZSA=="], + + "@devframes/hub-ui": ["@devframes/hub-ui@0.9.12", "", { "peerDependencies": { "@devframes/hub": "0.9.12", "@devframes/json-render": "0.9.12", "devframe": "0.9.12" } }, "sha512-FIDtve50JAUYNgJsPAG+hNHKMSEsYMqlmm0kHmsw9wuqRDgY/ydshBjj7eKqc/XzxL3zy8EnETP751M4y6TH4g=="], + + "@devframes/json-render": ["@devframes/json-render@0.9.12", "", { "dependencies": { "@json-render/core": "^0.20.0", "@standard-schema/spec": "^1.1.0", "zod": "^4.5.4" }, "peerDependencies": { "@devframes/hub": "0.9.12", "devframe": "0.9.12" } }, "sha512-9JU6ug8AIoHGs0rpS174caJlg5LQmYa3fYvxyihPtuQfmrvpaVqepMiJmxmVVaNLuX0VjQNy/gsxD4Ns4S1mpA=="], + + "@devframes/json-render-ui": ["@devframes/json-render-ui@0.9.12", "", { "peerDependencies": { "@devframes/hub": "0.9.12", "devframe": "0.9.12" } }, "sha512-9p63mIsBIS0q5sPFpQcA1mXdUsb85VKydCq320GUQzuzHg7UvwI5qxd1O+Tfd8u+nazmdB7yyobzlp2ocSvt7w=="], + + "@devframes/plugin-inspect": ["@devframes/plugin-inspect@0.9.12", "", { "dependencies": { "cac": "^7.0.0" }, "peerDependencies": { "@devframes/plugin-inspect--assets": "0.9.12", "devframe": "0.9.12", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@devframes/plugin-inspect--assets"], "bin": { "devframe-inspect": "bin.mjs" } }, "sha512-kdbqVVFycEpSLAR7dJQhLnQoZ4yTo1nrlXbctJwkZVkAMuwAf18PBnjUTO2WoXwjIFQIq0g5XQq6uFeN+Uya2A=="], + + "@devframes/plugin-messages": ["@devframes/plugin-messages@0.9.12", "", { "dependencies": { "@devframes/service-open": "0.9.12", "cac": "^7.0.0" }, "peerDependencies": { "@devframes/hub": "0.9.12", "@devframes/plugin-messages--assets": "0.9.12", "devframe": "0.9.12", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@devframes/plugin-messages--assets"], "bin": { "devframe-messages": "bin.mjs" } }, "sha512-IStDziP+qSP8YG+gIIUfdoF8I7xJp2X653WCNPmJ170JgiFVksgWPY4ZND9yNlVSgCaqeFng/4rY9Y0DDMsQwQ=="], + + "@devframes/plugin-terminals": ["@devframes/plugin-terminals@0.9.12", "", { "dependencies": { "@devframes/vite": "0.9.12", "cac": "^7.0.0", "zigpty": "^0.2.1" }, "peerDependencies": { "@devframes/plugin-terminals--assets": "0.9.12", "devframe": "0.9.12", "vite": "^8.0.0" }, "optionalPeers": ["@devframes/plugin-terminals--assets"], "bin": { "devframe-terminals": "bin.mjs" } }, "sha512-UuaJ1U0Hwq4Tlry7F/KRizNhS+XFNcP/I5DFRxXK8pKrt53wUfFJ5Kc5mi+tZrbCDeeu9u/mTQEZWbQfs+W5Ow=="], + + "@devframes/service-open": ["@devframes/service-open@0.9.12", "", { "dependencies": { "pathe": "^2.0.3" }, "peerDependencies": { "devframe": "0.9.12" } }, "sha512-VsuDzcMU/tUXIPcoEy+rzzCRqO8pD2Apq+RzV2XmQoHWNHBQ6mQhWxuO8ETMhLBruUksTVtEyexP5jmpbYtVIA=="], + + "@devframes/vite": ["@devframes/vite@0.9.12", "", { "dependencies": { "pathe": "^2.0.3" }, "peerDependencies": { "@devframes/hub": "0.9.12", "@devframes/hub-ui": "0.9.12", "devframe": "0.9.12", "vite": "^7.0.0 || ^8.0.0" } }, "sha512-qciobX39NyIw58r9G250k/7F8rQAKC7zyqgok+beBPTELQkSO401LwSyTjRwzRV/5hagRb1dlElTWlplh0DKgg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.10.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg=="], + + "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="], + + "@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="], + + "@eslint/config-helpers": ["@eslint/config-helpers@0.7.0", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw=="], + + "@eslint/core": ["@eslint/core@1.2.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ=="], + + "@eslint/js": ["@eslint/js@10.0.1", "", { "peerDependencies": { "eslint": "^10.0.0" } }, "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA=="], + + "@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="], + + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.2", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A=="], + + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], + + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], + + "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], + + "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@json-render/core": ["@json-render/core@0.20.0", "", { "dependencies": { "zod": "^4.3.6" }, "peerDependencies": { "zod": "^4.0.0" } }, "sha512-cXAXn7h3QaylefQgh85AEGPuVq4C8SJ3k9JqigWLJhaBSozF1Fmsrm43DP16RmkqNiVgj5pBRdmB48lEO5qlow=="], + + "@modelcontextprotocol/core": ["@modelcontextprotocol/core@2.0.0", "", { "dependencies": { "zod": "^4.2.0" } }, "sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA=="], + + "@modelcontextprotocol/server": ["@modelcontextprotocol/server@2.0.0", "", { "dependencies": { "@modelcontextprotocol/core": "2.0.0", "zod": "^4.2.0" } }, "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw=="], + + "@napi-rs/lzma-linux-x64-gnu": ["@napi-rs/lzma-linux-x64-gnu@1.5.1", "", { "os": "linux", "cpu": "x64" }, "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ=="], + + "@oxc-project/types": ["@oxc-project/types@0.148.0", "", {}, "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A=="], + + "@parcel/watcher": ["@parcel/watcher@2.6.0", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.4" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.6.0", "@parcel/watcher-darwin-arm64": "2.6.0", "@parcel/watcher-darwin-x64": "2.6.0", "@parcel/watcher-freebsd-x64": "2.6.0", "@parcel/watcher-linux-arm-glibc": "2.6.0", "@parcel/watcher-linux-arm-musl": "2.6.0", "@parcel/watcher-linux-arm64-glibc": "2.6.0", "@parcel/watcher-linux-arm64-musl": "2.6.0", "@parcel/watcher-linux-x64-glibc": "2.6.0", "@parcel/watcher-linux-x64-musl": "2.6.0", "@parcel/watcher-win32-arm64": "2.6.0", "@parcel/watcher-win32-x64": "2.6.0" } }, "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w=="], + + "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.6.0", "", { "os": "android", "cpu": "arm64" }, "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA=="], + + "@parcel/watcher-darwin-arm64": ["@parcel/watcher-darwin-arm64@2.6.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw=="], + + "@parcel/watcher-darwin-x64": ["@parcel/watcher-darwin-x64@2.6.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw=="], + + "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.6.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ=="], + + "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.6.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg=="], + + "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.6.0", "", { "os": "linux", "cpu": "arm" }, "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw=="], + + "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g=="], + + "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA=="], + + "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A=="], + + "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw=="], + + "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.6.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ=="], + + "@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.6.0", "", { "os": "win32", "cpu": "x64" }, "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A=="], + + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.7", "", { "os": "android", "cpu": "arm" }, "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ=="], + + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.7", "", { "os": "android", "cpu": "arm64" }, "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw=="], + + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw=="], + + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ=="], + + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA=="], + + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.7", "", { "os": "linux", "cpu": "arm" }, "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ=="], + + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg=="], + + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q=="], + + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg=="], + + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw=="], + + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.7", "", { "os": "linux", "cpu": "x64" }, "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA=="], + + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.7", "", { "os": "linux", "cpu": "x64" }, "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw=="], + + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.7", "", { "os": "none", "cpu": "arm64" }, "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.7", "", { "os": "win32", "cpu": "x64" }, "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + + "@rollup/plugin-yaml": ["@rollup/plugin-yaml@5.0.0", "", { "dependencies": { "@rollup/pluginutils": "^5.3.0", "js-yaml": "^4.1.0", "tosource": "^2.0.0-alpha.3" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" } }, "sha512-9XOiRGYJjDwmEwR15kuxw+RytZFKtEWshoXuITrtS6+57BVMQMzDfhmSO/xfQOAY5psQv1IrxhQTUqPNppe4lQ=="], + + "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" } }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.63.1", "", { "os": "android", "cpu": "arm" }, "sha512-UZ8sUxPTiHWYX9QNdJedb1kDZSpS1t/VPWBWGSgqHNi9w3Cu6IXvu2mzbhiTiPvtrqgTQJ+zqiAq2iPIPilpaQ=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.63.1", "", { "os": "android", "cpu": "arm64" }, "sha512-cQ4nFQABN5cDvDpbvJ7bMStCpnaVxynZrRMfUJYgxcIk9Sh54FIO1vtfkg0B69REjER77ioZ/ov+eAApx/KmLQ=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.63.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.63.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-pvD16V939D3CloK0+qikpGaxiPrDUXTe7Y5cWOMkMSy7m1cawa8EGy/kXYi/G/cKAC4HDAbSnzCIk1WmsoOKXg=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.63.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-pcFGeL2345VwdTnJhA6zLbew+YgWB0qBG2+dMtXjCicf6+rm6kO6cOoh5VnTe0ZMrMRgRyuHmCJxZWrIdzYuOw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.63.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mRJlqSRulVzcKq/LKA6ICSIc3K/l4fzlVn/gePn2nXIHy8seRi5z/eeRE0d/XMBxcMldiXtQTSpRj0tkkC3g8Q=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.63.1", "", { "os": "linux", "cpu": "arm" }, "sha512-YDUNvVM85TI3g/1OpnqKP1h4NeW/j64DfWMf+G3M809xNk1bJSnpFp4sh83NpmVE5DXnkh8ULor4LTVZKoYLHw=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.63.1", "", { "os": "linux", "cpu": "arm" }, "sha512-7Mcn71p9ZuQFAj+h+dhQXy/yeLePRS2yKRnmW1DijA9thKO5qap0GNOIQK4yQ6iP3SU0Mrb/yWo8h8vgRba8lw=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.63.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-4YiLQTX6U4CSl0L9cluep9A9W6UmTfqBDc2/CH6wlu54pl4E7Jn3cOD8oxzvBDEGk/JMKgJ47C8g+radF7mwvg=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.63.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-2ra8F7w8OquwZN9z2/fKFnli69wa8PLwaVzRMIPGb13ByMJwC28Fbp8YcVGoUhlYMTt7j5j9bNgpysrN2UM+vw=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.63.1", "", { "os": "linux", "cpu": "none" }, "sha512-Sy20ncyhjmBP0Ml+UvQbimjlk6VFgjW5uNP+qqwHB00mTE8Bl2C1TuHTlRwK2YoXeZbee5lP2XevBWVkAQAtSQ=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.63.1", "", { "os": "linux", "cpu": "none" }, "sha512-noITLp8oNjYliPnGWmLyelIHwULGqbHloQHGw1rtxbWhTuWooRpnZarZQJ1y9EUC4szuCusCc+HEpUtxpIwYvA=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.63.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hlxxXd+F1mWiAcaFR7Sv9ZQT6m6UfI8+Vy/kFJzztq2pDMU/0wZ9sish0iszNZvsQDo8Gc0i5yuFEOz5dDf6fA=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.63.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EF7OpqQTQ/BvGqLzUi4rEHuagCV9MugAUXSHemwPW5vxZ75RR+jxO/2j95Ph2dalMpFHSVECjRoioHZgA9zOYA=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.63.1", "", { "os": "linux", "cpu": "none" }, "sha512-wQO3JesW9PRkwlabQ27y7sPfVOOTLRG73I4F2UYHG5PXun3J9U3y+b7ezVKSYbsvSKGQ1k1cq8Qlun4C9kLt3w=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.63.1", "", { "os": "linux", "cpu": "none" }, "sha512-ouAGwhO6wHRXdnOVCOsB0tRFkA7nhNB2Nwax6oECXN0YiN8EYUTBAOudADOB1PI+yDL61TeNx/u7MVCzksNbkQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.63.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-q2R38Sn+1J8RxhfJ+T54wSWmyKXWec+9jgDfqO2AtArEqHO5R2aeayp5H5OYLr5UYDVGsVaZPEFUooMhYCdz5A=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.63.1", "", { "os": "linux", "cpu": "x64" }, "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.63.1", "", { "os": "linux", "cpu": "x64" }, "sha512-4h6XqthmB4Hspji84wvgk+ElodTsGj+dbZqHJHHtKxj4mYq0ANSEEPX9ys3moJueqsRjwpaJYH7874Itwnj2ow=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.63.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-dlfCOa87o1VAYegLQ9EKilx2JCeRofiyPGhTCmqnuXZ6bMPiycO1rq1+sKoulAp7pGLIsTIw+1x5R+zgh5LhhA=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.63.1", "", { "os": "none", "cpu": "arm64" }, "sha512-cjkLbOlfcm3QGhMM1J5zaZjsw1GggbN6rw9UTSSRrPrR1KkcXnN7Uq9rPw34xImQ9VOY9GN+6u2Zj80B9ptkcw=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.63.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-Li1KdUnWGE4N3e1F/B4RTB1ms+nG4WBgjByO46pkeBVX/2UBsY53xf5vK9WygVmnH3RwncIST7lkSdLSY6P9lg=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.63.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-t4ZYOSoLTgwhuFMrmTMLx/+i1DQVK7HYqMc6kY46EApwi8X0nIVphzdNoThU3xt6n+N5urG1/gxBdCaKDLavfg=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.63.1", "", { "os": "win32", "cpu": "x64" }, "sha512-RgroPfMmKlD1RzSDxvwgcPiy2HNQKoYV7OmwIXDsk73uKW5t6B/V8KIy27SMv/FNXFo/oSBtWc9J0X7t91ezZg=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.63.1", "", { "os": "win32", "cpu": "x64" }, "sha512-at8QVep6S3h5Y6gSbdGU06bRY5WJkf6WUduM9YtvYMbYhB1MOFfUgc6kehitQXzOtMSaT70q7f9ydPhpqu821w=="], + + "@shadowdara/dlib": ["@shadowdara/dlib@0.0.4", "", {}, "sha512-eYvqbE0uhTCufVd5NjhYQEIZwJg2qu1DyHu9gVMJQUei0UZyYxe5F+hZYO7Hdr+yD2sm3dWvzZ+fBzVDeySnFg=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.3", "@tailwindcss/oxide-darwin-arm64": "4.3.3", "@tailwindcss/oxide-darwin-x64": "4.3.3", "@tailwindcss/oxide-freebsd-x64": "4.3.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", "@tailwindcss/oxide-linux-x64-musl": "4.3.3", "@tailwindcss/oxide-wasm32-wasi": "4.3.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.3", "", { "os": "android", "cpu": "arm64" }, "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw=="], + + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.3", "", { "dependencies": { "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "tailwindcss": "4.3.3" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw=="], + + "@types/eslint": ["@types/eslint@8.56.12", "", { "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g=="], + + "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], + + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "@types/html-minifier-terser": ["@types/html-minifier-terser@7.0.2", "", {}, "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA=="], + + "@types/jquery": ["@types/jquery@4.0.1", "", {}, "sha512-9a59A/tycXgYuPABcp6/3spSShn0NT2UOM4EfHvMumjYi4lJWTsK5SZWjhx3yRm9IHGCeWXdV2YfNsrWrft/CA=="], + + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + + "@types/license-checker": ["@types/license-checker@25.0.6", "", {}, "sha512-ju/75+YPkNE5vX1iPer+qtI1eI/LqJVYZgOsmSHI1iiEM1bQL5Gh1lEvyjR9T7ZXVE1FwJa2doWJEEmPNwbZkw=="], + + "@types/node": ["@types/node@26.5.0", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A=="], + + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.69.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.69.0", "@typescript-eslint/type-utils": "8.69.0", "@typescript-eslint/utils": "8.69.0", "@typescript-eslint/visitor-keys": "8.69.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.69.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA=="], + + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.69.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.69.0", "@typescript-eslint/types": "8.69.0", "@typescript-eslint/typescript-estree": "8.69.0", "@typescript-eslint/visitor-keys": "8.69.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw=="], + + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.69.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.69.0", "@typescript-eslint/types": "^8.69.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg=="], + + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.69.0", "", { "dependencies": { "@typescript-eslint/types": "8.69.0", "@typescript-eslint/visitor-keys": "8.69.0" } }, "sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ=="], + + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.69.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ=="], + + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.69.0", "", { "dependencies": { "@typescript-eslint/types": "8.69.0", "@typescript-eslint/typescript-estree": "8.69.0", "@typescript-eslint/utils": "8.69.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA=="], + + "@typescript-eslint/types": ["@typescript-eslint/types@8.69.0", "", {}, "sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA=="], + + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.69.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.69.0", "@typescript-eslint/tsconfig-utils": "8.69.0", "@typescript-eslint/types": "8.69.0", "@typescript-eslint/visitor-keys": "8.69.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w=="], + + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.69.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.69.0", "@typescript-eslint/types": "8.69.0", "@typescript-eslint/typescript-estree": "8.69.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw=="], + + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.69.0", "", { "dependencies": { "@typescript-eslint/types": "8.69.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w=="], + + "@vitejs/devtools": ["@vitejs/devtools@0.7.2", "", { "dependencies": { "@devframes/hub": "^0.9.12", "@devframes/hub-ui": "^0.9.12", "@devframes/json-render-ui": "^0.9.12", "@devframes/plugin-inspect": "^0.9.12", "@devframes/plugin-messages": "^0.9.12", "@devframes/plugin-terminals": "^0.9.12", "@vitejs/devtools-kit": "0.7.2", "cac": "^7.0.0", "devframe": "^0.9.12", "h3": "^2.0.1-rc.29", "local-pkg": "^1.2.1", "nostics": "^1.2.0", "obug": "^2.1.4", "pathe": "^2.0.3" }, "peerDependencies": { "@vitejs/devtools-oxc": "^0.7.2", "@vitejs/devtools-rolldown": "^0.7.2", "@vitejs/devtools-vite": "^0.7.2", "@vitejs/devtools-vitest": "^0.7.2", "vite": "*" }, "optionalPeers": ["@vitejs/devtools-oxc", "@vitejs/devtools-rolldown", "@vitejs/devtools-vite", "@vitejs/devtools-vitest"], "bin": { "vite-devtools": "bin.js" } }, "sha512-tyfRglEzpg/eMX3GaLu5htz2PkoKqnULHJDzmVhK9uzIIRAg2DMZjc2e1Jg9YyMhW4iPz0zXc8tv9XYevvKOhg=="], + + "@vitejs/devtools-kit": ["@vitejs/devtools-kit@0.7.2", "", { "dependencies": { "@devframes/hub": "^0.9.12", "@devframes/json-render": "^0.9.12", "devframe": "^0.9.12", "local-pkg": "^1.2.1", "mlly": "^1.8.2", "nostics": "^1.2.0", "nypm": "^0.6.9" }, "peerDependencies": { "vite": "*" } }, "sha512-MAdPSQjjBmXou+3P27rnRXYbkrrSmifeidNZchZkHbOBa082Duv/Edbm/tA4Sh+dA9X/sEm5OWABCPBrb1emoA=="], + + "abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + + "acorn": ["acorn@8.18.0", "", { "bin": "bin/acorn" }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], + + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], + + "ajv": ["ajv@6.15.0", "", { "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" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], + + "ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], + + "ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "array-find-index": ["array-find-index@1.0.2", "", {}, "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw=="], + + "asap": ["asap@2.0.6", "", {}, "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="], + + "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.21", "", { "bin": "dist/cli.cjs" }, "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ=="], + + "birpc": ["birpc@4.2.0", "", {}, "sha512-KxgKcZPfrtzJDDALHPguGpGJUrzdgpymyiQQgzFjWreHMOpWrnFNVREr5J48x2DBh8ZVioscrV1SBkDipGiX+Q=="], + + "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + + "browserslist": ["browserslist@4.28.9", "", { "dependencies": { "baseline-browser-mapping": "^2.11.20", "caniuse-lite": "^1.0.30001810", "electron-to-chromium": "^1.5.420", "node-releases": "^2.0.54", "update-browserslist-db": "^1.3.2" }, "bin": "cli.js" }, "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], + + "cac": ["cac@7.0.0", "", {}, "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ=="], + + "camel-case": ["camel-case@4.1.2", "", { "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], + + "chalk": ["chalk@6.0.0", "", {}, "sha512-2uNTXIuTTxk7ciZgAU1BQcgnchcG0xXnrs6jzkQfj9SsRa9M2s5zE8WT96hS6KmG4MzWHSrvH43DF1m4XRkrFg=="], + + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "citty": ["citty@0.2.2", "", {}, "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w=="], + + "clean-css": ["clean-css@5.3.3", "", { "dependencies": { "source-map": "~0.6.0" } }, "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg=="], + + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], + + "color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + + "color-name": ["color-name@1.1.3", "", {}, "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="], + + "commander": ["commander@10.0.1", "", {}, "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "confbox": ["confbox@0.3.1", "", {}, "sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "crossws": ["crossws@0.4.12", "", { "peerDependencies": { "srvx": ">=0.11.5" } }, "sha512-aypfsr6t0uNvkqaZc6zvBfXzC6pLI0/sIulpkV6RwCVtZqG5ebBzv4weImKK0VNCj91Wl9F5j7p5WU4MNrybng=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "debuglog": ["debuglog@1.0.1", "", {}, "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw=="], + + "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], + + "default-browser": ["default-browser@5.5.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw=="], + + "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "devframe": ["devframe@0.9.12", "", { "dependencies": { "@modelcontextprotocol/server": "^2.0.0", "@standard-schema/spec": "^1.1.0", "birpc": "^4.2.0", "crossws": "^0.4.12", "h3": "^2.0.1-rc.29", "mrmime": "^2.0.1", "nostics": "^1.2.0", "pathe": "^2.0.3", "ufo": "^1.6.4" }, "peerDependencies": { "@modelcontextprotocol/client": "^2.0.0", "cac": "^7.0.0" }, "optionalPeers": ["@modelcontextprotocol/client"], "bin": "bin/devframe.mjs" }, "sha512-WXwohwmTPVesEQYDAIh41rZYry6BRsufEyr8f5EAPXKi3SYchAYVJJV5qjBv4jRtouyRh7Z96zfZiSE0YEfQaA=="], + + "dezalgo": ["dezalgo@1.0.4", "", { "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig=="], + + "dot-case": ["dot-case@3.0.4", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.422", "", {}, "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA=="], + + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + + "enhanced-resolve": ["enhanced-resolve@5.24.5", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": "bin/esbuild" }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "eslint": ["eslint@10.9.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.7.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.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", "minimatch": "^10.2.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "bin": "bin/eslint.js" }, "sha512-9VaAkDURekixUQJy0oJYl2DcN6oKMfxay7XzaGYAWQwsb6qfKf+x76R2k1L8kb1boc+FyCAaTA9GmiKaaiaF+A=="], + + "eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], + + "eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + + "espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], + + "esquery": ["esquery@1.7.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g=="], + + "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="], + + "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + + "exsolve": ["exsolve@1.1.1", "", {}, "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="], + + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="], + + "flatted": ["flatted@3.4.4", "", {}, "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "h3": ["h3@2.0.1-rc.31", "", { "dependencies": { "rou3": "^0.9.2", "srvx": "^1.0.2" }, "peerDependencies": { "crossws": "^0.4.12", "ocache": ">=0.3.0" }, "optionalPeers": ["ocache"], "bin": "bin/h3.mjs" }, "sha512-AG7qZzF99a0BSYoXT3evJgIhwSIUKow7R+hwkLRZS06WJ9nbSb7QXUDgs1ByBjp6svTvl++N/GKA7I9YPz9cQQ=="], + + "has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + + "highlight.js": ["highlight.js@11.12.0", "", {}, "sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg=="], + + "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], + + "html-minifier-terser": ["html-minifier-terser@7.2.0", "", { "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", "commander": "^10.0.0", "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.15.1" }, "bin": "cli.js" }, "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "immutable": ["immutable@5.1.9", "", {}, "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], + + "is-docker": ["is-docker@3.0.0", "", { "bin": "cli.js" }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], + + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": "cli.js" }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jiti": ["jiti@2.7.0", "", { "bin": "lib/jiti-cli.mjs" }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + + "jquery": ["jquery@4.0.0", "", {}, "sha512-TXCHVR3Lb6TZdtw1l3RTLf8RBWVGexdxL6AC8/e0xZKEpBflBsjh9/8LXw+dkNFuOyW9B7iB3O1sP7hS0Kiacg=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.3.2", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": "bin/jsesc" }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], + + "json5": ["json5@2.2.3", "", { "bin": "lib/cli.js" }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], + + "license-checker": ["license-checker@25.0.1", "", { "dependencies": { "chalk": "^2.4.1", "debug": "^3.1.0", "mkdirp": "^0.5.1", "nopt": "^4.0.1", "read-installed": "~4.0.3", "semver": "^5.5.0", "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0", "spdx-satisfies": "^4.0.0", "treeify": "^1.1.0" }, "bin": "bin/license-checker" }, "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g=="], + + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], + + "local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], + + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + + "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": "bin/cmd.js" }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + + "mlly": ["mlly@1.8.2", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "nanoid": ["nanoid@3.3.18", "", { "bin": "bin/nanoid.cjs" }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], + + "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + + "no-case": ["no-case@3.0.4", "", { "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="], + + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + + "node-releases": ["node-releases@2.0.54", "", {}, "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ=="], + + "nopt": ["nopt@4.0.3", "", { "dependencies": { "abbrev": "1", "osenv": "^0.1.4" }, "bin": "bin/nopt.js" }, "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg=="], + + "normalize-package-data": ["normalize-package-data@2.5.0", "", { "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA=="], + + "nostics": ["nostics@1.2.0", "", {}, "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg=="], + + "npm-normalize-package-bin": ["npm-normalize-package-bin@1.0.1", "", {}, "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="], + + "nypm": ["nypm@0.6.9", "", { "dependencies": { "citty": "^0.2.2", "pathe": "^2.0.3", "tinyexec": "^1.2.4" }, "bin": "dist/cli.mjs" }, "sha512-zxlE2yvSWZWmHcNdT3+5zV2lrCogeE9YOklHrR3dFjqutq5wO7GFDYLFDRXLsYnJzwvy/im9fYoxePvS0VTW0w=="], + + "obug": ["obug@2.1.4", "", {}, "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "open": ["open@11.0.2", "", { "dependencies": { "default-browser": "^5.5.1", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.2.1", "wsl-utils": "^1.0.0" } }, "sha512-RWqF+pBSkqecEvCKOn8QYhaNdRMJDZRIrlS/7rTDdLHaPcfXGCZ/h8zb413NfvdeAV0MR7T1yJcA34/q+CSm1Q=="], + + "optionator": ["optionator@0.9.4", "", { "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" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], + + "os-homedir": ["os-homedir@1.0.2", "", {}, "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ=="], + + "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], + + "osenv": ["osenv@0.1.5", "", { "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + + "param-case": ["param-case@3.0.4", "", { "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="], + + "pascal-case": ["pascal-case@3.1.2", "", { "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="], + + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + + "pkg-types": ["pkg-types@2.3.3", "", { "dependencies": { "confbox": "^0.3.1", "exsolve": "^1.1.1", "pathe": "^2.0.3" } }, "sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w=="], + + "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], + + "powershell-utils": ["powershell-utils@0.2.1", "", {}, "sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A=="], + + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], + + "read-installed": ["read-installed@4.0.3", "", { "dependencies": { "debuglog": "^1.0.1", "read-package-json": "^2.0.0", "readdir-scoped-modules": "^1.0.0", "semver": "2 || 3 || 4 || 5", "slide": "~1.1.3", "util-extend": "^1.0.1" }, "optionalDependencies": { "graceful-fs": "^4.1.2" } }, "sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ=="], + + "read-package-json": ["read-package-json@2.1.2", "", { "dependencies": { "glob": "^7.1.1", "json-parse-even-better-errors": "^2.3.0", "normalize-package-data": "^2.0.0", "npm-normalize-package-bin": "^1.0.0" } }, "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA=="], + + "readdir-scoped-modules": ["readdir-scoped-modules@1.1.0", "", { "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", "graceful-fs": "^4.1.2", "once": "^1.3.0" } }, "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw=="], + + "readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], + + "relateurl": ["relateurl@0.2.7", "", {}, "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog=="], + + "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], + + "rolldown": ["rolldown@1.2.7", "", { "dependencies": { "@oxc-project/types": "=0.148.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.7", "@rolldown/binding-android-arm64": "1.2.7", "@rolldown/binding-darwin-arm64": "1.2.7", "@rolldown/binding-darwin-x64": "1.2.7", "@rolldown/binding-freebsd-x64": "1.2.7", "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", "@rolldown/binding-linux-arm64-gnu": "1.2.7", "@rolldown/binding-linux-arm64-musl": "1.2.7", "@rolldown/binding-linux-ppc64-gnu": "1.2.7", "@rolldown/binding-linux-s390x-gnu": "1.2.7", "@rolldown/binding-linux-x64-gnu": "1.2.7", "@rolldown/binding-linux-x64-musl": "1.2.7", "@rolldown/binding-openharmony-arm64": "1.2.7", "@rolldown/binding-win32-arm64-msvc": "1.2.7", "@rolldown/binding-win32-x64-msvc": "1.2.7" }, "bin": "bin/cli.mjs" }, "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig=="], + + "rollup": ["rollup@4.63.1", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.63.1", "@rollup/rollup-android-arm64": "4.63.1", "@rollup/rollup-darwin-arm64": "4.63.1", "@rollup/rollup-darwin-x64": "4.63.1", "@rollup/rollup-freebsd-arm64": "4.63.1", "@rollup/rollup-freebsd-x64": "4.63.1", "@rollup/rollup-linux-arm-gnueabihf": "4.63.1", "@rollup/rollup-linux-arm-musleabihf": "4.63.1", "@rollup/rollup-linux-arm64-gnu": "4.63.1", "@rollup/rollup-linux-arm64-musl": "4.63.1", "@rollup/rollup-linux-loong64-gnu": "4.63.1", "@rollup/rollup-linux-loong64-musl": "4.63.1", "@rollup/rollup-linux-ppc64-gnu": "4.63.1", "@rollup/rollup-linux-ppc64-musl": "4.63.1", "@rollup/rollup-linux-riscv64-gnu": "4.63.1", "@rollup/rollup-linux-riscv64-musl": "4.63.1", "@rollup/rollup-linux-s390x-gnu": "4.63.1", "@rollup/rollup-linux-x64-gnu": "4.63.1", "@rollup/rollup-linux-x64-musl": "4.63.1", "@rollup/rollup-openbsd-x64": "4.63.1", "@rollup/rollup-openharmony-arm64": "4.63.1", "@rollup/rollup-win32-arm64-msvc": "4.63.1", "@rollup/rollup-win32-ia32-msvc": "4.63.1", "@rollup/rollup-win32-x64-gnu": "4.63.1", "@rollup/rollup-win32-x64-msvc": "4.63.1", "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg=="], + + "rollup-plugin-string": ["rollup-plugin-string@3.0.0", "", { "dependencies": { "rollup-pluginutils": "^2.4.1" } }, "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw=="], + + "rollup-plugin-visualizer": ["rollup-plugin-visualizer@7.1.1", "", { "dependencies": { "open": "^11.0.0", "picomatch": "^4.0.5", "source-map": "^0.8.0", "yargs": "^18.1.0" }, "peerDependencies": { "rolldown": "1.x || ^1.0.0-beta || ^1.0.0-rc", "rollup": "2.x || 3.x || 4.x" }, "bin": "dist/bin/cli.js" }, "sha512-ThaGiHTU8XW02OkK80TrTHATraJmM9OAduU4otal+7gyXLpYEtmGBLfx5kW+EHvvLwn03YGW2NnwKUIqsYlJAA=="], + + "rollup-pluginutils": ["rollup-pluginutils@2.8.2", "", { "dependencies": { "estree-walker": "^0.6.1" } }, "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ=="], + + "rou3": ["rou3@0.9.2", "", {}, "sha512-3SOzvaAg8rkHrXtRjpCvCvbyO5to9oOO27Z/XqHEYXfMRVSw/qMIVdmaOk9W2lcRLtR6dlqTjo9hDeJk70QBYQ=="], + + "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], + + "sass": ["sass@1.104.0", "", { "dependencies": { "chokidar": "^5.0.0", "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": "sass.js" }, "sha512-btHMApW2bgolvClhRW8AlQJzgI9lUB3pPSofBQQT+E46GWvf9o0TVQ13SYv5riWZVFyPN+JNz3TKW9XhBlc10w=="], + + "semver": ["semver@5.7.2", "", { "bin": "bin/semver" }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "slide": ["slide@1.1.6", "", {}, "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw=="], + + "source-map": ["source-map@0.8.0", "", {}, "sha512-d8EqvL+k/SOXCreS/SUzg2ciyHqBBLcN/yuRjFsbvVhHTE2pgei7oAhmPM7kWFbkX6OSMQfUq4KbkF3au9lhYQ=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "spdx-compare": ["spdx-compare@1.0.0", "", { "dependencies": { "array-find-index": "^1.0.2", "spdx-expression-parse": "^3.0.0", "spdx-ranges": "^2.0.0" } }, "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A=="], + + "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], + + "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], + + "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], + + "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], + + "spdx-ranges": ["spdx-ranges@2.1.1", "", {}, "sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA=="], + + "spdx-satisfies": ["spdx-satisfies@4.0.1", "", { "dependencies": { "spdx-compare": "^1.0.0", "spdx-expression-parse": "^3.0.0", "spdx-ranges": "^2.0.0" } }, "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA=="], + + "srvx": ["srvx@1.0.4", "", { "bin": "bin/srvx.mjs" }, "sha512-eZmYaxUfZSo7/8m8UdsHRJNmTLSCTPPom9d7a60vMmuVeZvwhbvflRR+00/CxTCjMOFa5+H8tgBeNDVZ+w7AAQ=="], + + "string-width": ["string-width@8.2.2", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg=="], + + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + + "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "tailwindcss": ["tailwindcss@4.3.3", "", {}, "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ=="], + + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + + "tellraw-parser": ["tellraw-parser@1.0.2", "", {}, "sha512-vIEuTAutJGXI6Xks5OoMdELbmDa6GC7Jty074lVgUWn+Ff/puks5DChmeIvNG7cnHzSPyftCB4rVSPG7Xl01kg=="], + + "terser": ["terser@5.51.2", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": "bin/terser" }, "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q=="], + + "tinyexec": ["tinyexec@1.3.1", "", {}, "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA=="], + + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + + "tosource": ["tosource@2.0.0-alpha.3", "", {}, "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug=="], + + "treeify": ["treeify@1.1.0", "", {}, "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A=="], + + "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsx": ["tsx@4.23.13", "", { "dependencies": { "esbuild": "~0.28.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": "dist/cli.mjs" }, "sha512-BL5MGkRln6aDYhb0xbQlEAGw743BaZYWdbWtdJOBriYJboKgUUYCadFp2/FpBBZquBC/ezNBn7wMMPx7FDZUDw=="], + + "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "typescript-eslint": ["typescript-eslint@8.69.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.69.0", "@typescript-eslint/parser": "8.69.0", "@typescript-eslint/typescript-estree": "8.69.0", "@typescript-eslint/utils": "8.69.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA=="], + + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], + + "undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], + + "unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], + + "unplugin-remove": ["unplugin-remove@1.0.3", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/generator": "^7.25.0", "@babel/parser": "^7.25.3", "@babel/traverse": "^7.25.3", "@rollup/pluginutils": "^5.1.0", "magic-string": "^0.30.11", "unplugin": "^1.12.0" } }, "sha512-BZMt9v8Y/Z27cY7YQv+DpcW928znjP1cqplBXOirbANiFQtM2YCdiyNAJhHCvjppT0lScNn1aDrQnXqnRp32pQ=="], + + "update-browserslist-db": ["update-browserslist-db@1.3.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": "cli.js" }, "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "util-extend": ["util-extend@1.0.3", "", {}, "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA=="], + + "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], + + "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["less", "sass-embedded", "stylus", "sugarss"], "bin": "bin/vite.js" }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + + "vite-plugin-eslint": ["vite-plugin-eslint@1.8.1", "", { "dependencies": { "@rollup/pluginutils": "^4.2.1", "@types/eslint": "^8.4.5", "rollup": "^2.77.2" }, "peerDependencies": { "eslint": ">=7", "vite": ">=2" } }, "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang=="], + + "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], + + "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "wsl-utils": ["wsl-utils@1.0.0", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-Hl0ZOAs672vg+06kfujwRhoS6/jehvULrlFkuF2dRu6pHgA8U06h3xqNIqNNU1LTXPcedxByAR4GS6pwQK0mgA=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "yargs": ["yargs@18.1.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^8.2.1", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg=="], + + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zigpty": ["zigpty@0.2.1", "", {}, "sha512-MR9JqJx2wf5f4wz8zpx050AlqrmWeIW+1h0SO5iEyhG3HFRjY5luC3szS2ux2EGuPjE5OU9ZAuiCBeMWBTrqZw=="], + + "zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + + "@tailwindcss/node/lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.8", "", {}, "sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q=="], + + "@typescript-eslint/typescript-estree/semver": ["semver@7.8.5", "", { "bin": "bin/semver.js" }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "license-checker/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], + + "license-checker/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": "bin/semver" }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "read-installed/semver": ["semver@5.7.2", "", { "bin": "bin/semver" }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "rollup-pluginutils/estree-walker": ["estree-walker@0.6.1", "", {}, "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="], + + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": "bin/esbuild" }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + + "vite-plugin-eslint/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], + + "vite-plugin-eslint/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": "dist/bin/rollup" }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "wsl-utils/powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="], + + "@tailwindcss/node/lightningcss/lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "@tailwindcss/node/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "@tailwindcss/node/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "@tailwindcss/node/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "@tailwindcss/node/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "@tailwindcss/node/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "@tailwindcss/node/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="], + + "license-checker/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + + "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "vite-plugin-eslint/@rollup/pluginutils/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], + + "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], + + "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], + + "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], + + "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], + + "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], + + "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], + + "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], + + "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], + + "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], + + "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], + + "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], + + "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], + + "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], + + "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], + + "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], + + "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], + + "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], + + "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], + + "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], + + "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], + + "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], + + "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + + "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + } +} diff --git a/finder-template-generator-ssg/data/backend.json b/finder-template-generator-ssg/data/backend.json index 30c5b878..10007775 100644 --- a/finder-template-generator-ssg/data/backend.json +++ b/finder-template-generator-ssg/data/backend.json @@ -1,41 +1,41 @@ { - "generatedAt": "2026-09-08T20:08:36.993Z", + "generatedAt": "2026-09-09T14:03:43.833Z", "total": { - "files": 37, - "bytes": 238402, - "kilobytes": 232.81, - "megabytes": 0.23 + "files": 50, + "bytes": 253226, + "kilobytes": 247.29, + "megabytes": 0.24 }, "byExtension": [ { "extension": ".js", - "files": 11, - "bytes": 181770, - "percentage": 76.25 + "files": 17, + "bytes": 189571, + "percentage": 74.86 }, { "extension": ".css", - "files": 11, - "bytes": 40121, - "percentage": 16.83 + "files": 13, + "bytes": 45169, + "percentage": 17.84 }, { "extension": ".txt", "files": 1, "bytes": 9764, - "percentage": 4.1 + "percentage": 3.86 }, { "extension": ".html", - "files": 13, - "bytes": 5003, - "percentage": 2.1 + "files": 18, + "bytes": 6824, + "percentage": 2.69 }, { "extension": ".sh", "files": 1, - "bytes": 1744, - "percentage": 0.73 + "bytes": 1898, + "percentage": 0.75 } ], "files": [ @@ -47,7 +47,7 @@ { "path": "assets/main_entry.js", "extension": ".js", - "bytes": 44767 + "bytes": 45726 }, { "path": "assets/creator.js", @@ -77,7 +77,7 @@ { "path": "assets/viewer.js", "extension": ".js", - "bytes": 7250 + "bytes": 7464 }, { "path": "assets/creator.css", @@ -104,6 +104,11 @@ "extension": ".css", "bytes": 3972 }, + { + "path": "assets/regexcreator.js", + "extension": ".js", + "bytes": 3933 + }, { "path": "assets/cacheviewer.css", "extension": ".css", @@ -114,6 +119,11 @@ "extension": ".js", "bytes": 3421 }, + { + "path": "assets/regexcreator.css", + "extension": ".css", + "bytes": 3410 + }, { "path": "assets/samfile.js", "extension": ".js", @@ -152,12 +162,27 @@ { "path": "install.sh", "extension": ".sh", - "bytes": 1744 + "bytes": 1898 + }, + { + "path": "assets/mcappheader.css", + "extension": ".css", + "bytes": 1638 + }, + { + "path": "assets/worlds.js", + "extension": ".js", + "bytes": 1139 }, { "path": "assets/index.js", "extension": ".js", - "bytes": 1041 + "bytes": 1101 + }, + { + "path": "assets/info.js", + "extension": ".js", + "bytes": 596 }, { "path": "tools/minecraft/tellraw/index.html", @@ -174,6 +199,11 @@ "extension": ".html", "bytes": 421 }, + { + "path": "regexcreator/index.html", + "extension": ".html", + "bytes": 407 + }, { "path": "cacheviewer/index.html", "extension": ".html", @@ -199,11 +229,36 @@ "extension": ".html", "bytes": 391 }, + { + "path": "assets/index2.js", + "extension": ".js", + "bytes": 369 + }, + { + "path": "mcapp/worlds/index.html", + "extension": ".html", + "bytes": 356 + }, { "path": "docs/config/index.html", "extension": ".html", "bytes": 355 }, + { + "path": "mcapp/about/index.html", + "extension": ".html", + "bytes": 355 + }, + { + "path": "mcapp/info/index.html", + "extension": ".html", + "bytes": 354 + }, + { + "path": "mcapp/index.html", + "extension": ".html", + "bytes": 349 + }, { "path": "docs/index.html", "extension": ".html", @@ -223,6 +278,16 @@ "path": "index.html", "extension": ".html", "bytes": 337 + }, + { + "path": "assets/mcappheader.js", + "extension": ".js", + "bytes": 303 + }, + { + "path": "assets/about.js", + "extension": ".js", + "bytes": 228 } ] } \ No newline at end of file diff --git a/finder-template-generator-ssg/data/gh-pages.json b/finder-template-generator-ssg/data/gh-pages.json index 64c290aa..7e22b220 100644 --- a/finder-template-generator-ssg/data/gh-pages.json +++ b/finder-template-generator-ssg/data/gh-pages.json @@ -1,41 +1,41 @@ { - "generatedAt": "2026-09-08T20:08:46.922Z", + "generatedAt": "2026-09-09T14:03:51.448Z", "total": { - "files": 37, - "bytes": 303337, - "kilobytes": 296.23, - "megabytes": 0.29 + "files": 50, + "bytes": 319063, + "kilobytes": 311.58, + "megabytes": 0.3 }, "byExtension": [ { "extension": ".js", - "files": 11, - "bytes": 246562, - "percentage": 81.28 + "files": 17, + "bytes": 255228, + "percentage": 79.99 }, { "extension": ".css", - "files": 11, - "bytes": 40121, - "percentage": 13.23 + "files": 13, + "bytes": 45169, + "percentage": 14.16 }, { "extension": ".txt", "files": 1, "bytes": 9764, - "percentage": 3.22 + "percentage": 3.06 }, { "extension": ".html", - "files": 13, - "bytes": 5146, - "percentage": 1.7 + "files": 18, + "bytes": 7004, + "percentage": 2.2 }, { "extension": ".sh", "files": 1, - "bytes": 1744, - "percentage": 0.57 + "bytes": 1898, + "percentage": 0.59 } ], "files": [ @@ -47,12 +47,12 @@ { "path": "assets/viewer.js", "extension": ".js", - "bytes": 74229 + "bytes": 75348 }, { "path": "assets/main_entry.js", "extension": ".js", - "bytes": 44555 + "bytes": 45474 }, { "path": "assets/markdowneditor.js", @@ -99,6 +99,11 @@ "extension": ".css", "bytes": 3972 }, + { + "path": "assets/regexcreator.js", + "extension": ".js", + "bytes": 3933 + }, { "path": "assets/cacheviewer.css", "extension": ".css", @@ -114,6 +119,11 @@ "extension": ".js", "bytes": 3421 }, + { + "path": "assets/regexcreator.css", + "extension": ".css", + "bytes": 3410 + }, { "path": "assets/samfile.js", "extension": ".js", @@ -152,12 +162,27 @@ { "path": "install.sh", "extension": ".sh", - "bytes": 1744 + "bytes": 1898 + }, + { + "path": "assets/mcappheader.css", + "extension": ".css", + "bytes": 1638 + }, + { + "path": "assets/worlds.js", + "extension": ".js", + "bytes": 1139 }, { "path": "assets/index.js", "extension": ".js", - "bytes": 899 + "bytes": 959 + }, + { + "path": "assets/info.js", + "extension": ".js", + "bytes": 596 }, { "path": "configeditor/index.html", @@ -174,6 +199,11 @@ "extension": ".html", "bytes": 428 }, + { + "path": "regexcreator/index.html", + "extension": ".html", + "bytes": 422 + }, { "path": "cacheviewer/index.html", "extension": ".html", @@ -199,16 +229,41 @@ "extension": ".html", "bytes": 406 }, + { + "path": "assets/index2.js", + "extension": ".js", + "bytes": 369 + }, + { + "path": "mcapp/worlds/index.html", + "extension": ".html", + "bytes": 360 + }, { "path": "docs/config/index.html", "extension": ".html", "bytes": 359 }, + { + "path": "mcapp/about/index.html", + "extension": ".html", + "bytes": 359 + }, + { + "path": "mcapp/index.html", + "extension": ".html", + "bytes": 359 + }, { "path": "docs/index.html", "extension": ".html", "bytes": 358 }, + { + "path": "mcapp/info/index.html", + "extension": ".html", + "bytes": 358 + }, { "path": "changelog/index.html", "extension": ".html", @@ -223,6 +278,16 @@ "path": "index.html", "extension": ".html", "bytes": 353 + }, + { + "path": "assets/mcappheader.js", + "extension": ".js", + "bytes": 303 + }, + { + "path": "assets/about.js", + "extension": ".js", + "bytes": 228 } ] } \ No newline at end of file diff --git a/finder-template-generator-ssg/docs/changelog.md b/finder-template-generator-ssg/docs/changelog.md index d01df5e1..6fa9a972 100644 --- a/finder-template-generator-ssg/docs/changelog.md +++ b/finder-template-generator-ssg/docs/changelog.md @@ -2,7 +2,11 @@ _The whole finder CHANGELOG_ -## Newest Version : prob 0.3.16 +## Newest prob 0.3.17 + +- added regex support + +## 0.3.16 - 08.09.2026 - added cache creation - added config editor diff --git a/finder-template-generator-ssg/docs/readme.md b/finder-template-generator-ssg/docs/readme.md index ed04dccd..e345a504 100644 --- a/finder-template-generator-ssg/docs/readme.md +++ b/finder-template-generator-ssg/docs/readme.md @@ -10,6 +10,9 @@ Maybe ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues-pr/shadowdara/finder?logo=github) [![GitHub top language](https://img.shields.io/github/languages/top/shadowdara/finder?logo=go&label=)](https://github.com/shadowdara/finder/) +docker build -t finderinstall . +docker run --rm -it finderinstall + --> # finder diff --git a/finder-template-generator-ssg/package-lock.json b/finder-template-generator-ssg/package-lock.json index 5f5d635c..a3710fb0 100644 --- a/finder-template-generator-ssg/package-lock.json +++ b/finder-template-generator-ssg/package-lock.json @@ -1,41 +1,42 @@ { "name": "finder-template-generator", - "version": "0.3.16", + "version": "0.3.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "finder-template-generator", - "version": "0.3.16", + "version": "0.3.17", "license": "arr for now, i'll change it later when i decide it", "dependencies": { "@shadowdara/dlib": "^0.0.4", - "@tailwindcss/vite": "^4.3.3", - "@vitejs/devtools": "^0.7.2", "highlight.js": "^11.12.0", "jquery": "^4.0.0", - "tailwindcss": "^4.3.3", - "tellraw-parser": "^1.0.2", - "unplugin-remove": "^1.0.3" + "tellraw-parser": "^1.0.2" }, "devDependencies": { "@eslint/js": "^10.0.1", "@rollup/plugin-yaml": "^5.0.0", + "@tailwindcss/vite": "^4.3.3", "@types/html-minifier-terser": "^7.0.2", "@types/jquery": "^4.0.1", "@types/license-checker": "^25.0.6", "@types/node": "^26.5.0", + "@vitejs/devtools": "^0.7.2", "chalk": "^6.0.0", + "esbuild": ">=0.25.0", "eslint": "^10.9.1", "html-minifier-terser": "^7.2.0", "license-checker": "^25.0.1", "rollup-plugin-string": "^3.0.0", "rollup-plugin-visualizer": "^7.1.1", "sass": "^1.104.0", + "tailwindcss": "^4.3.3", "tinyglobby": "^0.2.17", "tsx": "^4.23.13", "typescript": "^5.5.0", "typescript-eslint": "^8.69.0", + "unplugin-remove": "^1.0.3", "vite": "^5.4.0", "vite-plugin-eslint": "^1.8.1" } @@ -44,6 +45,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", @@ -58,6 +60,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -67,6 +70,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", @@ -97,6 +101,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -106,6 +111,7 @@ "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.8", @@ -122,6 +128,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.29.7", @@ -138,6 +145,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -147,6 +155,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -156,6 +165,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.29.7", @@ -169,6 +179,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.29.7", @@ -186,6 +197,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -195,6 +207,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -204,6 +217,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -213,6 +227,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.29.7", @@ -226,6 +241,7 @@ "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.8" @@ -241,6 +257,7 @@ "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", @@ -255,6 +272,7 @@ "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", @@ -273,6 +291,7 @@ "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -286,6 +305,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/hub/-/hub-0.9.12.tgz", "integrity": "sha512-4QTBpH0PWQEl7GJKpDHF/uA4S3pFGisfzJJucY7BKytHYRoeLi8Cu16Jz+mEngu84ODgONDzS6Ax0ZiurnoZSA==", + "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", @@ -305,6 +325,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/hub-ui/-/hub-ui-0.9.12.tgz", "integrity": "sha512-FIDtve50JAUYNgJsPAG+hNHKMSEsYMqlmm0kHmsw9wuqRDgY/ydshBjj7eKqc/XzxL3zy8EnETP751M4y6TH4g==", + "dev": true, "license": "MIT", "peerDependencies": { "@devframes/hub": "0.9.12", @@ -321,6 +342,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/json-render/-/json-render-0.9.12.tgz", "integrity": "sha512-9JU6ug8AIoHGs0rpS174caJlg5LQmYa3fYvxyihPtuQfmrvpaVqepMiJmxmVVaNLuX0VjQNy/gsxD4Ns4S1mpA==", + "dev": true, "license": "MIT", "dependencies": { "@json-render/core": "^0.20.0", @@ -341,6 +363,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/json-render-ui/-/json-render-ui-0.9.12.tgz", "integrity": "sha512-9p63mIsBIS0q5sPFpQcA1mXdUsb85VKydCq320GUQzuzHg7UvwI5qxd1O+Tfd8u+nazmdB7yyobzlp2ocSvt7w==", + "dev": true, "license": "MIT", "peerDependencies": { "@devframes/hub": "0.9.12", @@ -359,6 +382,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/service-open/-/service-open-0.9.12.tgz", "integrity": "sha512-VsuDzcMU/tUXIPcoEy+rzzCRqO8pD2Apq+RzV2XmQoHWNHBQ6mQhWxuO8ETMhLBruUksTVtEyexP5jmpbYtVIA==", + "dev": true, "license": "MIT", "dependencies": { "pathe": "^2.0.3" @@ -368,275 +392,292 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { @@ -657,19 +698,20 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { @@ -690,19 +732,20 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openharmony-arm64": { @@ -723,67 +766,71 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -984,6 +1031,7 @@ "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -994,6 +1042,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1004,6 +1053,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1013,7 +1063,7 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1024,12 +1074,14 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1040,6 +1092,7 @@ "version": "0.20.0", "resolved": "https://registry.npmjs.org/@json-render/core/-/core-0.20.0.tgz", "integrity": "sha512-cXAXn7h3QaylefQgh85AEGPuVq4C8SJ3k9JqigWLJhaBSozF1Fmsrm43DP16RmkqNiVgj5pBRdmB48lEO5qlow==", + "dev": true, "license": "Apache-2.0", "dependencies": { "zod": "^4.3.6" @@ -1052,6 +1105,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.0.0.tgz", "integrity": "sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==", + "dev": true, "license": "MIT", "dependencies": { "zod": "^4.2.0" @@ -1064,6 +1118,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.0.0.tgz", "integrity": "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==", + "dev": true, "license": "MIT", "dependencies": { "@modelcontextprotocol/core": "2.0.0", @@ -1080,6 +1135,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1105,6 +1161,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1143,6 +1200,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1163,6 +1221,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1183,6 +1242,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1203,6 +1263,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1223,6 +1284,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1243,6 +1305,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1263,6 +1326,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1283,6 +1347,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1303,6 +1368,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1323,6 +1389,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1343,6 +1410,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1363,6 +1431,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1682,6 +1751,7 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -1707,6 +1777,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1720,6 +1791,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1733,6 +1805,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1746,6 +1819,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1759,6 +1833,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1772,6 +1847,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1785,6 +1861,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1798,6 +1875,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1811,6 +1889,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1824,6 +1903,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1837,6 +1917,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1850,6 +1931,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1863,6 +1945,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1876,6 +1959,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1889,6 +1973,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1902,6 +1987,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1915,6 +2001,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1928,6 +2015,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1941,6 +2029,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1954,6 +2043,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1967,6 +2057,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1980,6 +2071,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1993,6 +2085,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2006,6 +2099,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2019,6 +2113,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2035,12 +2130,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, "license": "MIT" }, "node_modules/@tailwindcss/node": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", @@ -2056,6 +2153,7 @@ "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -2088,6 +2186,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2108,6 +2207,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2128,6 +2228,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2148,6 +2249,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2168,6 +2270,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2188,6 +2291,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2208,6 +2312,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2228,6 +2333,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2248,6 +2354,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2268,6 +2375,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2288,6 +2396,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -2305,6 +2414,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 20" @@ -2331,6 +2441,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2347,6 +2458,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2363,6 +2475,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2379,6 +2492,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2395,6 +2509,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2411,6 +2526,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2427,6 +2543,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2443,6 +2560,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2459,6 +2577,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2483,6 +2602,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -2504,6 +2624,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2520,6 +2641,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2533,6 +2655,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, "license": "MIT", "dependencies": { "@tailwindcss/node": "4.3.3", @@ -2565,6 +2688,7 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, "license": "MIT" }, "node_modules/@types/html-minifier-terser": { @@ -2599,7 +2723,7 @@ "version": "26.5.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-26.5.0.tgz", "integrity": "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~8.9.0" @@ -2839,6 +2963,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/@vitejs/devtools/-/devtools-0.7.2.tgz", "integrity": "sha512-tyfRglEzpg/eMX3GaLu5htz2PkoKqnULHJDzmVhK9uzIIRAg2DMZjc2e1Jg9YyMhW4iPz0zXc8tv9XYevvKOhg==", + "dev": true, "license": "MIT", "dependencies": { "@devframes/hub": "^0.9.12", @@ -2885,6 +3010,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/@vitejs/devtools-kit/-/devtools-kit-0.7.2.tgz", "integrity": "sha512-MAdPSQjjBmXou+3P27rnRXYbkrrSmifeidNZchZkHbOBa082Duv/Edbm/tA4Sh+dA9X/sEm5OWABCPBrb1emoA==", + "dev": true, "license": "MIT", "dependencies": { "@devframes/hub": "^0.9.12", @@ -2903,6 +3029,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/plugin-inspect/-/plugin-inspect-0.9.12.tgz", "integrity": "sha512-kdbqVVFycEpSLAR7dJQhLnQoZ4yTo1nrlXbctJwkZVkAMuwAf18PBnjUTO2WoXwjIFQIq0g5XQq6uFeN+Uya2A==", + "dev": true, "license": "MIT", "dependencies": { "cac": "^7.0.0" @@ -2928,6 +3055,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/plugin-messages/-/plugin-messages-0.9.12.tgz", "integrity": "sha512-IStDziP+qSP8YG+gIIUfdoF8I7xJp2X653WCNPmJ170JgiFVksgWPY4ZND9yNlVSgCaqeFng/4rY9Y0DDMsQwQ==", + "dev": true, "license": "MIT", "dependencies": { "@devframes/service-open": "0.9.12", @@ -2955,6 +3083,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/plugin-terminals/-/plugin-terminals-0.9.12.tgz", "integrity": "sha512-UuaJ1U0Hwq4Tlry7F/KRizNhS+XFNcP/I5DFRxXK8pKrt53wUfFJ5Kc5mi+tZrbCDeeu9u/mTQEZWbQfs+W5Ow==", + "dev": true, "license": "MIT", "dependencies": { "@devframes/vite": "0.9.12", @@ -2982,6 +3111,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/@devframes/vite/-/vite-0.9.12.tgz", "integrity": "sha512-qciobX39NyIw58r9G250k/7F8rQAKC7zyqgok+beBPTELQkSO401LwSyTjRwzRV/5hagRb1dlElTWlplh0DKgg==", + "dev": true, "license": "MIT", "dependencies": { "pathe": "^2.0.3" @@ -3015,6 +3145,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3114,6 +3245,7 @@ "version": "2.11.21", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz", "integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==", + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -3126,6 +3258,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-4.2.0.tgz", "integrity": "sha512-KxgKcZPfrtzJDDALHPguGpGJUrzdgpymyiQQgzFjWreHMOpWrnFNVREr5J48x2DBh8ZVioscrV1SBkDipGiX+Q==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -3148,6 +3281,7 @@ "version": "4.28.9", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3181,7 +3315,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/bundle-name": { @@ -3204,6 +3338,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.19.0" @@ -3224,6 +3359,7 @@ "version": "1.0.30001810", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3257,7 +3393,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "readdirp": "^5.0.0" @@ -3273,6 +3409,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz", "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==", + "dev": true, "license": "MIT" }, "node_modules/clean-css": { @@ -3359,12 +3496,14 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.3.1.tgz", "integrity": "sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA==", + "dev": true, "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { @@ -3386,6 +3525,7 @@ "version": "0.4.12", "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.4.12.tgz", "integrity": "sha512-aypfsr6t0uNvkqaZc6zvBfXzC6pLI0/sIulpkV6RwCVtZqG5ebBzv4weImKK0VNCj91Wl9F5j7p5WU4MNrybng==", + "dev": true, "license": "MIT", "peerDependencies": { "srvx": ">=0.11.5" @@ -3400,6 +3540,7 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3478,12 +3619,14 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "dev": true, "license": "MIT" }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -3493,6 +3636,7 @@ "version": "0.9.12", "resolved": "https://registry.npmjs.org/devframe/-/devframe-0.9.12.tgz", "integrity": "sha512-WXwohwmTPVesEQYDAIh41rZYry6BRsufEyr8f5EAPXKi3SYchAYVJJV5qjBv4jRtouyRh7Z96zfZiSE0YEfQaA==", + "dev": true, "license": "MIT", "dependencies": { "@modelcontextprotocol/server": "^2.0.0", @@ -3547,6 +3691,7 @@ "version": "1.5.422", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz", "integrity": "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==", + "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { @@ -3560,6 +3705,7 @@ "version": "5.24.5", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -3593,47 +3739,52 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "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" @@ -3801,6 +3952,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, "license": "MIT" }, "node_modules/esutils": { @@ -3817,6 +3969,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.1.tgz", "integrity": "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==", + "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -3920,6 +4073,7 @@ "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, @@ -3944,6 +4098,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -4042,12 +4197,14 @@ "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/h3": { "version": "2.0.1-rc.31", "resolved": "https://registry.npmjs.org/h3/-/h3-2.0.1-rc.31.tgz", "integrity": "sha512-AG7qZzF99a0BSYoXT3evJgIhwSIUKow7R+hwkLRZS06WJ9nbSb7QXUDgs1ByBjp6svTvl++N/GKA7I9YPz9cQQ==", + "dev": true, "license": "MIT", "dependencies": { "rou3": "^0.9.2", @@ -4147,7 +4304,7 @@ "version": "5.1.9", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/imurmurhash": { @@ -4215,7 +4372,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4225,7 +4382,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4293,6 +4450,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -4308,6 +4466,7 @@ "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": { @@ -4337,6 +4496,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -4377,6 +4537,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -4505,6 +4666,7 @@ "version": "1.33.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, "license": "MPL-2.0", "optional": true, "peer": true, @@ -4539,6 +4701,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4560,6 +4723,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4581,6 +4745,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4602,6 +4767,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4623,6 +4789,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4644,6 +4811,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4665,6 +4833,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4686,6 +4855,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4707,6 +4877,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4728,6 +4899,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4749,6 +4921,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -4767,6 +4940,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz", "integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==", + "dev": true, "license": "MIT", "dependencies": { "mlly": "^1.7.4", @@ -4810,6 +4984,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -4819,6 +4994,7 @@ "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -4867,6 +5043,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.16.0", @@ -4879,12 +5056,14 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, "license": "MIT" }, "node_modules/mlly/node_modules/pkg-types": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, "license": "MIT", "dependencies": { "confbox": "^0.1.8", @@ -4896,6 +5075,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -4905,12 +5085,14 @@ "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/nanoid": { "version": "3.3.18", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, "funding": [ { "type": "github", @@ -4947,6 +5129,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, "license": "MIT", "optional": true }, @@ -4954,6 +5137,7 @@ "version": "2.0.54", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -5000,6 +5184,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/nostics/-/nostics-1.2.0.tgz", "integrity": "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==", + "dev": true, "license": "MIT" }, "node_modules/npm-normalize-package-bin": { @@ -5013,6 +5198,7 @@ "version": "0.6.9", "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.9.tgz", "integrity": "sha512-zxlE2yvSWZWmHcNdT3+5zV2lrCogeE9YOklHrR3dFjqutq5wO7GFDYLFDRXLsYnJzwvy/im9fYoxePvS0VTW0w==", + "dev": true, "license": "MIT", "dependencies": { "citty": "^0.2.2", @@ -5030,6 +5216,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, "funding": [ "https://github.com/sponsors/sxzz", "https://opencollective.com/debug" @@ -5215,24 +5402,28 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, "license": "MIT" }, "node_modules/perfect-debounce": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "dev": true, "license": "MIT" }, "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.7", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5245,6 +5436,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.3.tgz", "integrity": "sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==", + "dev": true, "license": "MIT", "dependencies": { "confbox": "^0.3.1", @@ -5256,6 +5448,7 @@ "version": "8.5.26", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5317,6 +5510,7 @@ "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, "funding": [ { "type": "individual", @@ -5390,7 +5584,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 20.19.0" @@ -5472,6 +5666,7 @@ "version": "4.63.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.1.tgz", "integrity": "sha512-3Df9jsstwhccuEfmAMi9l8XUh/GOkVObmFTU7CCVBysEbcOZLl84jCtaAZMcPiMz2EGKsATzQcU+Xr3n/wU6cg==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.9" @@ -5585,6 +5780,7 @@ "version": "0.9.2", "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.9.2.tgz", "integrity": "sha512-3SOzvaAg8rkHrXtRjpCvCvbyO5to9oOO27Z/XqHEYXfMRVSw/qMIVdmaOk9W2lcRLtR6dlqTjo9hDeJk70QBYQ==", + "dev": true, "license": "MIT" }, "node_modules/run-applescript": { @@ -5604,7 +5800,7 @@ "version": "1.104.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.104.0.tgz", "integrity": "sha512-btHMApW2bgolvClhRW8AlQJzgI9lUB3pPSofBQQT+E46GWvf9o0TVQ13SYv5riWZVFyPN+JNz3TKW9XhBlc10w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "chokidar": "^5.0.0", @@ -5671,7 +5867,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -5681,6 +5877,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -5690,7 +5887,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -5756,6 +5953,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/srvx/-/srvx-1.0.4.tgz", "integrity": "sha512-eZmYaxUfZSo7/8m8UdsHRJNmTLSCTPPom9d7a60vMmuVeZvwhbvflRR+00/CxTCjMOFa5+H8tgBeNDVZ+w7AAQ==", + "dev": true, "license": "MIT", "bin": { "srvx": "bin/srvx.mjs" @@ -5827,12 +6025,14 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, "license": "MIT" }, "node_modules/tapable": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5851,7 +6051,7 @@ "version": "5.51.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -5870,13 +6070,14 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -5935,7 +6136,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "devOptional": true, + "dev": true, "license": "0BSD" }, "node_modules/tsx": { @@ -5957,282 +6158,368 @@ "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", - "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", - "cpu": [ - "ppc64" - ], + "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", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", - "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", - "cpu": [ - "arm" - ], + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=18" + "node": ">=14.17" } }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", - "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", - "cpu": [ - "arm64" - ], + "node_modules/typescript-eslint": { + "version": "8.69.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.69.0.tgz", + "integrity": "sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.69.0", + "@typescript-eslint/parser": "8.69.0", + "@typescript-eslint/typescript-estree": "8.69.0", + "@typescript-eslint/utils": "8.69.0" + }, "engines": { - "node": ">=18" + "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 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", - "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", - "cpu": [ - "x64" - ], + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", - "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", - "cpu": [ - "arm64" - ], + "node_modules/unplugin-remove": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unplugin-remove/-/unplugin-remove-1.0.3.tgz", + "integrity": "sha512-BZMt9v8Y/Z27cY7YQv+DpcW928znjP1cqplBXOirbANiFQtM2YCdiyNAJhHCvjppT0lScNn1aDrQnXqnRp32pQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/traverse": "^7.25.3", + "@rollup/pluginutils": "^5.1.0", + "magic-string": "^0.30.11", + "unplugin": "^1.12.0" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", - "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", - "cpu": [ - "x64" - ], + "node_modules/update-browserslist-db": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], - "engines": { - "node": ">=18" + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", - "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", - "cpu": [ - "arm64" - ], + "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/util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=18" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", - "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", - "cpu": [ - "x64" - ], + "node_modules/vite-plugin-eslint": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", + "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "@types/eslint": "^8.4.5", + "rollup": "^2.77.2" + }, + "peerDependencies": { + "eslint": ">=7", + "vite": ">=2" } }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", - "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", - "cpu": [ - "arm" - ], + "node_modules/vite-plugin-eslint/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, "engines": { - "node": ">=18" + "node": ">= 8.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", - "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", - "cpu": [ - "arm64" - ], + "node_modules/vite-plugin-eslint/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", - "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", - "cpu": [ - "ia32" - ], + "node_modules/vite-plugin-eslint/node_modules/rollup": { + "version": "2.80.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz", + "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "bin": { + "rollup": "dist/bin/rollup" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", - "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ - "loong64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "aix" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", - "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ - "mips64el" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", - "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", - "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ - "riscv64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", - "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ - "s390x" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", - "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -6240,33 +6527,33 @@ "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", - "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "netbsd" + "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", - "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -6274,33 +6561,33 @@ "license": "MIT", "optional": true, "os": [ - "openbsd" + "freebsd" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", - "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ - "x64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "sunos" + "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", - "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -6308,16 +6595,16 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", - "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -6325,343 +6612,260 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", - "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ - "x64" + "loong64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", - "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.2", - "@esbuild/android-arm": "0.28.2", - "@esbuild/android-arm64": "0.28.2", - "@esbuild/android-x64": "0.28.2", - "@esbuild/darwin-arm64": "0.28.2", - "@esbuild/darwin-x64": "0.28.2", - "@esbuild/freebsd-arm64": "0.28.2", - "@esbuild/freebsd-x64": "0.28.2", - "@esbuild/linux-arm": "0.28.2", - "@esbuild/linux-arm64": "0.28.2", - "@esbuild/linux-ia32": "0.28.2", - "@esbuild/linux-loong64": "0.28.2", - "@esbuild/linux-mips64el": "0.28.2", - "@esbuild/linux-ppc64": "0.28.2", - "@esbuild/linux-riscv64": "0.28.2", - "@esbuild/linux-s390x": "0.28.2", - "@esbuild/linux-x64": "0.28.2", - "@esbuild/netbsd-arm64": "0.28.2", - "@esbuild/netbsd-x64": "0.28.2", - "@esbuild/openbsd-arm64": "0.28.2", - "@esbuild/openbsd-x64": "0.28.2", - "@esbuild/openharmony-arm64": "0.28.2", - "@esbuild/sunos-x64": "0.28.2", - "@esbuild/win32-arm64": "0.28.2", - "@esbuild/win32-ia32": "0.28.2", - "@esbuild/win32-x64": "0.28.2" + "node": ">=12" } }, - "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==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/typescript-eslint": { - "version": "8.69.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.69.0.tgz", - "integrity": "sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.69.0", - "@typescript-eslint/parser": "8.69.0", - "@typescript-eslint/typescript-estree": "8.69.0", - "@typescript-eslint/utils": "8.69.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 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/ufo": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", - "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", - "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/unplugin-remove": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unplugin-remove/-/unplugin-remove-1.0.3.tgz", - "integrity": "sha512-BZMt9v8Y/Z27cY7YQv+DpcW928znjP1cqplBXOirbANiFQtM2YCdiyNAJhHCvjppT0lScNn1aDrQnXqnRp32pQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/traverse": "^7.25.3", - "@rollup/pluginutils": "^5.1.0", - "magic-string": "^0.30.11", - "unplugin": "^1.12.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", - "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "optional": true, + "os": [ + "linux" ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/util-extend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", - "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-plugin-eslint": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", - "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "@types/eslint": "^8.4.5", - "rollup": "^2.77.2" - }, - "peerDependencies": { - "eslint": ">=7", - "vite": ">=2" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite-plugin-eslint/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 8.0.0" + "node": ">=12" } }, - "node_modules/vite-plugin-eslint/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=12" } }, - "node_modules/vite-plugin-eslint/node_modules/rollup": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz", - "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, + "hasInstallScript": true, "license": "MIT", "bin": { - "rollup": "dist/bin/rollup" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, "license": "MIT" }, "node_modules/which": { @@ -6777,6 +6981,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, "node_modules/yargs": { @@ -6824,6 +7029,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/zigpty/-/zigpty-0.2.1.tgz", "integrity": "sha512-MR9JqJx2wf5f4wz8zpx050AlqrmWeIW+1h0SO5iEyhG3HFRjY5luC3szS2ux2EGuPjE5OU9ZAuiCBeMWBTrqZw==", + "dev": true, "workspaces": [ "playground" ] @@ -6832,6 +7038,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/zod/-/zod-4.5.4.tgz", "integrity": "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/finder-template-generator-ssg/package.json b/finder-template-generator-ssg/package.json index 54a7a8df..08598763 100644 --- a/finder-template-generator-ssg/package.json +++ b/finder-template-generator-ssg/package.json @@ -1,7 +1,7 @@ { "name": "finder-template-generator", "private": true, - "version": "0.3.16", + "version": "0.3.17", "type": "module", "license": "arr for now, i'll change it later when i decide it", "scripts": { @@ -36,16 +36,17 @@ "typescript": "^5.5.0", "typescript-eslint": "^8.69.0", "vite": "^5.4.0", - "vite-plugin-eslint": "^1.8.1" + "vite-plugin-eslint": "^1.8.1", + "esbuild": ">=0.25.0", + "@tailwindcss/vite": "^4.3.3", + "@vitejs/devtools": "^0.7.2", + "unplugin-remove": "^1.0.3", + "tailwindcss": "^4.3.3" }, "dependencies": { "@shadowdara/dlib": "^0.0.4", - "@tailwindcss/vite": "^4.3.3", - "@vitejs/devtools": "^0.7.2", "highlight.js": "^11.12.0", "jquery": "^4.0.0", - "tailwindcss": "^4.3.3", - "tellraw-parser": "^1.0.2", - "unplugin-remove": "^1.0.3" + "tellraw-parser": "^1.0.2" } } diff --git a/finder-template-generator-ssg/pages/index.tsx b/finder-template-generator-ssg/pages/index.tsx index b2474eaa..c785a679 100644 --- a/finder-template-generator-ssg/pages/index.tsx +++ b/finder-template-generator-ssg/pages/index.tsx @@ -17,6 +17,9 @@ export default function render(el: HTMLDivElement, data: string) {
  • Config Editor
  • +
  • + Regex Creator +
  • {/* {import.meta.env.MODE == "backend" && (
  • Cache Viewer diff --git a/finder-template-generator-ssg/pages/mcapp/about.jsx b/finder-template-generator-ssg/pages/mcapp/about.jsx new file mode 100644 index 00000000..c19a7340 --- /dev/null +++ b/finder-template-generator-ssg/pages/mcapp/about.jsx @@ -0,0 +1,15 @@ +import { escapeHtml, jsx, raw, Fragment } from "../../src/jsx-runtime"; +import Header from "../../src/components/mcappheader.jsx"; +import * as f from "../../src/components/mcappstyle.js"; + +export default function render(el) { + el.innerHTML = ( + <> +
    +
    +

    About

    +

    Some Infos about the Programm

    +
    + + ); +} diff --git a/finder-template-generator-ssg/pages/mcapp/index.jsx b/finder-template-generator-ssg/pages/mcapp/index.jsx new file mode 100644 index 00000000..aa531557 --- /dev/null +++ b/finder-template-generator-ssg/pages/mcapp/index.jsx @@ -0,0 +1,36 @@ +import { escapeHtml, jsx, raw, Fragment } from "../../src/jsx-runtime"; +import Header from "../../src/components/mcappheader.jsx"; +import * as f from "../../src/components/mcappstyle.js"; + +export default function render(el) { + el.innerHTML = ( + <> +
    +
    +

    MC APP

    +

    This is the Homepage of the Server

    +

    Features

    + +
    + + ); +} diff --git a/finder-template-generator-ssg/pages/mcapp/info.jsx b/finder-template-generator-ssg/pages/mcapp/info.jsx new file mode 100644 index 00000000..19c003e7 --- /dev/null +++ b/finder-template-generator-ssg/pages/mcapp/info.jsx @@ -0,0 +1,42 @@ +import { escapeHtml, jsx, raw, Fragment } from "../../src/jsx-runtime"; +import Header from "../../src/components/mcappheader.jsx"; +import * as f from "../../src/components/mcappstyle.js"; + +export default function render(el) { + el.innerHTML = ( + <> +
    +
    +

    Info

    +

    Infos about the Programm

    +

    Commands

    +
    +

    0

    +

    Closes the Program completly

    +
    +
    +

    1

    +
    +
    +

    2

    +
    +
    +

    exit

    +

    + See 0 +

    +
    +
    +

    quit

    +

    + See 0 +

    +
    +
    +

    status

    +
    +
    +
    + + ); +} diff --git a/finder-template-generator-ssg/pages/mcapp/worlds.jsx b/finder-template-generator-ssg/pages/mcapp/worlds.jsx new file mode 100644 index 00000000..6005b0d8 --- /dev/null +++ b/finder-template-generator-ssg/pages/mcapp/worlds.jsx @@ -0,0 +1,109 @@ +import { escapeHtml, jsx, raw, Fragment } from "../../src/jsx-runtime"; +import Header from "../../src/components/mcappheader.jsx"; +import * as f from "../../src/components/mcappstyle.js"; + +export default function render(el) { + el.innerHTML = ( + <> +
    +
    + + + + + + + + + + + +
    IconFolder NameLast ModifiedSizePath
    +
    + + ); + + async function loadWorlds() { + try { + // System-Info laden (falls du OS später noch brauchst) + let serveraddress = ""; + + if (import.meta.env.DEV) { + serveraddress = "http://localhost:8080"; + } + + const sysRes = await fetch(serveraddress + "/api/system"); + const sys = await sysRes.json(); + const windows = sys.os === "windows"; + + // Welten laden + const res = await fetch(serveraddress + "/api/mcapp/worlds"); + const worlds = await res.json(); // jetzt []World structs mit path, icon, name + + const tbody = document.getElementById("world-list"); + tbody.innerHTML = ""; + + worlds.forEach((world) => { + const tr = document.createElement("tr"); + + // Backend liefert bereits icon + name + let iconPath = world.icon; + let path = world.path; + + // ⚠️ Browser kann nicht direkt C:\ lesen, + // -> also sicherstellen, dass dein Gin-Backend die icon.png über r.Static() served! + // wenn nötig, hier Pfad anpassen: + // if (windows) { + // Beispiel: evtl. world.icon schon in /icons/... gewandelt? + // iconPath = "/icons/" + world.name + ".png"; + // path = "C:" + world.path; + // } + + const parts = world.path.split(/[/\\]+/); + const lastFolder = parts[parts.length - 2]; + + const webpath = encodeURIComponent( + path.replace(/[/\\]level\.dat$/i, ""), + ); + + // calculate size in MB + let size = world.size; + if (size >= 1024 * 1024) { + size = (size / (1024 * 1024)).toFixed(2) + " MB"; + } else if (size >= 1024) { + size = (size / 1024).toFixed(2) + " KB"; + } else { + size = size + " B"; + } + + tr.innerHTML = ( + <> + + + + {lastFolder} + {world.last_modified} + {size} + + + {path} + + + + ); + + tbody.appendChild(tr); + }); + } catch (err) { + console.error("Fehler beim Laden:", err); + } + } + + loadWorlds(); +} diff --git a/finder-template-generator-ssg/pages/regexcreator.css b/finder-template-generator-ssg/pages/regexcreator.css new file mode 100644 index 00000000..01b99639 --- /dev/null +++ b/finder-template-generator-ssg/pages/regexcreator.css @@ -0,0 +1,264 @@ +:root { + --bg: #f5f6f2; + --panel: #ffffff; + --ink: #14181c; + --muted: #5b6169; + --line: #dbddd6; + + --teal: #1f6f63; + --teal-soft: #e4efec; + --brick: #9c3d33; + --brick-soft: #f5e7e4; + + --sans: "Space Grotesk", system-ui, sans-serif; + --mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace; + + --radius: 10px; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + background: var(--bg); + color: var(--ink); + font-family: var(--sans); + -webkit-font-smoothing: antialiased; +} + +#app { + max-width: 880px; + margin: 0 auto; + padding: 3.5rem 1.5rem 5rem; +} + +.intro h1 { + font-size: 1.9rem; + font-weight: 600; + margin: 0 0 0.6rem; + letter-spacing: -0.01em; +} + +.intro p { + margin: 0 0 2.5rem; + max-width: 46ch; + color: var(--muted); + line-height: 1.5; +} + +.stage { + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.sets { + display: grid; + grid-template-columns: 1fr auto 1fr; + align-items: stretch; + gap: 1rem; +} + +.card { + background: var(--panel); + border: 1px solid var(--line); + border-radius: var(--radius); + padding: 1.1rem 1.2rem 1.3rem; +} + +.card label { + display: block; + font-size: 0.85rem; + font-weight: 500; + margin-bottom: 0.55rem; + color: var(--muted); +} + +.card--accept { + border-left: 3px solid var(--teal); +} + +.card--disallow { + border-left: 3px solid var(--brick); +} + +textarea { + width: 100%; + resize: vertical; + min-height: 9rem; + border: none; + outline: none; + background: transparent; + font-family: var(--mono); + font-size: 0.92rem; + line-height: 1.6; + color: var(--ink); +} + +textarea::placeholder { + color: #b7bab3; +} + +.operator { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0.15rem; + color: var(--muted); + padding-top: 1.2rem; +} + +.operator__glyph { + font-family: var(--mono); + font-size: 1.7rem; + line-height: 1; +} + +.operator__label { + font-size: 0.78rem; +} + +.settings { + display: flex; + justify-content: flex-end; +} + +.checkbox { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.88rem; + color: var(--muted); + cursor: pointer; +} + +.checkbox input { + accent-color: var(--teal); + width: 1rem; + height: 1rem; +} + +.flow-line { + align-self: center; + width: 1px; + height: 1.5rem; + background: var(--line); +} + +.card--output { + border-left: 3px solid var(--ink); +} + +.card__head { + display: flex; + align-items: baseline; + justify-content: space-between; + margin-bottom: 0.6rem; +} + +.card__head label { + margin-bottom: 0; +} + +#output { + display: block; + font-family: var(--mono); + font-size: 0.95rem; + line-height: 1.6; + word-break: break-all; + white-space: pre-wrap; + min-height: 1.6em; +} + +.card--output[data-state="empty"] #output::before { + content: 'Mindestens ein Wort unter "Akzeptieren" eingeben.'; + color: var(--muted); + font-family: var(--sans); + font-size: 0.88rem; +} + +.card--output[data-state="error"] #output { + color: var(--brick); +} + +#copy-btn { + border: 1px solid var(--line); + background: var(--panel); + color: var(--ink); + font-family: var(--sans); + font-size: 0.82rem; + padding: 0.35rem 0.7rem; + border-radius: 6px; + cursor: pointer; +} + +#copy-btn:hover:not(:disabled) { + border-color: var(--ink); +} + +#copy-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.tester-row { + display: flex; + gap: 0.7rem; + align-items: center; +} + +#tester { + flex: 1; + border: 1px solid var(--line); + border-radius: 6px; + padding: 0.55rem 0.7rem; + font-family: var(--mono); + font-size: 0.92rem; + color: var(--ink); + background: var(--panel); +} + +#tester:focus { + outline: 2px solid var(--ink); + outline-offset: 1px; +} + +.badge { + font-size: 0.85rem; + font-weight: 500; + padding: 0.4rem 0.75rem; + border-radius: 999px; + white-space: nowrap; + background: var(--line); + color: var(--muted); +} + +.badge[data-state="match"] { + background: var(--teal-soft); + color: var(--teal); +} + +.badge[data-state="no-match"] { + background: var(--brick-soft); + color: var(--brick); +} + +@media (max-width: 640px) { + .sets { + grid-template-columns: 1fr; + } + + .operator { + flex-direction: row; + padding-top: 0; + } +} + +@media (prefers-reduced-motion: reduce) { + * { + transition: none !important; + } +} diff --git a/finder-template-generator-ssg/pages/regexcreator.tsx b/finder-template-generator-ssg/pages/regexcreator.tsx new file mode 100644 index 00000000..911e4f18 --- /dev/null +++ b/finder-template-generator-ssg/pages/regexcreator.tsx @@ -0,0 +1,169 @@ +import { jsx } from "../src/jsx-runtime"; +import { generateRegex } from "../src/lib/regex"; +import "./regexcreator.css"; + +export default function render(el: HTMLDivElement) { + el.innerHTML = ( +
    +
    +

    + Regex-Generator /{" "} + + Home + +

    +

    + Zwei Wortlisten werden zu einem Muster verrechnet: alles aus der + ersten Liste passt, alles aus der zweiten nicht. +

    +
    + +
    +
    +
    + + +
    + + + +
    + + +
    +
    + +
    + +
    + + + +
    +
    + + +
    + +
    + +
    + +
    + + + – + +
    +
    +
    +
    + ); + + const acceptEl = el.querySelector("#accept")!; + const disallowEl = el.querySelector("#disallow")!; + const ignoreCaseEl = el.querySelector("#ignore-case")!; + const outputWrapEl = el.querySelector("#output-wrap")!; + const outputEl = el.querySelector("#output")!; + const copyBtn = el.querySelector("#copy-btn")!; + const testerEl = el.querySelector("#tester")!; + const badgeEl = el.querySelector("#badge")!; + + let currentRegex: RegExp | null = null; + let copyResetTimer: number | undefined; + + function parseLines(value: string): string[] { + return value + .split("\n") + .map((line) => line.trim()) + .filter((line) => line.length > 0); + } + + function update(): void { + const accept = parseLines(acceptEl.value); + const disallow = parseLines(disallowEl.value); + const flags = ignoreCaseEl.checked ? "i" : ""; + + if (accept.length === 0) { + currentRegex = null; + outputEl.textContent = ""; + outputWrapEl.dataset.state = "empty"; + copyBtn.disabled = true; + updateTester(); + return; + } + + try { + currentRegex = generateRegex(accept, disallow, { flags }); + outputEl.textContent = currentRegex.source; + outputWrapEl.dataset.state = "ready"; + copyBtn.disabled = false; + } catch (err) { + currentRegex = null; + outputEl.textContent = err instanceof Error ? err.message : String(err); + outputWrapEl.dataset.state = "error"; + copyBtn.disabled = true; + } + + updateTester(); + } + + function updateTester(): void { + const value = testerEl.value; + + if (!currentRegex || value.length === 0) { + badgeEl.textContent = "–"; + badgeEl.dataset.state = "idle"; + return; + } + + const matches = currentRegex.test(value); + badgeEl.textContent = matches ? "passt" : "passt nicht"; + badgeEl.dataset.state = matches ? "match" : "no-match"; + } + + acceptEl.addEventListener("input", update); + disallowEl.addEventListener("input", update); + ignoreCaseEl.addEventListener("change", update); + testerEl.addEventListener("input", updateTester); + + copyBtn.addEventListener("click", async () => { + if (!currentRegex) return; + + await navigator.clipboard.writeText(currentRegex.source); + copyBtn.textContent = "Kopiert"; + window.clearTimeout(copyResetTimer); + copyResetTimer = window.setTimeout(() => { + copyBtn.textContent = "Kopieren"; + }, 1200); + }); + + update(); +} diff --git a/finder-template-generator-ssg/pages/viewer.tsx b/finder-template-generator-ssg/pages/viewer.tsx index dd9156fb..3041e676 100644 --- a/finder-template-generator-ssg/pages/viewer.tsx +++ b/finder-template-generator-ssg/pages/viewer.tsx @@ -22,10 +22,22 @@ const isStatic = import.meta.env.MODE === "static"; export default function render(el: HTMLDivElement) { if (isStatic) { - renderStatic(el); - } else { - renderServer(el); + const builtin: [string, string][] = Object.entries(builtinTemplates).map( + ([name, content]) => [name, JSON.stringify(content)], + ); + + renderViewer(el, { + templates: builtin, + builtin, + custom: [], + count_templates: builtin.length, + count_buildin_templates: builtin.length, + count_custom_templates: 0, + }); + return; } + + void renderServer(el); } let popup = ( @@ -68,13 +80,18 @@ let popup = ( ); -function renderStatic(el: HTMLDivElement) { - // templates.js enthält Objekte, Viewer erwartet Strings - const builtin: [string, string][] = Object.entries(builtinTemplates).map( - ([name, content]) => [name, JSON.stringify(content)], - ); - - const allTags = getAllTags(builtin); +function renderViewer( + el: HTMLDivElement, + data: { + templates: [string, string][]; + builtin: [string, string][]; + custom: [string, string][]; + count_templates: number; + count_buildin_templates: number; + count_custom_templates: number; + }, +) { + const allTags = getAllTags(data.templates); el.innerHTML = ( <> @@ -82,41 +99,41 @@ function renderStatic(el: HTMLDivElement) {
    - TEMPLATE VIEWER / + TEMPLATE VIEWER /{" "} TEMPLATE CREATOR {" "} - / + /{" "} HOME

    Templates

    -

    Durchsuche und erkunde alle verfügbaren Templates.

    +

    + {isStatic + ? "Browse and explore all available templates." + : "Search and explore all available templates."} +

    - {isStatic ? ( - "" - ) : ( + {!isStatic ? (
    - {builtin.length} + {data.count_templates} Templates
    - )} + ) : null}
    - {builtin.length} + {data.count_buildin_templates} Built-in
    - {isStatic ? ( - "" - ) : ( + {!isStatic ? (
    - 0 + {data.count_custom_templates} Custom
    - )} + ) : null}
    @@ -126,32 +143,37 @@ function renderStatic(el: HTMLDivElement) {
    - {isStatic ? ( - "" - ) : ( - - )} + {!isStatic ? ( + <> + + + + + ) : null}
    Tags: {allTags.map((tag) => (
    @@ -191,114 +214,14 @@ async function renderServer(el: HTMLDivElement) { const data = (await response.json()) as ServerResponse; - const templates = Object.entries(data.templates); - const builtin = Object.entries(data.builtin); - const custom = Object.entries(data.custom); - - const allTags = getAllTags(templates); - - el.innerHTML = ( - <> - {popup} -
    -
    -
    - TEMPLATE VIEWER / - - TEMPLATE CREATOR - - / - - HOME - -

    Templates

    -

    Durchsuche und erkunde alle verfügbaren Templates.

    -
    - -
    -
    - {data.count_templates} - Templates -
    - -
    - {data.count_buildin_templates} - Built-in -
    - -
    - {data.count_custom_templates} - Custom -
    -
    -
    - -
    - - -
    - - - - - -
    -
    - -
    - Tags: - - - {allTags.map((tag) => ( - - ))} -
    -
    - -
    - {renderTemplates(builtin, "builtin")} - {renderTemplates(custom, "custom")} -
    - - -
    - - ); - - setupSelector(el); + renderViewer(el, { + templates: Object.entries(data.templates), + builtin: Object.entries(data.builtin), + custom: Object.entries(data.custom), + count_templates: data.count_templates, + count_buildin_templates: data.count_buildin_templates, + count_custom_templates: data.count_custom_templates, + }); } catch (error) { console.error(error); @@ -306,8 +229,8 @@ async function renderServer(el: HTMLDivElement) {
    ERROR -

    Templates konnten nicht geladen werden.

    -

    Der Template-Server ist momentan nicht erreichbar.

    +

    Templates could not be loaded.

    +

    The template server is currently not reachable.

    ); @@ -335,7 +258,7 @@ function renderTemplates( data-tags={escapeHtml(tags.join("|").toLowerCase())} tabindex="0" role="button" - aria-label={`Template ${escapeHtml(name)} öffnen`} + aria-label={`Template ${escapeHtml(name)} open`} >
    {type === "builtin" ? "★" : "◇"}
    diff --git a/finder-template-generator-ssg/public/dependencies.txt b/finder-template-generator-ssg/public/dependencies.txt index cea58f18..c8f77313 100644 --- a/finder-template-generator-ssg/public/dependencies.txt +++ b/finder-template-generator-ssg/public/dependencies.txt @@ -161,7 +161,7 @@ fast-levenshtein@2.0.6 -- MIT fdir@6.5.0 -- MIT file-entry-cache@8.0.0 -- MIT find-up@5.0.0 -- MIT -finder-template-generator@0.3.16 -- UNLICENSED +finder-template-generator@0.3.17 -- UNLICENSED flat-cache@4.0.1 -- MIT flatted@3.4.4 -- ISC fs.realpath@1.0.0 -- ISC diff --git a/finder-template-generator-ssg/public/install.sh b/finder-template-generator-ssg/public/install.sh index 1b080010..69e88ea6 100644 --- a/finder-template-generator-ssg/public/install.sh +++ b/finder-template-generator-ssg/public/install.sh @@ -86,3 +86,8 @@ echo echo "Finder installed successfully!" echo echo " $INSTALL_DIR/finder" + +if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then + echo "export PATH=\"\$PATH:$INSTALL_DIR\"" >> "$HOME/.bashrc" + export PATH="$PATH:$INSTALL_DIR" +fi diff --git a/finder-template-generator-ssg/src/components/mcappheader.jsx b/finder-template-generator-ssg/src/components/mcappheader.jsx new file mode 100644 index 00000000..b0cdd2c8 --- /dev/null +++ b/finder-template-generator-ssg/src/components/mcappheader.jsx @@ -0,0 +1,27 @@ +import { escapeHtml, jsx, raw, Fragment } from "../jsx-runtime"; +import "./mcappstyle.css"; + +export default function render() { + return ( + <> +
    + +
    + + ); +} diff --git a/finder-template-generator-ssg/src/components/mcappstyle.css b/finder-template-generator-ssg/src/components/mcappstyle.css new file mode 100644 index 00000000..6019d7b0 --- /dev/null +++ b/finder-template-generator-ssg/src/components/mcappstyle.css @@ -0,0 +1,163 @@ +/* Sans-Serif */ +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +body { + font-family: "Inter", sans-serif; + /* modern, sehr clean */ + font-family: "Roboto", sans-serif; + /* Standard in Android */ + font-family: "Open Sans", sans-serif; + /* neutral, gut lesbar */ + font-family: "Lato", sans-serif; + /* elegant, weich */ + font-family: "Poppins", sans-serif; + /* rund, modern */ +} + +/* --- Header Styles --- */ +header { + background-color: #2c3e50; + /* dunkles Blau/Grau */ + color: white; + padding: 1rem 2rem; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + position: sticky; + top: 0; + z-index: 1000; +} + +header nav ul { + list-style: none; + display: flex; + gap: 2rem; + /* Abstand zwischen den Links */ + margin: 0; + padding: 0; +} + +header nav ul li a { + color: white; + text-decoration: none; + font-weight: bold; + transition: color 0.2s; +} + +header nav ul li a:hover { + color: #1abc9c; + /* Highlight-Farbe beim Hover */ +} + +/* --- Main Content Styles --- */ +main { + padding: 2rem; + font-family: Arial, sans-serif; + background-color: #ecf0f1; + min-height: 100vh; +} + +/* --- Table Styles --- */ +table { + width: 100%; + border-collapse: collapse; + margin-top: 1rem; + background-color: white; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + border-radius: 8px; + overflow: hidden; + font-family: Arial, sans-serif; +} + +table thead { + background-color: #616161; + color: white; +} + +table th, +table td { + padding: 0.75rem 1rem; + text-align: left; + border-bottom: 1px solid #bdc3c7; +} + +table th { + font-weight: bold; +} + +table tbody tr:hover { + background-color: #f1f1f1; + cursor: pointer; +} + +/* Optional: Alternate row colors */ +table tbody tr:nth-child(even) { + background-color: #f9f9f9; +} + +table tbody tr:nth-child(even):hover { + background-color: #f9f9f9; +} + +a { + color: #007e0d; +} + +a:hover { + color: #0059c0; +} + +/* Darkmode */ +@media (prefers-color-scheme: dark) { + body { + background: #121212; + color: #e0e0e0; + } + + header { + background: #1f1f1f; + box-shadow: 0 2px 5px rgba(255, 255, 255, 0.1); + } + + main { + background: #000000; + } + + table { + background: #1e1e1e; + border-color: #333; + } + + table thead { + background-color: #303030; + color: white; + } + + table th, + table td { + border-bottom: 1px solid #0f0f0f; + } + + table tbody tr:hover { + background-color: #3e3e3e; + cursor: pointer; + } + + /* Optional: Alternate row colors */ + table tbody tr:nth-child(even) { + background-color: #000000; + } + + table tbody tr:nth-child(even):hover { + background-color: #3e3e3e; + } + + a { + color: rgb(17, 255, 41); + } + + a:hover { + } +} diff --git a/finder-template-generator-ssg/src/components/mcappstyle.js b/finder-template-generator-ssg/src/components/mcappstyle.js new file mode 100644 index 00000000..8a66a932 --- /dev/null +++ b/finder-template-generator-ssg/src/components/mcappstyle.js @@ -0,0 +1 @@ +import "./mcappstyle.css"; diff --git a/finder-template-generator-ssg/src/lib/regex.ts b/finder-template-generator-ssg/src/lib/regex.ts new file mode 100644 index 00000000..6cd677c5 --- /dev/null +++ b/finder-template-generator-ssg/src/lib/regex.ts @@ -0,0 +1,159 @@ +/** + * generateRegex.ts + * ------------------------------------------------------------ + * Erzeugt aus einer "accept"-Liste und einer "disallow"-Liste + * einen einzigen RegExp, der: + * - alle Strings aus `accept` matcht + * - alle Strings aus `disallow` NICHT matcht + * + * Prinzip (boolesche Algebra auf Sprachen/Regex): + * Ergebnis = Accept UND NICHT(Disallow) + * + * Dafür wird: + * 1. Aus jeder Liste ein kompakter Regex-Fragment via Trie + * generiert (gemeinsame Präfixe werden zusammengefasst, + * einzelne Buchstaben zu Zeichenklassen [abc] verschmolzen). + * 2. Das disallow-Fragment als negatives Lookahead (?!...) + * vor das accept-Fragment gesetzt -> das ist die "UND NICHT" + * Verknüpfung. + * ------------------------------------------------------------ + */ + +/** Ein Trie-Knoten: pro Zeichen ein Kind-Knoten, plus optionales Wortende-Flag */ +interface TrieNode { + children: Map; + isEnd: boolean; +} + +function createNode(): TrieNode { + return { children: new Map(), isEnd: false }; +} + +/** Escaped ein einzelnes Zeichen für sichere Verwendung in RegExp */ +function escapeRegexChar(ch: string): string { + return ch.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +/** Baut aus einem Array von Strings einen Trie */ +function buildTrie(words: readonly string[]): TrieNode { + const root = createNode(); + for (const word of words) { + let node = root; + for (const ch of word) { + let child = node.children.get(ch); + if (!child) { + child = createNode(); + node.children.set(ch, child); + } + node = child; + } + node.isEnd = true; + } + return root; +} + +/** + * Wandelt einen Trie-Knoten rekursiv in ein Regex-Fragment (ohne Anker) um. + * Fasst dabei: + * - mehrere terminale Einzelbuchstaben zu [abc] zusammen + * - Teilbäume in nicht-erfassende Gruppen (?:...) + * - optionale Verzweigungen (wenn Knoten selbst Wortende ist) mit `?` + */ +function trieToFragment(node: TrieNode): string { + if (node.children.size === 0) return ""; + + const branchParts: string[] = []; + const singleChars: string[] = []; + + for (const [key, child] of node.children) { + const isLeaf = child.children.size === 0 && child.isEnd; + + if (isLeaf) { + singleChars.push(escapeRegexChar(key)); + } else { + const subFragment = trieToFragment(child); + const wrapped = subFragment.includes("|") + ? `(?:${subFragment})` + : subFragment; + const optional = child.isEnd ? "?" : ""; + branchParts.push(`${escapeRegexChar(key)}${wrapped}${optional}`); + } + } + + if (singleChars.length === 1) { + branchParts.push(singleChars[0]); + } else if (singleChars.length > 1) { + branchParts.push(`[${singleChars.join("")}]`); + } + + return branchParts.join("|"); +} + +/** Erzeugt aus einer Wortliste ein Regex-Fragment (oder null bei leerer Liste) */ +function wordsToFragment(words: readonly string[] | undefined): string | null { + if (!words || words.length === 0) return null; + const trie = buildTrie(words); + const fragment = trieToFragment(trie); + return fragment || null; +} + +export interface GenerateRegexOptions { + /** zusätzliche RegExp-Flags, z.B. 'i' für case-insensitive */ + flags?: string; +} + +/** + * Hauptfunktion. + * @param accept Strings, die der Regex akzeptieren soll + * @param disallow Strings, die der Regex ablehnen soll + * @param options optionale Einstellungen (z.B. RegExp-Flags) + */ +export function generateRegex( + accept: readonly string[], + disallow: readonly string[] = [], + options: GenerateRegexOptions = {}, +): RegExp { + if (accept.length === 0) { + throw new Error("accept-Array darf nicht leer sein."); + } + + const flags = options.flags ?? ""; + const ignoreCase = flags.includes("i"); + + const disallowSet = new Set( + disallow.map((word) => (ignoreCase ? word.toLocaleLowerCase() : word)), + ); + + const effectiveAccept = accept.filter((word) => { + const key = ignoreCase ? word.toLocaleLowerCase() : word; + return !disallowSet.has(key); + }); + + if (effectiveAccept.length === 0) { + throw new Error("Alle akzeptierten Wörter werden abgelehnt."); + } + + const acceptFragment = wordsToFragment(effectiveAccept); + + if (!acceptFragment) { + throw new Error("Keine gültigen akzeptierten Wörter."); + } + + return new RegExp(`^(?:${acceptFragment})$`, flags); +} + +// // ------------------------------------------------------------ +// // Demo / Selbsttest (kann entfernt werden) +// // ------------------------------------------------------------ +// if (require.main === module) { +// const accept = ['cat', 'car', 'cart', 'dog', 'do']; +// const disallow = ['cot', 'cats', 'dot']; + +// const re = generateRegex(accept, disallow); +// console.log('Generiertes Regex:', re.source); + +// const testWords = [...accept, ...disallow, 'foo', 'ca', 'carts']; +// for (const w of testWords) { +// console.log(w.padEnd(8), '->', re.test(w)); +// } +// } diff --git a/finder-template-generator-ssg/src/templates.js b/finder-template-generator-ssg/src/templates.js index 2b1f7d90..b688fa82 100644 --- a/finder-template-generator-ssg/src/templates.js +++ b/finder-template-generator-ssg/src/templates.js @@ -3016,6 +3016,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "llama.json5": { @@ -3042,6 +3043,7 @@ export default { "name": "scripts" } ], + "min_version": "0.3.16", "name": "*" }, "llvm.json5": { @@ -3068,6 +3070,7 @@ export default { "name": "tools" } ], + "min_version": "0.3.16", "name": "*" }, "loom.json5": { @@ -3082,6 +3085,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "lua.json5": { @@ -3096,6 +3100,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "makecode.json5": { @@ -3104,6 +3109,7 @@ export default { "*.json" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "mapbox.json5": { @@ -3119,6 +3125,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "markdown-docs.json5": { @@ -3134,6 +3141,7 @@ export default { "name": "content" } ], + "min_version": "0.3.16", "name": "*" }, "marko.json5": { @@ -3149,6 +3157,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "matlab.json5": { @@ -3158,6 +3167,7 @@ export default { "*.mlx" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "mcdatapack.json5": { @@ -3212,6 +3222,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "metabase.json5": { @@ -3220,6 +3231,7 @@ export default { "docker-compose.yml" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "microservices.json5": { @@ -3243,6 +3255,7 @@ export default { "level.dat" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "mistral.json5": { @@ -3262,6 +3275,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "mlflow.json5": { @@ -3288,6 +3302,7 @@ export default { "name": "experiments" } ], + "min_version": "0.3.16", "name": "*" }, "mocha.json5": { @@ -3303,6 +3318,7 @@ export default { "name": "test" } ], + "min_version": "0.3.16", "name": "*" }, "modal.json5": { @@ -3321,6 +3337,7 @@ export default { "name": "functions" } ], + "min_version": "0.3.16", "name": "*" }, "mongodb.json5": { @@ -3335,6 +3352,7 @@ export default { "name": "schemas" } ], + "min_version": "0.3.16", "name": "*" }, "monogame.json5": { @@ -3349,7 +3367,12 @@ export default { "name": "Content" } ], - "name": "*" + "min_version": "0.3.16", + "name": "*", + "tags": [ + "game-engine", + "C#" + ] }, "monorepo.json5": { "description": "Monorepo project (multiple packages)", @@ -3364,6 +3387,7 @@ export default { "name": "packages" } ], + "min_version": "0.3.16", "name": "*" }, "motioncanvas.json5": { @@ -3379,6 +3403,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "move.json5": { @@ -3396,6 +3421,7 @@ export default { "name": "sources" } ], + "min_version": "0.3.16", "name": "*" }, "mysql.json5": { @@ -3411,6 +3437,7 @@ export default { "name": "migrations" } ], + "min_version": "0.3.16", "name": "*", "tags": [ "sql" @@ -3538,6 +3565,7 @@ export default { "name": "contracts" } ], + "min_version": "0.3.16", "name": "*" }, "nim.json5": { @@ -3566,12 +3594,18 @@ export default { "name": "*" }, "npm.json5": { + "description": "NPM package template", "files": [ "package.json" ], "folders": [], "min_version": "0.3.16", - "name": "*" + "name": "*", + "tags": [ + "npm", + "node", + "package" + ] }, "nuxt.json5": { "description": "Nuxt.js Vue.js full-stack framework", @@ -3764,6 +3798,7 @@ export default { "otel-collector-config.yml" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "pagerduty.json5": { @@ -3772,6 +3807,7 @@ export default { "pagerduty.yml" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "panda3d.json5": { @@ -3786,7 +3822,12 @@ export default { "name": "models" } ], - "name": "*" + "min_version": "0.3.16", + "name": "*", + "tags": [ + "game-engine", + "python" + ] }, "pandas.json5": { "description": "Pandas data analysis library", @@ -3795,6 +3836,7 @@ export default { "*.py" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "panel.json5": { @@ -3813,6 +3855,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "parcel.json5": { @@ -3828,6 +3871,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "payload.json5": { @@ -3843,6 +3887,7 @@ export default { "name": "src" } ], + "min_version": "0.3.16", "name": "*" }, "perl.json5": { @@ -3858,6 +3903,7 @@ export default { "name": "lib" } ], + "min_version": "0.3.16", "name": "*" }, "perplexity.json5": { @@ -3875,6 +3921,7 @@ export default { "name": "queries" } ], + "min_version": "0.3.16", "name": "*" }, "perseus.json5": { @@ -3987,6 +4034,7 @@ export default { "name": "tests" } ], + "min_version": "0.3.16", "name": "*" }, "pnpm-workspace.json5": { @@ -4002,6 +4050,7 @@ export default { "name": "packages" } ], + "min_version": "0.3.16", "name": "*" }, "pocketbase.json5": { @@ -4016,6 +4065,7 @@ export default { "name": "pb_migrations" } ], + "min_version": "0.3.16", "name": "*" }, "podman.json5": { @@ -4025,6 +4075,7 @@ export default { "podman-compose.yml" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "poetry.json5": { @@ -4034,6 +4085,7 @@ export default { "poetry.lock" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "polars.json5": { @@ -4061,6 +4113,7 @@ export default { "docker-compose.yml" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "postgrest.json5": { @@ -4069,6 +4122,7 @@ export default { "postgrest.conf" ], "folders": [], + "min_version": "0.3.16", "name": "*" }, "prefect.json5": { @@ -4087,6 +4141,7 @@ export default { "name": "flows" } ], + "min_version": "0.3.16", "name": "*" }, "presto.json5": { diff --git a/install.sh b/install.sh index 1b080010..69e88ea6 100644 --- a/install.sh +++ b/install.sh @@ -86,3 +86,8 @@ echo echo "Finder installed successfully!" echo echo " $INSTALL_DIR/finder" + +if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then + echo "export PATH=\"\$PATH:$INSTALL_DIR\"" >> "$HOME/.bashrc" + export PATH="$PATH:$INSTALL_DIR" +fi diff --git a/internal/bt/config/banner.go b/internal/bt/config/banner.go new file mode 100644 index 00000000..8e3d5af4 --- /dev/null +++ b/internal/bt/config/banner.go @@ -0,0 +1,17 @@ +package config + +import "fmt" + +func Banner() { + text := + ` ________ _________ +|\ __ \|\___ ___\ +\ \ \|\ /\|___ \ \_| + \ \ __ \ \ \ \ + \ \ \|\ \ \ \ \ + \ \_______\ \ \__\ + \|_______| \|__| +` + + fmt.Println(text) +} diff --git a/internal/bt/config/config.go b/internal/bt/config/config.go new file mode 100644 index 00000000..eca3f9e7 --- /dev/null +++ b/internal/bt/config/config.go @@ -0,0 +1,29 @@ +package config + +import ( + "encoding/json" + "os" + + "github.com/shadowdara/finder/pub/json5" +) + +type Config struct { + ProjectScripts map[string]string `json:"projectscripts"` +} + +func LoadConfig() Config { + data, err := os.ReadFile("bt.jsonc") + if err != nil { + return Config{ProjectScripts: map[string]string{}} + } + + var cfg Config + data = []byte(json5.PreprocessJSON5(string(data))) + + err = json.Unmarshal(data, &cfg) + if err != nil { + panic(err) + } + + return cfg +} diff --git a/internal/bt/core/goinstall.go b/internal/bt/core/goinstall.go new file mode 100644 index 00000000..4332d755 --- /dev/null +++ b/internal/bt/core/goinstall.go @@ -0,0 +1,42 @@ +package core + +import ( + "bufio" + "fmt" + "os" + "os/exec" + "strings" +) + +// function to install a binary with cgo with zig as the compiler +func RunGoInstall() { + reader := bufio.NewReader(os.Stdin) + + fmt.Print("Install Path: ") + name, _ := reader.ReadString('\n') + name = strings.TrimSpace(name) + + cmd := exec.Command("go", "install", name) + + // add new vars + cmd.Env = append(os.Environ(), + "CC=zig cc", + "CXX=zig c++", + ) + + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + if err := cmd.Run(); err != nil { + fmt.Println("Error: ", err) + } +} + +func Execute(args []string) error { + cmd := exec.Command(args[0], args[1:]...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + return cmd.Run() +} diff --git a/internal/bt/core/tags.go b/internal/bt/core/tags.go new file mode 100644 index 00000000..5af37d50 --- /dev/null +++ b/internal/bt/core/tags.go @@ -0,0 +1,27 @@ +package core + +import ( + "fmt" + "os/exec" +) + +// Function to add a Tag to a git repo and push it +func Addtag(tag string) { + cmd := exec.Command("git", "tag", tag) + + err := cmd.Run() + if err != nil { + fmt.Println("Error:", err) + return + } + + cmd = exec.Command("git", "push", "origin", tag) + + err = cmd.Run() + if err != nil { + fmt.Println("Error:", err) + return + } + + fmt.Printf("Pushed Tag %s to Github\n", tag) +} diff --git a/internal/bt/core/version.go b/internal/bt/core/version.go new file mode 100644 index 00000000..ff8ee017 --- /dev/null +++ b/internal/bt/core/version.go @@ -0,0 +1,8 @@ +package core + +import "github.com/shadowdara/finder/internal/finderversion" + +// Function to get the Version +func GetVersion() string { + return finderversion.Version +} diff --git a/internal/bt/gitrepo/gitrepo.go b/internal/bt/gitrepo/gitrepo.go new file mode 100644 index 00000000..f5544123 --- /dev/null +++ b/internal/bt/gitrepo/gitrepo.go @@ -0,0 +1,471 @@ +package gitrepo + +import ( + "archive/zip" + "bufio" + "bytes" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" +) + +const archiveVersion = 1 + +type PackOptions struct { + Root string + Output string + Encrypt bool + Base64 bool +} + +type RestoreOptions struct { + Archive string + Destination string + Decrypt bool +} + +type archiveMetadata struct { + FormatVersion int `json:"format_version"` + Repository string `json:"repository"` + OriginalPath string `json:"original_path"` + GitType string `json:"git_type"` +} + +func PackInteractive() error { + reader := bufio.NewReader(os.Stdin) + root := prompt(reader, "Root (Git-Repository, leer = aktuelles Verzeichnis): ", ".") + output := prompt(reader, "Ausgabe-Verzeichnis (leer = ./git-archives): ", "./git-archives") + encrypt := prompt(reader, "Verschlüsseln? (y/n, default n): ", "n") == "y" + useBase64 := prompt(reader, "Zusätzlich Base64? (y/n, default n): ", "n") == "y" + + return Pack(PackOptions{Root: root, Output: output, Encrypt: encrypt, Base64: useBase64}) +} + +func RestoreInteractive() error { + reader := bufio.NewReader(os.Stdin) + archive := prompt(reader, "Archiv-Pfad: ", "./git-archives") + destination := prompt(reader, "Ziel-Verzeichnis: ", "") + decrypt := prompt(reader, "Entschlüsseln? (y/n, default n): ", "n") == "y" + + return Restore(RestoreOptions{Archive: archive, Destination: destination, Decrypt: decrypt}) +} + +func prompt(reader *bufio.Reader, message, defaultValue string) string { + fmt.Print(message) + value, _ := reader.ReadString('\n') + value = strings.TrimSpace(value) + if value == "" { + return defaultValue + } + return value +} + +func Pack(options PackOptions) error { + mainRepo, err := findMainGitRepo(options.Root) + if err != nil { + return err + } + + outputDir, err := filepath.Abs(options.Output) + if err != nil { + return err + } + + fmt.Printf("Main-Repository: %s\nAusgabe: %s\n\n", mainRepo, outputDir) + repositories, err := findNestedRepositories(mainRepo, outputDir) + if err != nil { + return err + } + if len(repositories) == 0 { + fmt.Println("Keine verschachtelten Git-Repositories gefunden.") + return nil + } + + if options.Encrypt && !opensslAvailable() { + return errors.New("openssl wurde nicht gefunden") + } + var password string + if options.Encrypt { + password, err = readPassword("Passwort: ") + if err != nil { + return err + } + confirmation, err := readPassword("Passwort wiederholen: ") + if err != nil { + return err + } + if password == "" || password != confirmation { + return errors.New("Passwörter stimmen nicht überein oder sind leer") + } + } + + if err := os.MkdirAll(outputDir, 0755); err != nil { + return err + } + for _, repo := range repositories { + relativeRepo, err := filepath.Rel(mainRepo, repo) + if err != nil { + return err + } + safeName := strings.ReplaceAll(filepath.ToSlash(relativeRepo), "/", "_") + archivePath := filepath.Join(outputDir, safeName+".git.zip") + if options.Encrypt { + archivePath += ".enc" + } + if options.Base64 { + archivePath += ".b64" + } + + fmt.Printf("Packe: %s\n", relativeRepo) + plain, err := os.CreateTemp("", "gitrepo-*.zip") + if err != nil { + return err + } + plainPath := plain.Name() + plain.Close() + defer os.Remove(plainPath) + + if err := zipGitDirectory(repo, plainPath); err != nil { + return err + } + if err := writeArchive(plainPath, archivePath, options.Encrypt, options.Base64, password); err != nil { + return err + } + info, err := os.Stat(archivePath) + if err != nil { + return err + } + fmt.Printf(" -> %s\n %d Bytes\n\n", archivePath, info.Size()) + } + fmt.Println("Fertig.") + return nil +} + +func Restore(options RestoreOptions) error { + archive, err := filepath.Abs(options.Archive) + if err != nil { + return err + } + destination, err := filepath.Abs(options.Destination) + if err != nil { + return err + } + if _, err := os.Stat(archive); err != nil { + return fmt.Errorf("Archiv nicht gefunden: %w", err) + } + + current := archive + temporary := []string{} + defer func() { + for _, path := range temporary { + _ = os.Remove(path) + } + }() + if strings.HasSuffix(archive, ".b64") { + decoded, err := os.CreateTemp("", "gitrepo-decoded-*") + if err != nil { + return err + } + decoded.Close() + temporary = append(temporary, decoded.Name()) + if err := decodeBase64(current, decoded.Name()); err != nil { + return err + } + current = decoded.Name() + } + if strings.Contains(filepath.Base(archive), ".enc") || options.Decrypt { + if !opensslAvailable() { + return errors.New("openssl wurde nicht gefunden") + } + password, err := readPassword("Passwort: ") + if err != nil { + return err + } + decrypted, err := os.CreateTemp("", "gitrepo-decrypted-*") + if err != nil { + return err + } + decrypted.Close() + temporary = append(temporary, decrypted.Name()) + if err := decryptFile(current, decrypted.Name(), password); err != nil { + return err + } + current = decrypted.Name() + } + + if err := restoreZip(current, destination); err != nil { + return err + } + fmt.Println("Restore abgeschlossen.") + return nil +} + +func findMainGitRepo(path string) (string, error) { + absolute, err := filepath.Abs(path) + if err != nil { + return "", err + } + command := exec.Command("git", "-C", absolute, "rev-parse", "--show-toplevel") + output, err := command.Output() + if err != nil { + return "", fmt.Errorf("%s ist kein Git-Repository", absolute) + } + return filepath.Abs(strings.TrimSpace(string(output))) +} + +func findNestedRepositories(mainRepo, outputDir string) ([]string, error) { + var repositories []string + err := filepath.Walk(mainRepo, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if path == filepath.Join(mainRepo, ".git") || path == outputDir || strings.HasPrefix(path, outputDir+string(os.PathSeparator)) { + if info.IsDir() { + return filepath.SkipDir + } + return nil + } + if info.IsDir() && path != mainRepo && isGitRepository(path) { + repositories = append(repositories, path) + return filepath.SkipDir + } + return nil + }) + if err != nil { + return nil, err + } + sort.Strings(repositories) + return repositories, nil +} + +func isGitRepository(path string) bool { + gitPath := filepath.Join(path, ".git") + info, err := os.Stat(gitPath) + if err == nil && info.IsDir() { + return true + } + data, err := os.ReadFile(gitPath) + return err == nil && bytes.HasPrefix(data, []byte("gitdir:")) +} + +func zipGitDirectory(repo, archive string) error { + gitPath := filepath.Join(repo, ".git") + info, err := os.Stat(gitPath) + if err != nil { + return fmt.Errorf("kein .git gefunden: %s", repo) + } + file, err := os.Create(archive) + if err != nil { + return err + } + defer file.Close() + writer := zip.NewWriter(file) + metadata := archiveMetadata{archiveVersion, filepath.Base(repo), repo, "file"} + if info.IsDir() { + metadata.GitType = "directory" + } + metadataData, _ := json.MarshalIndent(metadata, "", " ") + metadataWriter, err := writer.Create("gitpack.json") + if err != nil { + return err + } + if _, err := metadataWriter.Write(metadataData); err != nil { + return err + } + if info.IsDir() { + err = filepath.Walk(gitPath, func(path string, info os.FileInfo, err error) error { + if err != nil || info.IsDir() { + return err + } + relative, err := filepath.Rel(repo, path) + if err != nil { + return err + } + entry, err := writer.Create(filepath.ToSlash(relative)) + if err != nil { + return err + } + input, err := os.Open(path) + if err != nil { + return err + } + defer input.Close() + _, err = io.Copy(entry, input) + return err + }) + } else { + entry, createErr := writer.Create(".git") + if createErr != nil { + return createErr + } + input, openErr := os.Open(gitPath) + if openErr != nil { + return openErr + } + _, err = io.Copy(entry, input) + input.Close() + } + if err != nil { + return err + } + return writer.Close() +} + +func writeArchive(source, destination string, encrypt, useBase64 bool, password string) error { + current := source + temporary := "" + defer func() { + if temporary != "" { + _ = os.Remove(temporary) + } + }() + if encrypt { + file, err := os.CreateTemp("", "gitrepo-encrypted-*") + if err != nil { + return err + } + file.Close() + temporary = file.Name() + if err := encryptFile(current, temporary, password); err != nil { + return err + } + current = temporary + } + if useBase64 { + input, err := os.Open(current) + if err != nil { + return err + } + output, err := os.Create(destination) + if err != nil { + input.Close() + return err + } + encoder := base64.NewEncoder(base64.StdEncoding, output) + _, copyErr := io.Copy(encoder, input) + closeErr := encoder.Close() + input.Close() + output.Close() + if copyErr != nil { + return copyErr + } + return closeErr + } + input, err := os.Open(current) + if err != nil { + return err + } + output, err := os.Create(destination) + if err != nil { + input.Close() + return err + } + _, copyErr := io.Copy(output, input) + input.Close() + closeErr := output.Close() + if copyErr != nil { + return copyErr + } + return closeErr +} + +func decodeBase64(source, destination string) error { + input, err := os.Open(source) + if err != nil { + return err + } + defer input.Close() + output, err := os.Create(destination) + if err != nil { + return err + } + decoder := base64.NewDecoder(base64.StdEncoding, input) + _, copyErr := io.Copy(output, decoder) + closeErr := output.Close() + if copyErr != nil { + return copyErr + } + return closeErr +} + +func restoreZip(archive, destination string) error { + reader, err := zip.OpenReader(archive) + if err != nil { + return errors.New("die Datei ist kein gültiges ZIP-Archiv") + } + defer reader.Close() + if err := os.MkdirAll(destination, 0755); err != nil { + return err + } + for _, file := range reader.File { + target := filepath.Join(destination, filepath.FromSlash(file.Name)) + resolved, err := filepath.Abs(target) + if err != nil { + return err + } + root, _ := filepath.Abs(destination) + if resolved != root && !strings.HasPrefix(resolved, root+string(os.PathSeparator)) { + return fmt.Errorf("unsicherer ZIP-Pfad erkannt: %s", file.Name) + } + if file.Name == "gitpack.json" { + continue + } + if err := os.MkdirAll(filepath.Dir(resolved), 0755); err != nil { + return err + } + input, err := file.Open() + if err != nil { + return err + } + output, err := os.Create(resolved) + if err != nil { + input.Close() + return err + } + _, copyErr := io.Copy(output, input) + input.Close() + output.Close() + if copyErr != nil { + return copyErr + } + } + return nil +} + +func opensslAvailable() bool { + _, err := exec.LookPath("openssl") + return err == nil +} + +func readPassword(message string) (string, error) { + fmt.Print(message) + reader := bufio.NewReader(os.Stdin) + password, err := reader.ReadString('\n') + return strings.TrimSpace(password), err +} + +func encryptFile(source, destination, password string) error { + return runOpenSSL([]string{"enc", "-aes-256-cbc", "-pbkdf2", "-iter", "200000", "-salt", "-in", source, "-out", destination}, password) +} + +func decryptFile(source, destination, password string) error { + return runOpenSSL([]string{"enc", "-d", "-aes-256-cbc", "-pbkdf2", "-iter", "200000", "-in", source, "-out", destination}, password) +} + +func runOpenSSL(arguments []string, password string) error { + command := exec.Command("openssl", arguments...) + command.Stdin = strings.NewReader(password + "\n") + var stderr bytes.Buffer + command.Stderr = &stderr + if err := command.Run(); err != nil { + return fmt.Errorf("OpenSSL fehlgeschlagen: %s", strings.TrimSpace(stderr.String())) + } + return nil +} diff --git a/internal/bt/scriptcompiler/compiler.go b/internal/bt/scriptcompiler/compiler.go new file mode 100644 index 00000000..abaceb32 --- /dev/null +++ b/internal/bt/scriptcompiler/compiler.go @@ -0,0 +1,61 @@ +package scriptcompiler + +import ( + "os" + + "github.com/shadowdara/finder/internal/bt/config" +) + +func CompileScripts(cfg config.Config) { + path := ".samengine/bin" + + // Ordner komplett löschen (falls vorhanden) + err := os.RemoveAll(path) + if err != nil { + panic(err) + } + + // Ordner neu erstellen + err = os.MkdirAll(path, 0755) + if err != nil { + panic(err) + } + + for name, cmd := range cfg.ProjectScripts { + // Bash + err := os.WriteFile(".samengine/bin/"+name, []byte(compile_bash(cmd)), 0644) + if err != nil { + panic(err) + } + + // CMD + err = os.WriteFile(".samengine/bin/"+name+".bat", []byte(compile_cmd(cmd)), 0644) + if err != nil { + panic(err) + } + + // Powershell + err = os.WriteFile(".samengine/bin/"+name+".ps1", []byte(compile_powershell(cmd)), 0644) + if err != nil { + panic(err) + } + } +} + +func compile_bash(command string) string { + s := "#!/bin/bash\n\n" + + command + " \"$@\"" + "\n" + return s +} + +func compile_cmd(command string) string { + s := "@echo off\n\n" + + command + " %*" + "\n" + return s +} + +func compile_powershell(command string) string { + s := "#!/usr/bin/env pwsh\n\n" + + "& " + command + " @args" + "\n" + return s +} diff --git a/internal/bt/scriptcompiler/path.go b/internal/bt/scriptcompiler/path.go new file mode 100644 index 00000000..25fb0c58 --- /dev/null +++ b/internal/bt/scriptcompiler/path.go @@ -0,0 +1,17 @@ +package scriptcompiler + +import ( + "fmt" + + "github.com/shadowdara/finder/pub/goansi" +) + +func Addpath() { + fmt.Println(goansi.Green("Add the BIN Path to your Shell\n")) + fmt.Println(goansi.Red("# Bash")) + fmt.Println("export PATH=\"$PWD/.samengine/bin:$PATH\n") + fmt.Println(goansi.Red("# Powershell")) + fmt.Println("$env:PATH = \"$PWD\\.samengine\\bin;\" + $env:PATH\n") + fmt.Println(goansi.Red("# CMD")) + fmt.Println("set PATH=%CD%\\.samengine\\bin;%PATH%\n") +} diff --git a/internal/cli/commands.go b/internal/cli/commands.go index d843592e..b4538b70 100644 --- a/internal/cli/commands.go +++ b/internal/cli/commands.go @@ -32,7 +32,7 @@ func HandleCommand(args []string) { // NEW root := argparser.NewCommand("finder", - "a simple go program to find your files via file structures", false) + "a simple go program to find your files via file structures", "Check out github for more infos or the finder website:\nhttps://github.com/shadowdara/finder\nhttps://shadowdara.github.io/finder", false) // Add option for JSON Output root.GlobalBool("json", false, "Enable JSON Output", "j") @@ -51,12 +51,12 @@ func HandleCommand(args []string) { // Add Version Command versionCmd := argparser.NewCommand( - "--version", "to get the Version of the Program", false, "-v", "v", "version") + "--version", "to get the Version of the Program", "", false, "-v", "v", "version") // Temaplte Command templateCmd := argparser.NewCommand("template", "to search for a template - for the case that the name for a template is overwritten by another argument name", - false, "tpl") + "", false, "tpl") // Create Cache templateCmd.Bool("create-cache", false, "Create the Cache", false, "cc") @@ -69,26 +69,26 @@ func HandleCommand(args []string) { // Check Command checkCmd := argparser.NewCommand("check", - "to check all available Templates if their syntax is correct", false) + "to check all available Templates if their syntax is correct", "", false) // list, ls Command listCmd := argparser.NewCommand("list", - "list all available templates", false, "ls") + "list all available templates", "", false, "ls") // tags, tag Command tagsCmd := argparser.NewCommand("tags", - "show all tags in the console", false, "tag") + "show all tags in the console", "", false, "tag") // Tag Search tagSearchCmd := argparser.NewCommand("-t", - "search for tags with the next argument", false) + "search for tags with the next argument", "", false) // BinarySearch binarySearchCmd := argparser.NewCommand( - "-b", "search for executables in path", false) + "-b", "search for executables in path", "", false) // Config Path - configpathCmd := argparser.NewCommand("cp", "Get the path to the global config", false) + configpathCmd := argparser.NewCommand("cp", "Get the path to the global config", "", false) root.AddSubcommand(versionCmd) root.AddSubcommand(templateCmd) diff --git a/internal/finderversion/version.go b/internal/finderversion/version.go index 6729e8c2..5bde75d4 100644 --- a/internal/finderversion/version.go +++ b/internal/finderversion/version.go @@ -1,5 +1,5 @@ package finderversion // Version for the Program -const Version = "0.3.16" +const Version = "0.3.17" const BuildTime = "September 2026" diff --git a/internal/mcapp/args.go b/internal/mcapp/args.go new file mode 100644 index 00000000..afaf3c26 --- /dev/null +++ b/internal/mcapp/args.go @@ -0,0 +1,100 @@ +package mcapp + +// import ( +// "fmt" +// "log" +// ) + +// // ParseArgs interpretiert Befehle. +// // Rückgabewert: true = Programm beenden +// func ParseArgs(args []string, serverRunning *bool) bool { +// if len(args) == 0 { +// return false +// } + +// cmd := args[0] + +// switch cmd { +// case "exit", "quit", "0": +// Stop() +// log.Println("Programm existed.") +// return true + +// case "status": +// fmt.Println("=================================================") +// fmt.Println("Status Response") +// if *serverRunning { +// fmt.Println("HTTP Server is running") +// } else { +// fmt.Println("HTTP Server is off") +// } +// fmt.Println("=================================================") + +// case "clean": +// fmt.Println("Should delete caches\nimplemented soon") + +// case "server", "1": +// if *serverRunning { +// log.Println("HTTP Server läuft bereits.") +// } else { +// go Server() +// *serverRunning = true +// log.Println("HTTP Server starting.") +// } + +// case "serverstop": +// if *serverRunning { +// Stop() +// *serverRunning = false +// log.Println("HTTP Server gestoppt.") +// } else { +// log.Println("HTTP Server ist nicht aktiv.") +// } + +// case "open", "2": +// if !*serverRunning { +// log.Println("HTTP Server is not running - Starting") +// go Server() +// *serverRunning = true +// } +// log.Println("Opening Browser on http://127.0.0.1:4413") +// go OpenBrowser("http://127.0.0.1:4413") + +// case "help": +// fmt.Println("Verfügbare Befehle:") +// fmt.Println(" status - zeigt den aktuellen Status") +// fmt.Println(" server (1) - startet den HTTP Server") +// fmt.Println(" serverstop - stoppt den HTTP Server") +// fmt.Println(" open (2) - öffnet die UI im Browser") +// fmt.Println(" exit, quit - beendet das Programm") +// fmt.Println( +// ` worlds - searches for all MC worlds on your computer and +// and caches then -> only in default paths +// worlds-f - searches for all MC worlds on your computer and +// worlds-full and caches then -> in all paths +// clean - to delete all the cache files`) + +// case "worlds": +// go func() { +// log.Println("Searching for Worlds in default paths...") +// var worlds = SearchWorlds() +// log.Println("Worlds Found: ", worlds) +// SaveWorlds(worlds) +// log.Println("Finished Searching for Worlds") +// }() + +// case "worlds-f", "worlds-full": +// go func() { +// log.Println("Searching for Worlds everywhere...") +// var worlds = SearchWorlds(true) +// log.Println("Worlds Found: ", worlds) +// SaveWorlds(worlds) +// log.Println("Finished Searching for Worlds") +// }() + +// default: +// log.Printf("Unbekanntes Kommando: %s\n", cmd) +// } + +// return false +// } diff --git a/internal/mcapp/worlds.go b/internal/mcapp/worlds.go new file mode 100644 index 00000000..06a4c5a0 --- /dev/null +++ b/internal/mcapp/worlds.go @@ -0,0 +1,169 @@ +package mcapp + +import ( + "crypto/sha1" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/shadowdara/finder/internal/templates" + "github.com/shadowdara/finder/pub/fsd" +) + +type World struct { + Path string `json:"path"` + IconPath string `json:"icon"` + Size int64 `json:"size,omitempty"` + LastModified string `json:"last_modified,omitempty"` +} + +func normalizeWorldIconPath(p string) string { + normalized := filepath.ToSlash(p) + normalized = strings.ReplaceAll(normalized, "\\", "/") + for strings.Contains(normalized, "//") { + normalized = strings.ReplaceAll(normalized, "//", "/") + } + return normalized +} + +func makeWorld(dir string) World { + // Basisverzeichnis der Welt + + // Icon-Pfad in der Welt + icon := filepath.Join(dir, "icon.png") + + // Zielordner im Webcache + webcacheDir, err := GetCachePath() + if err != nil { + fmt.Println("Fehler beim Abrufen des Webcache-Pfads:", err) + return World{} + } + os.MkdirAll(webcacheDir, os.ModePerm) + + iconsDir := filepath.Join(webcacheDir, "icons") + + if err := os.MkdirAll(iconsDir, 0o755); err != nil { + fmt.Println("Fehler beim Erstellen des Icon-Verzeichnisses:", err) + return World{} + } + + // Eindeutiger Dateiname: Ordnername + Hash vom Pfad + base := filepath.Base(dir) // Ordnername + safeBase := strings.ReplaceAll(base, " ", "_") + + h := sha1.Sum([]byte(dir)) // Hash vom kompletten Verzeichnis-Pfad + hashPart := fmt.Sprintf("%x", h[:6]) // kurze Hash-Version (12 Hex-Zeichen) + + fileName := fmt.Sprintf("%s_%s.png", safeBase, hashPart) + iconTarget := filepath.Join(iconsDir, fileName) + + // Icon kopieren, wenn es existiert + if _, err := os.Stat(icon); err != nil { + fmt.Printf("Icon nicht gefunden: %s (%v)\n", icon, err) + } else { + fmt.Printf("Icon gefunden: %s\n", icon) + + if _, err := os.Stat(iconTarget); os.IsNotExist(err) { + fmt.Printf("Kopiere nach: %s\n", iconTarget) + + if err := fsd.CopyFile(icon, iconTarget); err != nil { + fmt.Printf("Fehler beim Kopieren: %v\n", err) + } + } else if err != nil { + fmt.Printf("Fehler beim Prüfen des Ziel-Icons: %v\n", err) + } else { + fmt.Printf("Icon existiert bereits: %s\n", iconTarget) + } + } + + // relative Pfad + relPath, err := filepath.Rel(webcacheDir, iconTarget) + if err != nil { + fmt.Println("Fehler beim Berechnen des relativen Pfads:", err) + relPath = filepath.Base(iconTarget) // Fallback + } + relPath = normalizeWorldIconPath(relPath) + + info, err := os.Stat(dir) + if err != nil { + fmt.Println("Error getting file info:", err) + } + + size, err := fsd.DirSize(dir) + if err != nil { + fmt.Println("Fehler:", err) + } + + return World{ + Path: dir, + IconPath: relPath, + Size: size, + LastModified: info.ModTime().Format("2006-01-02 15:04:05"), + } +} + +// Save these to a file +func SaveWorlds(paths []string) { + cachePath, err := GetCachePath() + if err != nil { + fmt.Println("Fehler beim Abrufen des benutzerdefinierten Pfads:", err) + return + } + os.MkdirAll(cachePath, os.ModePerm) + + filePath := filepath.Join(cachePath, "worlds.json") + file, err := os.Create(filePath) + if err != nil { + fmt.Println("Fehler beim Erstellen der Datei:", err) + return + } + defer file.Close() + + // Pfade in Structs umwandeln + var worlds []World + for _, p := range paths { + worlds = append(worlds, makeWorld(p)) + } + + encoder := json.NewEncoder(file) + encoder.SetIndent("", " ") + if err := encoder.Encode(worlds); err != nil { + fmt.Println("Fehler beim Schreiben der JSON:", err) + } +} + +// Welten laden +func LoadWorlds() []World { + dir, err := GetCachePath() + if err != nil { + fmt.Println("Fehler beim Abrufen des benutzerdefinierten Pfads:", err) + return nil + } + filePath := filepath.Join(dir, "worlds.json") + + file, err := os.Open(filePath) + if err != nil { + fmt.Println("Fehler beim Öffnen der Datei:", err) + return nil + } + defer file.Close() + + var worlds []World + decoder := json.NewDecoder(file) + if err := decoder.Decode(&worlds); err != nil { + fmt.Println("Fehler beim Einlesen der JSON:", err) + return nil + } + + return worlds +} + +func GetCachePath() (string, error) { + path, err := templates.GetCustomPath() + if err != nil { + return "", err + } + return filepath.Join(path, "webcache"), nil +} diff --git a/internal/mcapp/worlds_test.go b/internal/mcapp/worlds_test.go new file mode 100644 index 00000000..cec7ae8a --- /dev/null +++ b/internal/mcapp/worlds_test.go @@ -0,0 +1,11 @@ +package mcapp + +import "testing" + +func TestNormalizeWorldIconPath(t *testing.T) { + p := `icons\\my_world_abc123.png` + got := normalizeWorldIconPath(p) + if got != "icons/my_world_abc123.png" { + t.Fatalf("normalizeWorldIconPath() = %q, want %q", got, "icons/my_world_abc123.png") + } +} diff --git a/internal/search/helper.go b/internal/search/helper.go index b0ba0ad3..9fe0259b 100644 --- a/internal/search/helper.go +++ b/internal/search/helper.go @@ -10,6 +10,7 @@ import ( "os/exec" "path" "path/filepath" + "regexp" "runtime" "strings" @@ -18,15 +19,14 @@ import ( // matchFolderTemplate checks whether the directory at dirPath matches the // provided template. Matching includes name pattern, required files and -// required subfolders. Wildcards in template fields are supported via -// path.Match. +// required subfolders. Template names support both Go glob patterns and full +// regular expressions for compatibility with existing and new templates. func matchFolderTemplate(dirPath string, template structure.Folder) bool { // Check folder name if provided dirName := filepath.Base(dirPath) if template.Name != "" { - ok, err := path.Match(template.Name, dirName) - if err != nil || !ok { + if !matchesPattern(template.Name, dirName) { return false } } @@ -111,11 +111,26 @@ func matchFolderTemplate(dirPath string, template structure.Folder) bool { return true } +func matchesPattern(pattern string, name string) bool { + if pattern == "" { + return false + } + if pattern == name { + return true + } + + if ok, err := regexp.MatchString(pattern, name); err == nil { + return ok + } + + ok, err := path.Match(pattern, name) + return err == nil && ok +} + func matchingFileNames(files map[string]bool, pattern string) []string { matching := make([]string, 0) for name := range files { - ok, err := path.Match(pattern, name) - if err == nil && ok { + if matchesPattern(pattern, name) { matching = append(matching, name) } } @@ -151,16 +166,15 @@ func checkChecksums(filePath string, checksums structure.Checksum) bool { } // matchAny returns true if at least one entry in the provided map matches -// the pattern. Exact match is checked first, then path.Match is used for -// wildcard matching. +// the pattern. Exact matches are checked first, then regex matching is used, +// and glob matching remains as a fallback for existing templates. func matchAny(entries map[string]bool, pattern string) bool { if entries[pattern] { return true } for name := range entries { - ok, _ := path.Match(pattern, name) - if ok { + if matchesPattern(pattern, name) { return true } } diff --git a/internal/search/search_test.go b/internal/search/search_test.go index 02a1af50..3f8eac99 100644 --- a/internal/search/search_test.go +++ b/internal/search/search_test.go @@ -259,6 +259,48 @@ func TestMatchAny_WildcardMatch(t *testing.T) { } } +func TestMatchAny_RegexMatch(t *testing.T) { + entries := map[string]bool{ + "alpha.txt": true, + "beta.md": true, + "gamma.js": true, + } + + if !matchAny(entries, `^alpha\..+$`) { + t.Errorf("expected regex match for '^alpha\\..+$'") + } +} + +func TestMatchFolderTemplate_RegexMatch(t *testing.T) { + tempDir := t.TempDir() + testDir := filepath.Join(tempDir, "project-123") + if err := os.Mkdir(testDir, 0755); err != nil { + t.Fatalf("failed to create test dir: %v", err) + } + + if err := os.WriteFile(filepath.Join(testDir, "main.py"), []byte("print('hi')\n"), 0644); err != nil { + t.Fatalf("failed to create test file: %v", err) + } + + if err := os.Mkdir(filepath.Join(testDir, "src"), 0755); err != nil { + t.Fatalf("failed to create src dir: %v", err) + } + + template := structure.Folder{ + Name: `^project-[0-9]+$`, + Files: structure.Files{ + {Name: `^main\.py$`, Existence: "required"}, + }, + Folders: []structure.Folder{ + {Name: `^src$`}, + }, + } + + if !matchFolderTemplate(testDir, template) { + t.Errorf("expected regex-based file and folder names to match") + } +} + func TestMatchAny_NoMatch(t *testing.T) { entries := map[string]bool{ "file.txt": true, diff --git a/internal/templates/lit.json5 b/internal/templates/lit.json5 index 92412d56..4150ed12 100644 --- a/internal/templates/lit.json5 +++ b/internal/templates/lit.json5 @@ -1 +1 @@ -{"description":"Lit web components framework","files":["package.json","*.ts"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Lit web components framework","files":["package.json","*.ts"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/llama.json5 b/internal/templates/llama.json5 index 0f79e79e..9a2f6213 100644 --- a/internal/templates/llama.json5 +++ b/internal/templates/llama.json5 @@ -1 +1 @@ -{"description":"Meta Llama 2 or Llama language model project","files":["llama.config.json","requirements.txt","params.json"],"folders":[{"files":["*.pt","*.pth"],"folders":[],"name":"checkpoints"},{"files":["*.py"],"folders":[],"name":"scripts"}],"name":"*"} \ No newline at end of file +{"description":"Meta Llama 2 or Llama language model project","files":["llama.config.json","requirements.txt","params.json"],"folders":[{"files":["*.pt","*.pth"],"folders":[],"name":"checkpoints"},{"files":["*.py"],"folders":[],"name":"scripts"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/llvm.json5 b/internal/templates/llvm.json5 index 2f56911b..55dafb08 100644 --- a/internal/templates/llvm.json5 +++ b/internal/templates/llvm.json5 @@ -1 +1 @@ -{"description":"LLVM compiler infrastructure and toolchain","files":["CMakeLists.txt","llvm.config","README.md"],"folders":[{"files":["*.cpp","*.h"],"folders":[],"name":"lib"},{"files":["*.cpp"],"folders":[],"name":"tools"}],"name":"*"} \ No newline at end of file +{"description":"LLVM compiler infrastructure and toolchain","files":["CMakeLists.txt","llvm.config","README.md"],"folders":[{"files":["*.cpp","*.h"],"folders":[],"name":"lib"},{"files":["*.cpp"],"folders":[],"name":"tools"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/loom.json5 b/internal/templates/loom.json5 index 943848a7..0c7d871c 100644 --- a/internal/templates/loom.json5 +++ b/internal/templates/loom.json5 @@ -1 +1 @@ -{"description":"Loom WebAssembly runtime","files":["Cargo.toml"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Loom WebAssembly runtime","files":["Cargo.toml"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/lua.json5 b/internal/templates/lua.json5 index 09d25142..839caaea 100644 --- a/internal/templates/lua.json5 +++ b/internal/templates/lua.json5 @@ -1 +1 @@ -{"description":"Lua programming language project","files":["*.lua"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Lua programming language project","files":["*.lua"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/makecode.json5 b/internal/templates/makecode.json5 index e8cb17a5..5a882b95 100644 --- a/internal/templates/makecode.json5 +++ b/internal/templates/makecode.json5 @@ -1 +1 @@ -{"description":"Microsoft MakeCode block programming","files":["*.json"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"Microsoft MakeCode block programming","files":["*.json"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mapbox.json5 b/internal/templates/mapbox.json5 index 5303f7b3..f9d457f6 100644 --- a/internal/templates/mapbox.json5 +++ b/internal/templates/mapbox.json5 @@ -1 +1 @@ -{"description":"Mapbox mapping platform","files":["package.json",".mapboxrc"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Mapbox mapping platform","files":["package.json",".mapboxrc"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/markdown-docs.json5 b/internal/templates/markdown-docs.json5 index e980bb8a..b487f6fe 100644 --- a/internal/templates/markdown-docs.json5 +++ b/internal/templates/markdown-docs.json5 @@ -1 +1 @@ -{"description":"Markdown documentation website","files":["README.md","*.md"],"folders":[{"files":[],"folders":[],"name":"content"}],"name":"*"} \ No newline at end of file +{"description":"Markdown documentation website","files":["README.md","*.md"],"folders":[{"files":[],"folders":[],"name":"content"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/marko.json5 b/internal/templates/marko.json5 index dbe89295..a7cd5c59 100644 --- a/internal/templates/marko.json5 +++ b/internal/templates/marko.json5 @@ -1 +1 @@ -{"description":"Marko templating engine project","files":["package.json","*.marko"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Marko templating engine project","files":["package.json","*.marko"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/matlab.json5 b/internal/templates/matlab.json5 index 5c7e6a72..23c5bcd2 100644 --- a/internal/templates/matlab.json5 +++ b/internal/templates/matlab.json5 @@ -1 +1 @@ -{"description":"MATLAB/Octave scientific computing project","files":["*.m","*.mlx"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"MATLAB/Octave scientific computing project","files":["*.m","*.mlx"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/meson.json5 b/internal/templates/meson.json5 index 575a02df..6528b414 100644 --- a/internal/templates/meson.json5 +++ b/internal/templates/meson.json5 @@ -1 +1 @@ -{"description":"Meson build system project","files":["meson.build"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Meson build system project","files":["meson.build"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/metabase.json5 b/internal/templates/metabase.json5 index 6d987f79..e2df2c5a 100644 --- a/internal/templates/metabase.json5 +++ b/internal/templates/metabase.json5 @@ -1 +1 @@ -{"description":"Metabase analytics platform","files":["docker-compose.yml"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"Metabase analytics platform","files":["docker-compose.yml"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/minecraftworld.json5 b/internal/templates/minecraftworld.json5 index 63be5f3e..a21bce0e 100644 --- a/internal/templates/minecraftworld.json5 +++ b/internal/templates/minecraftworld.json5 @@ -1 +1 @@ -{"description":"a Struct to search for Minecraft Worlds","files":["level.dat"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"a Struct to search for Minecraft Worlds","files":["level.dat"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mistral.json5 b/internal/templates/mistral.json5 index de81491c..e74a98ba 100644 --- a/internal/templates/mistral.json5 +++ b/internal/templates/mistral.json5 @@ -1 +1 @@ -{"description":"Mistral AI language model API","files":["mistral.config.yaml","requirements.txt",".env.mistral"],"folders":[{"files":["*.py","*.ts"],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Mistral AI language model API","files":["mistral.config.yaml","requirements.txt",".env.mistral"],"folders":[{"files":["*.py","*.ts"],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mlflow.json5 b/internal/templates/mlflow.json5 index 2fe5efa3..60896787 100644 --- a/internal/templates/mlflow.json5 +++ b/internal/templates/mlflow.json5 @@ -1 +1 @@ -{"description":"MLflow open-source machine learning lifecycle platform","files":["mlflow.yaml","requirements.txt",".mlflow"],"folders":[{"files":["*.pkl","*.pt"],"folders":[],"name":"models"},{"files":["*.json"],"folders":[],"name":"experiments"}],"name":"*"} \ No newline at end of file +{"description":"MLflow open-source machine learning lifecycle platform","files":["mlflow.yaml","requirements.txt",".mlflow"],"folders":[{"files":["*.pkl","*.pt"],"folders":[],"name":"models"},{"files":["*.json"],"folders":[],"name":"experiments"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mocha.json5 b/internal/templates/mocha.json5 index 4a04c35a..c483a07e 100644 --- a/internal/templates/mocha.json5 +++ b/internal/templates/mocha.json5 @@ -1 +1 @@ -{"description":"Mocha JavaScript test framework","files":[".mocharc.json","package.json"],"folders":[{"files":[],"folders":[],"name":"test"}],"name":"*"} \ No newline at end of file +{"description":"Mocha JavaScript test framework","files":[".mocharc.json","package.json"],"folders":[{"files":[],"folders":[],"name":"test"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/modal.json5 b/internal/templates/modal.json5 index 2a0d085f..22bac466 100644 --- a/internal/templates/modal.json5 +++ b/internal/templates/modal.json5 @@ -1 +1 @@ -{"description":"Modal serverless cloud computing platform","files":["modal.config.yaml","requirements.txt",".modal.toml"],"folders":[{"files":["*.py"],"folders":[],"name":"functions"}],"name":"*"} \ No newline at end of file +{"description":"Modal serverless cloud computing platform","files":["modal.config.yaml","requirements.txt",".modal.toml"],"folders":[{"files":["*.py"],"folders":[],"name":"functions"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mongodb.json5 b/internal/templates/mongodb.json5 index e493f15e..5be4b822 100644 --- a/internal/templates/mongodb.json5 +++ b/internal/templates/mongodb.json5 @@ -1 +1 @@ -{"description":"MongoDB NoSQL database project","files":["docker-compose.yml"],"folders":[{"files":[],"folders":[],"name":"schemas"}],"name":"*"} \ No newline at end of file +{"description":"MongoDB NoSQL database project","files":["docker-compose.yml"],"folders":[{"files":[],"folders":[],"name":"schemas"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/monogame.json5 b/internal/templates/monogame.json5 index 31129211..e99b4d27 100644 --- a/internal/templates/monogame.json5 +++ b/internal/templates/monogame.json5 @@ -1 +1 @@ -{"description":"MonoGame C# game framework","files":["*.csproj"],"folders":[{"files":[],"folders":[],"name":"Content"}],"name":"*"} \ No newline at end of file +{"description":"MonoGame C# game framework","files":["*.csproj"],"folders":[{"files":[],"folders":[],"name":"Content"}],"min_version":"0.3.16","name":"*","tags":["game-engine","C#"]} \ No newline at end of file diff --git a/internal/templates/monorepo.json5 b/internal/templates/monorepo.json5 index cdd7d194..b5f761fe 100644 --- a/internal/templates/monorepo.json5 +++ b/internal/templates/monorepo.json5 @@ -1 +1 @@ -{"description":"Monorepo project (multiple packages)","files":["package.json","yarn.lock"],"folders":[{"files":[],"folders":[],"name":"packages"}],"name":"*"} \ No newline at end of file +{"description":"Monorepo project (multiple packages)","files":["package.json","yarn.lock"],"folders":[{"files":[],"folders":[],"name":"packages"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/motioncanvas.json5 b/internal/templates/motioncanvas.json5 index b6d3e86a..e27cf567 100644 --- a/internal/templates/motioncanvas.json5 +++ b/internal/templates/motioncanvas.json5 @@ -1 +1 @@ -{"description":"Motion Canvas animation framework","files":["package.json","*.tsx"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Motion Canvas animation framework","files":["package.json","*.tsx"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/move.json5 b/internal/templates/move.json5 index 480d84f3..bd1bf7e5 100644 --- a/internal/templates/move.json5 +++ b/internal/templates/move.json5 @@ -1 +1 @@ -{"description":"Move programming language blockchain project (Aptos, Sui)","files":["Move.toml","Move.lock"],"folders":[{"files":["*.move"],"folders":[],"name":"sources"}],"name":"*"} \ No newline at end of file +{"description":"Move programming language blockchain project (Aptos, Sui)","files":["Move.toml","Move.lock"],"folders":[{"files":["*.move"],"folders":[],"name":"sources"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/mysql.json5 b/internal/templates/mysql.json5 index ddfe663d..8fda4656 100644 --- a/internal/templates/mysql.json5 +++ b/internal/templates/mysql.json5 @@ -1 +1 @@ -{"description":"MySQL database project","files":["docker-compose.yml","*.sql"],"folders":[{"files":[],"folders":[],"name":"migrations"}],"name":"*","tags":["sql"]} \ No newline at end of file +{"description":"MySQL database project","files":["docker-compose.yml","*.sql"],"folders":[{"files":[],"folders":[],"name":"migrations"}],"min_version":"0.3.16","name":"*","tags":["sql"]} \ No newline at end of file diff --git a/internal/templates/nft.json5 b/internal/templates/nft.json5 index 27682572..4397ebfb 100644 --- a/internal/templates/nft.json5 +++ b/internal/templates/nft.json5 @@ -1 +1 @@ -{"description":"NFT smart contract collection","files":["*.sol","hardhat.config.js"],"folders":[{"files":[],"folders":[],"name":"contracts"}],"name":"*"} \ No newline at end of file +{"description":"NFT smart contract collection","files":["*.sol","hardhat.config.js"],"folders":[{"files":[],"folders":[],"name":"contracts"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/npm.json5 b/internal/templates/npm.json5 index 4941961c..1a2bb665 100644 --- a/internal/templates/npm.json5 +++ b/internal/templates/npm.json5 @@ -1 +1 @@ -{"files":["package.json"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file +{"description":"NPM package template","files":["package.json"],"folders":[],"min_version":"0.3.16","name":"*","tags":["npm","node","package"]} \ No newline at end of file diff --git a/internal/templates/otel.json5 b/internal/templates/otel.json5 index b90f05c2..9bcf3e6f 100644 --- a/internal/templates/otel.json5 +++ b/internal/templates/otel.json5 @@ -1 +1 @@ -{"description":"OpenTelemetry observability framework","files":["otel-collector-config.yml"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"OpenTelemetry observability framework","files":["otel-collector-config.yml"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/pagerduty.json5 b/internal/templates/pagerduty.json5 index 5dc29b28..6a66051d 100644 --- a/internal/templates/pagerduty.json5 +++ b/internal/templates/pagerduty.json5 @@ -1 +1 @@ -{"description":"PagerDuty incident management","files":["pagerduty.yml"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"PagerDuty incident management","files":["pagerduty.yml"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/panda3d.json5 b/internal/templates/panda3d.json5 index 770509b2..6e07b76f 100644 --- a/internal/templates/panda3d.json5 +++ b/internal/templates/panda3d.json5 @@ -1 +1 @@ -{"description":"Panda3D game engine","files":["main.py"],"folders":[{"files":[],"folders":[],"name":"models"}],"name":"*"} \ No newline at end of file +{"description":"Panda3D game engine","files":["main.py"],"folders":[{"files":[],"folders":[],"name":"models"}],"min_version":"0.3.16","name":"*","tags":["game-engine","python"]} \ No newline at end of file diff --git a/internal/templates/pandas.json5 b/internal/templates/pandas.json5 index df526c3b..49cdab98 100644 --- a/internal/templates/pandas.json5 +++ b/internal/templates/pandas.json5 @@ -1 +1 @@ -{"description":"Pandas data analysis library","files":["requirements.txt","*.py"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"Pandas data analysis library","files":["requirements.txt","*.py"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/panel.json5 b/internal/templates/panel.json5 index 40cc4375..44a2558c 100644 --- a/internal/templates/panel.json5 +++ b/internal/templates/panel.json5 @@ -1 +1 @@ -{"description":"Panel framework for building web applications with Python","files":["panel.config.yaml","requirements.txt","app.py"],"folders":[{"files":["*.py"],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Panel framework for building web applications with Python","files":["panel.config.yaml","requirements.txt","app.py"],"folders":[{"files":["*.py"],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/parcel.json5 b/internal/templates/parcel.json5 index 69a2cc5b..ab6c80a0 100644 --- a/internal/templates/parcel.json5 +++ b/internal/templates/parcel.json5 @@ -1 +1 @@ -{"description":"Parcel zero-config bundler","files":["package.json",".parcelrc"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Parcel zero-config bundler","files":["package.json",".parcelrc"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/payload.json5 b/internal/templates/payload.json5 index b8ce664b..1d744c27 100644 --- a/internal/templates/payload.json5 +++ b/internal/templates/payload.json5 @@ -1 +1 @@ -{"description":"Payload headless CMS","files":["tsconfig.json","package.json"],"folders":[{"files":[],"folders":[],"name":"src"}],"name":"*"} \ No newline at end of file +{"description":"Payload headless CMS","files":["tsconfig.json","package.json"],"folders":[{"files":[],"folders":[],"name":"src"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/perl.json5 b/internal/templates/perl.json5 index 16284c58..25672824 100644 --- a/internal/templates/perl.json5 +++ b/internal/templates/perl.json5 @@ -1 +1 @@ -{"description":"Perl programming language project","files":["Makefile.PL","*.pl"],"folders":[{"files":[],"folders":[],"name":"lib"}],"name":"*"} \ No newline at end of file +{"description":"Perl programming language project","files":["Makefile.PL","*.pl"],"folders":[{"files":[],"folders":[],"name":"lib"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/perplexity.json5 b/internal/templates/perplexity.json5 index 88135b9d..cd4fbe48 100644 --- a/internal/templates/perplexity.json5 +++ b/internal/templates/perplexity.json5 @@ -1 +1 @@ -{"description":"Perplexity AI API integration","files":["perplexity.config.yaml","requirements.txt"],"folders":[{"files":["*.json"],"folders":[],"name":"queries"}],"name":"*"} \ No newline at end of file +{"description":"Perplexity AI API integration","files":["perplexity.config.yaml","requirements.txt"],"folders":[{"files":["*.json"],"folders":[],"name":"queries"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/playwright.json5 b/internal/templates/playwright.json5 index 880e0349..af904477 100644 --- a/internal/templates/playwright.json5 +++ b/internal/templates/playwright.json5 @@ -1 +1 @@ -{"description":"Playwright end-to-end testing","files":["playwright.config.ts","package.json"],"folders":[{"files":[],"folders":[],"name":"tests"}],"name":"*"} \ No newline at end of file +{"description":"Playwright end-to-end testing","files":["playwright.config.ts","package.json"],"folders":[{"files":[],"folders":[],"name":"tests"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/pnpm-workspace.json5 b/internal/templates/pnpm-workspace.json5 index e5132402..39ac7ae5 100644 --- a/internal/templates/pnpm-workspace.json5 +++ b/internal/templates/pnpm-workspace.json5 @@ -1 +1 @@ -{"description":"Pnpm workspace monorepo","files":["pnpm-workspace.yaml","package.json"],"folders":[{"files":[],"folders":[],"name":"packages"}],"name":"*"} \ No newline at end of file +{"description":"Pnpm workspace monorepo","files":["pnpm-workspace.yaml","package.json"],"folders":[{"files":[],"folders":[],"name":"packages"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/pocketbase.json5 b/internal/templates/pocketbase.json5 index 5f74b466..cef39ffa 100644 --- a/internal/templates/pocketbase.json5 +++ b/internal/templates/pocketbase.json5 @@ -1 +1 @@ -{"description":"Pocketbase backend as a service","files":["pb_schema.json"],"folders":[{"files":[],"folders":[],"name":"pb_migrations"}],"name":"*"} \ No newline at end of file +{"description":"Pocketbase backend as a service","files":["pb_schema.json"],"folders":[{"files":[],"folders":[],"name":"pb_migrations"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/podman.json5 b/internal/templates/podman.json5 index 74a4e773..ad08acdc 100644 --- a/internal/templates/podman.json5 +++ b/internal/templates/podman.json5 @@ -1 +1 @@ -{"description":"Podman container management","files":["Containerfile","podman-compose.yml"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"Podman container management","files":["Containerfile","podman-compose.yml"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/poetry.json5 b/internal/templates/poetry.json5 index 060ff513..7758f971 100644 --- a/internal/templates/poetry.json5 +++ b/internal/templates/poetry.json5 @@ -1 +1 @@ -{"description":"Poetry Python dependency manager","files":["pyproject.toml","poetry.lock"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"Poetry Python dependency manager","files":["pyproject.toml","poetry.lock"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/postgres.json5 b/internal/templates/postgres.json5 index b76b0a90..a6ccadc7 100644 --- a/internal/templates/postgres.json5 +++ b/internal/templates/postgres.json5 @@ -1 +1 @@ -{"description":"PostgreSQL database project","files":["*.sql","docker-compose.yml"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"PostgreSQL database project","files":["*.sql","docker-compose.yml"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/postgrest.json5 b/internal/templates/postgrest.json5 index 3f90c736..ffa3aa32 100644 --- a/internal/templates/postgrest.json5 +++ b/internal/templates/postgrest.json5 @@ -1 +1 @@ -{"description":"PostgREST automatic API","files":["postgrest.conf"],"folders":[],"name":"*"} \ No newline at end of file +{"description":"PostgREST automatic API","files":["postgrest.conf"],"folders":[],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/internal/templates/prefect.json5 b/internal/templates/prefect.json5 index 4dc3c4f7..16b1426d 100644 --- a/internal/templates/prefect.json5 +++ b/internal/templates/prefect.json5 @@ -1 +1 @@ -{"description":"Prefect modern data workflow automation","files":["prefect.yaml","requirements.txt",".prefect"],"folders":[{"files":["*.py"],"folders":[],"name":"flows"}],"name":"*"} \ No newline at end of file +{"description":"Prefect modern data workflow automation","files":["prefect.yaml","requirements.txt",".prefect"],"folders":[{"files":["*.py"],"folders":[],"name":"flows"}],"min_version":"0.3.16","name":"*"} \ No newline at end of file diff --git a/pub/argparser/parse.go b/pub/argparser/parse.go index a00d845f..01ab7f10 100644 --- a/pub/argparser/parse.go +++ b/pub/argparser/parse.go @@ -53,28 +53,31 @@ type Command struct { Hidden bool // If true, command is hidden from help output Aliases []string // Alternative names (e.g. "rm" for "remove") Description string // Description shown in help output + Descend string // Additional lines displayed at the end of help output Flags map[string]*Flag // Registered flags Subcommands map[string]*Command // Registered subcommands Parent *Command // Parent command (used to build full path) Args []string // Positional arguments - PassThrough bool // If true, preserve all parsed arguments unchanged + PassThrough bool // If true, preserve all parsed arguments unchanged } // NewCommand creates a new Command. // // Parameters: // -// name → command name -// desc → description for help output -// hidden → whether the command should be hidden -// aliases → optional aliases -func NewCommand(name, desc string, hidden bool, aliases ...string) *Command { +// name → command name +// desc → description for help output +// descend → lines which are displayed at the end of the help output +// hidden → whether the command should be hidden +// aliases → optional aliases +func NewCommand(name, desc string, descend string, hidden bool, aliases ...string) *Command { cmd := &Command{ Name: name, Hidden: hidden, Aliases: aliases, Description: desc, + Descend: descend, Flags: make(map[string]*Flag), Subcommands: make(map[string]*Command), } @@ -505,6 +508,8 @@ func (c *Command) PrintHelp() { fmt.Fprintln(w) } + fmt.Println(c.Descend) + w.Flush() } diff --git a/pub/fsd/folder.go b/pub/fsd/folder.go new file mode 100644 index 00000000..f3ee2c22 --- /dev/null +++ b/pub/fsd/folder.go @@ -0,0 +1,104 @@ +package fsd + +import ( + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "runtime" +) + +func OpenFolder(path string) error { + switch runtime.GOOS { + case "windows": + cmd := exec.Command("cmd", "/c", "start", "", path) + return cmd.Start() + + case "darwin": + return exec.Command("open", path).Start() + + case "linux": + return exec.Command("xdg-open", path).Start() + + default: + return fmt.Errorf("OS %s wird nicht unterstützt", runtime.GOOS) + } +} + +func OpenBrowser(url string) { + var cmd string + var args []string + + switch runtime.GOOS { + case "windows": + cmd = "rundll32" + args = []string{"url.dll,FileProtocolHandler", url} + case "darwin": // macOS + cmd = "open" + args = []string{url} + default: // Linux + cmd = "xdg-open" + args = []string{url} + } + + exec.Command(cmd, args...).Start() +} + +// CopyFile kopiert src → dst +func CopyFile(src, dst string) error { + if _, err := os.Stat(dst); err == nil { + // existiert schon → skip + return nil + } + + // Quelle öffnen + sourceFile, err := os.Open(src) + if err != nil { + return fmt.Errorf("konnte Quelle nicht öffnen: %w", err) + } + defer sourceFile.Close() + + // Ziel anlegen (überschreibt falls existiert) + destFile, err := os.Create(dst) + if err != nil { + return fmt.Errorf("konnte Ziel nicht anlegen: %w", err) + } + defer destFile.Close() + + // Inhalt kopieren + _, err = io.Copy(destFile, sourceFile) + if err != nil { + return fmt.Errorf("fehler beim Kopieren: %w", err) + } + + // sicherstellen, dass alles auf Platte geschrieben wurde + err = destFile.Sync() + if err != nil { + return fmt.Errorf("fehler beim Sync: %w", err) + } + + return nil +} + +func DirSize(path string) (int64, error) { + var size int64 + err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + size += info.Size() + } + return nil + }) + return size, err +} + +func GetBinaryDir() string { + ex, err := os.Executable() // Pfad zum Binary + if err != nil { + panic(err) + } + return filepath.Dir(ex) // nur das Verzeichnis +} diff --git a/run.ps1 b/run.ps1 new file mode 100644 index 00000000..026c18c4 --- /dev/null +++ b/run.ps1 @@ -0,0 +1,50 @@ +# Script start the programm and rebuilds on press r +# written by Shadowdara +# licensed under MIT 2025 +# https://github.com/ShadowDara/dotfiles + +# Pfad zur Server-EXE +$exePath = ".\findergen.exe" + +# Funktion: Server starten +function Start-Server { + Write-Host "`n[INFO] Baue Finderngen Server..." + go build -o $exePath ./cmd/findergen + if ($LASTEXITCODE -ne 0) { + Write-Host "[FEHLER] Build fehlgeschlagen." -ForegroundColor Red + return $null + } + + Write-Host "[INFO] Starte Server..." + $process = Start-Process -FilePath $exePath -PassThru + Write-Host "[INFO] Server läuft mit PID $($process.Id)" + return $process +} + +# Funktion: Server stoppen +function Stop-Server($proc) { + if ($proc -and !$proc.HasExited) { + Write-Host "[INFO] Beende Server mit PID $($proc.Id)..." + $proc.Kill() + $proc.WaitForExit() + } +} + +# Haupt-Loop +$serverProcess = Start-Server +if (-not $serverProcess) { exit } + +while ($true) { + Write-Host "`nDruecke [r] zum Neustarten, [q] zum Beenden:" + $key = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").Character + + if ($key -eq 'r') { + Stop-Server $serverProcess + $serverProcess = Start-Server + if (-not $serverProcess) { break } + } + elseif ($key -eq 'q') { + Stop-Server $serverProcess + break + } +} diff --git a/templates/lit.json5 b/templates/lit.json5 index 592a0383..2f91f169 100644 --- a/templates/lit.json5 +++ b/templates/lit.json5 @@ -1,4 +1,3 @@ -// Struct for a Lit Project { "description": "Lit web components framework", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", "*.ts" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/llama.json5 b/templates/llama.json5 index 03e7a6aa..caf43a1b 100644 --- a/templates/llama.json5 +++ b/templates/llama.json5 @@ -1,4 +1,3 @@ -// Llama 2 or Llama model project { "description": "Meta Llama 2 or Llama language model project", "name": "*", @@ -6,17 +5,23 @@ { "name": "checkpoints", "folders": [], - "files": ["*.pt", "*.pth"] + "files": [ + "*.pt", + "*.pth" + ] }, { "name": "scripts", "folders": [], - "files": ["*.py"] + "files": [ + "*.py" + ] } ], "files": [ "llama.config.json", "requirements.txt", "params.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/llvm.json5 b/templates/llvm.json5 index b2430a87..0d943f03 100644 --- a/templates/llvm.json5 +++ b/templates/llvm.json5 @@ -1,4 +1,3 @@ -// LLVM compiler infrastructure { "description": "LLVM compiler infrastructure and toolchain", "name": "*", @@ -6,17 +5,23 @@ { "name": "lib", "folders": [], - "files": ["*.cpp", "*.h"] + "files": [ + "*.cpp", + "*.h" + ] }, { "name": "tools", "folders": [], - "files": ["*.cpp"] + "files": [ + "*.cpp" + ] } ], "files": [ "CMakeLists.txt", "llvm.config", "README.md" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/loom.json5 b/templates/loom.json5 index a587a744..64809c5c 100644 --- a/templates/loom.json5 +++ b/templates/loom.json5 @@ -1,4 +1,3 @@ -// Struct for a Loom Project { "description": "Loom WebAssembly runtime", "name": "*", @@ -11,5 +10,6 @@ ], "files": [ "Cargo.toml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/lua.json5 b/templates/lua.json5 index 8a7087b7..cf7ed092 100644 --- a/templates/lua.json5 +++ b/templates/lua.json5 @@ -1,4 +1,3 @@ -// Struct for a Lua Project { "description": "Lua programming language project", "name": "*", @@ -11,5 +10,6 @@ ], "files": [ "*.lua" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/makecode.json5 b/templates/makecode.json5 index 4ec6cc21..b20cb912 100644 --- a/templates/makecode.json5 +++ b/templates/makecode.json5 @@ -1,9 +1,9 @@ -// Struct for a MakeCode Project { "description": "Microsoft MakeCode block programming", "name": "*", "folders": [], "files": [ "*.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mapbox.json5 b/templates/mapbox.json5 index da1bfbbf..d7e52790 100644 --- a/templates/mapbox.json5 +++ b/templates/mapbox.json5 @@ -1,4 +1,3 @@ -// Struct for a Mapbox Project { "description": "Mapbox mapping platform", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", ".mapboxrc" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/markdown-docs.json5 b/templates/markdown-docs.json5 index b3623af9..a2b3cce6 100644 --- a/templates/markdown-docs.json5 +++ b/templates/markdown-docs.json5 @@ -1,4 +1,3 @@ -// Struct for a Markdown Documentation Site { "description": "Markdown documentation website", "name": "*", @@ -12,5 +11,6 @@ "files": [ "README.md", "*.md" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/marko.json5 b/templates/marko.json5 index ff774c19..cfd8ef8c 100644 --- a/templates/marko.json5 +++ b/templates/marko.json5 @@ -1,4 +1,3 @@ -// Struct for a Marko Project { "description": "Marko templating engine project", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", "*.marko" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/matlab.json5 b/templates/matlab.json5 index 96cae5c9..8908e5f6 100644 --- a/templates/matlab.json5 +++ b/templates/matlab.json5 @@ -1,4 +1,3 @@ -// Struct for a MATLAB Project { "description": "MATLAB/Octave scientific computing project", "name": "*", @@ -6,5 +5,6 @@ "files": [ "*.m", "*.mlx" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/meson.json5 b/templates/meson.json5 index 25262aea..c86fa14f 100644 --- a/templates/meson.json5 +++ b/templates/meson.json5 @@ -1,4 +1,3 @@ -// Struct for a Meson Build Project { "description": "Meson build system project", "name": "*", @@ -11,5 +10,6 @@ ], "files": [ "meson.build" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/metabase.json5 b/templates/metabase.json5 index 69447d61..2cc5351d 100644 --- a/templates/metabase.json5 +++ b/templates/metabase.json5 @@ -1,9 +1,9 @@ -// Struct for a Metabase Project { "description": "Metabase analytics platform", "name": "*", "folders": [], "files": [ "docker-compose.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/microservices.json5 b/templates/microservices.json5 index 17fc25c2..8fc34c1c 100644 --- a/templates/microservices.json5 +++ b/templates/microservices.json5 @@ -1,4 +1,3 @@ -// Struct for a Microservices Project { "description": "Microservices architecture project", "name": "*", @@ -12,5 +11,6 @@ "files": [ "docker-compose.yml", "package.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/minecraftworld.json5 b/templates/minecraftworld.json5 index 6bc0c65a..5b33467e 100644 --- a/templates/minecraftworld.json5 +++ b/templates/minecraftworld.json5 @@ -1,9 +1,9 @@ -// Folder Struct for Minecraft Worlds { "description": "a Struct to search for Minecraft Worlds", "name": "*", "folders": [], "files": [ "level.dat" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mistral.json5 b/templates/mistral.json5 index 574fabce..6c8c4caa 100644 --- a/templates/mistral.json5 +++ b/templates/mistral.json5 @@ -1,4 +1,3 @@ -// Mistral AI API { "description": "Mistral AI language model API", "name": "*", @@ -6,12 +5,16 @@ { "name": "src", "folders": [], - "files": ["*.py", "*.ts"] + "files": [ + "*.py", + "*.ts" + ] } ], "files": [ "mistral.config.yaml", "requirements.txt", ".env.mistral" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mlflow.json5 b/templates/mlflow.json5 index 620acd48..8f4ff49e 100644 --- a/templates/mlflow.json5 +++ b/templates/mlflow.json5 @@ -1,4 +1,3 @@ -// MLflow machine learning lifecycle { "description": "MLflow open-source machine learning lifecycle platform", "name": "*", @@ -6,17 +5,23 @@ { "name": "models", "folders": [], - "files": ["*.pkl", "*.pt"] + "files": [ + "*.pkl", + "*.pt" + ] }, { "name": "experiments", "folders": [], - "files": ["*.json"] + "files": [ + "*.json" + ] } ], "files": [ "mlflow.yaml", "requirements.txt", ".mlflow" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mocha.json5 b/templates/mocha.json5 index d02922a5..83224ebb 100644 --- a/templates/mocha.json5 +++ b/templates/mocha.json5 @@ -1,4 +1,3 @@ -// Struct for a Mocha Testing Framework { "description": "Mocha JavaScript test framework", "name": "*", @@ -12,5 +11,6 @@ "files": [ ".mocharc.json", "package.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/modal.json5 b/templates/modal.json5 index ff3c9ed6..3c5c5d38 100644 --- a/templates/modal.json5 +++ b/templates/modal.json5 @@ -1,4 +1,3 @@ -// Modal serverless computing platform { "description": "Modal serverless cloud computing platform", "name": "*", @@ -6,12 +5,15 @@ { "name": "functions", "folders": [], - "files": ["*.py"] + "files": [ + "*.py" + ] } ], "files": [ "modal.config.yaml", "requirements.txt", ".modal.toml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mongodb.json5 b/templates/mongodb.json5 index 33a29f20..8cdf9cc6 100644 --- a/templates/mongodb.json5 +++ b/templates/mongodb.json5 @@ -1,4 +1,3 @@ -// Struct for a MongoDB Project { "description": "MongoDB NoSQL database project", "name": "*", @@ -11,5 +10,6 @@ ], "files": [ "docker-compose.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/monogame.json5 b/templates/monogame.json5 index 85c49c38..a5264a8d 100644 --- a/templates/monogame.json5 +++ b/templates/monogame.json5 @@ -1,4 +1,3 @@ -// Struct for a MonoGame Project { "description": "MonoGame C# game framework", "name": "*", @@ -11,5 +10,10 @@ ], "files": [ "*.csproj" - ] + ], + "tags": [ + "game-engine", + "C#" + ], + "min_version": "0.3.16" } diff --git a/templates/monorepo.json5 b/templates/monorepo.json5 index 43112a80..af31215f 100644 --- a/templates/monorepo.json5 +++ b/templates/monorepo.json5 @@ -1,4 +1,3 @@ -// Struct for a Monorepo Project { "description": "Monorepo project (multiple packages)", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", "yarn.lock" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/motioncanvas.json5 b/templates/motioncanvas.json5 index fb6aaad4..ebddab2f 100644 --- a/templates/motioncanvas.json5 +++ b/templates/motioncanvas.json5 @@ -1,4 +1,3 @@ -// Struct for a Motion Canvas Project { "description": "Motion Canvas animation framework", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", "*.tsx" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/move.json5 b/templates/move.json5 index 4ee4b4e7..48d6faad 100644 --- a/templates/move.json5 +++ b/templates/move.json5 @@ -1,4 +1,3 @@ -// Move language blockchain (Aptos, Sui) { "description": "Move programming language blockchain project (Aptos, Sui)", "name": "*", @@ -6,11 +5,14 @@ { "name": "sources", "folders": [], - "files": ["*.move"] + "files": [ + "*.move" + ] } ], "files": [ "Move.toml", "Move.lock" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/mysql.json5 b/templates/mysql.json5 index 4fde8149..8644a983 100644 --- a/templates/mysql.json5 +++ b/templates/mysql.json5 @@ -1,4 +1,3 @@ -// Struct for a MySQL Database Project { "description": "MySQL database project", "name": "*", @@ -13,5 +12,8 @@ "docker-compose.yml", "*.sql" ], - "tags": ["sql"] + "tags": [ + "sql" + ], + "min_version": "0.3.16" } diff --git a/templates/nft.json5 b/templates/nft.json5 index 1d6a5841..bf398195 100644 --- a/templates/nft.json5 +++ b/templates/nft.json5 @@ -1,4 +1,3 @@ -// Struct for NFT Collection Project { "description": "NFT smart contract collection", "name": "*", @@ -12,5 +11,6 @@ "files": [ "*.sol", "hardhat.config.js" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/npm.json5 b/templates/npm.json5 index 490394c5..61f90b66 100644 --- a/templates/npm.json5 +++ b/templates/npm.json5 @@ -1,8 +1,14 @@ { "name": "*", + "description": "NPM package template", "folders": [], "files": [ "package.json" ], - "min_version": "0.3.16" + "min_version": "0.3.16", + "tags": [ + "npm", + "node", + "package" + ] } diff --git a/templates/otel.json5 b/templates/otel.json5 index 291c173f..6b91c722 100644 --- a/templates/otel.json5 +++ b/templates/otel.json5 @@ -1,9 +1,9 @@ -// Struct for an OpenTelemetry Project { "description": "OpenTelemetry observability framework", "name": "*", "folders": [], "files": [ "otel-collector-config.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/pagerduty.json5 b/templates/pagerduty.json5 index 2a5f88e1..f6d8d7bd 100644 --- a/templates/pagerduty.json5 +++ b/templates/pagerduty.json5 @@ -1,9 +1,9 @@ -// Struct for a PagerDuty Integration { "description": "PagerDuty incident management", "name": "*", "folders": [], "files": [ "pagerduty.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/panda3d.json5 b/templates/panda3d.json5 index 3c2f73cd..20d7fbeb 100644 --- a/templates/panda3d.json5 +++ b/templates/panda3d.json5 @@ -1,4 +1,3 @@ -// Struct for a Panda3D Project { "description": "Panda3D game engine", "name": "*", @@ -11,5 +10,10 @@ ], "files": [ "main.py" - ] + ], + "tags": [ + "game-engine", + "python" + ], + "min_version": "0.3.16" } diff --git a/templates/pandas.json5 b/templates/pandas.json5 index 815d07e3..83ca33ba 100644 --- a/templates/pandas.json5 +++ b/templates/pandas.json5 @@ -1,4 +1,3 @@ -// Struct for a Pandas Project { "description": "Pandas data analysis library", "name": "*", @@ -6,5 +5,6 @@ "files": [ "requirements.txt", "*.py" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/panel.json5 b/templates/panel.json5 index 224417a4..1abd86f2 100644 --- a/templates/panel.json5 +++ b/templates/panel.json5 @@ -1,4 +1,3 @@ -// Panel Bokeh interactive applications { "description": "Panel framework for building web applications with Python", "name": "*", @@ -6,12 +5,15 @@ { "name": "src", "folders": [], - "files": ["*.py"] + "files": [ + "*.py" + ] } ], "files": [ "panel.config.yaml", "requirements.txt", "app.py" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/parcel.json5 b/templates/parcel.json5 index c70319b5..d5f74c2b 100644 --- a/templates/parcel.json5 +++ b/templates/parcel.json5 @@ -1,4 +1,3 @@ -// Struct for a Parcel Project { "description": "Parcel zero-config bundler", "name": "*", @@ -12,5 +11,6 @@ "files": [ "package.json", ".parcelrc" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/payload.json5 b/templates/payload.json5 index cc4e0f4b..3dfb2f61 100644 --- a/templates/payload.json5 +++ b/templates/payload.json5 @@ -1,4 +1,3 @@ -// Struct for a Payload CMS Project { "description": "Payload headless CMS", "name": "*", @@ -12,5 +11,6 @@ "files": [ "tsconfig.json", "package.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/perl.json5 b/templates/perl.json5 index 44452270..4f9921e7 100644 --- a/templates/perl.json5 +++ b/templates/perl.json5 @@ -1,4 +1,3 @@ -// Struct for a Perl Project { "description": "Perl programming language project", "name": "*", @@ -12,5 +11,6 @@ "files": [ "Makefile.PL", "*.pl" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/perplexity.json5 b/templates/perplexity.json5 index d760b4f9..5d1aa661 100644 --- a/templates/perplexity.json5 +++ b/templates/perplexity.json5 @@ -1,4 +1,3 @@ -// Perplexity AI search { "description": "Perplexity AI API integration", "name": "*", @@ -6,11 +5,14 @@ { "name": "queries", "folders": [], - "files": ["*.json"] + "files": [ + "*.json" + ] } ], "files": [ "perplexity.config.yaml", "requirements.txt" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/playwright.json5 b/templates/playwright.json5 index 6c99eaaf..24fe6bf4 100644 --- a/templates/playwright.json5 +++ b/templates/playwright.json5 @@ -1,4 +1,3 @@ -// Struct for a Playwright Testing Framework { "description": "Playwright end-to-end testing", "name": "*", @@ -12,5 +11,6 @@ "files": [ "playwright.config.ts", "package.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/pnpm-workspace.json5 b/templates/pnpm-workspace.json5 index 19bdc121..f75db9e2 100644 --- a/templates/pnpm-workspace.json5 +++ b/templates/pnpm-workspace.json5 @@ -1,4 +1,3 @@ -// Struct for a Pnpm Workspace Project { "description": "Pnpm workspace monorepo", "name": "*", @@ -12,5 +11,6 @@ "files": [ "pnpm-workspace.yaml", "package.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/pocketbase.json5 b/templates/pocketbase.json5 index 46b4d911..2f89fceb 100644 --- a/templates/pocketbase.json5 +++ b/templates/pocketbase.json5 @@ -1,4 +1,3 @@ -// Struct for a Pocketbase Project { "description": "Pocketbase backend as a service", "name": "*", @@ -11,5 +10,6 @@ ], "files": [ "pb_schema.json" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/podman.json5 b/templates/podman.json5 index e2abda22..4028c603 100644 --- a/templates/podman.json5 +++ b/templates/podman.json5 @@ -1,4 +1,3 @@ -// Struct for Podman Project { "description": "Podman container management", "name": "*", @@ -6,5 +5,6 @@ "files": [ "Containerfile", "podman-compose.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/poetry.json5 b/templates/poetry.json5 index ac86f38e..d405ccca 100644 --- a/templates/poetry.json5 +++ b/templates/poetry.json5 @@ -1,4 +1,3 @@ -// Struct for a Poetry Python Project { "description": "Poetry Python dependency manager", "name": "*", @@ -6,5 +5,6 @@ "files": [ "pyproject.toml", "poetry.lock" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/postgres.json5 b/templates/postgres.json5 index 41a088f8..6ab8e05f 100644 --- a/templates/postgres.json5 +++ b/templates/postgres.json5 @@ -1,4 +1,3 @@ -// Struct for a PostgreSQL Database Project { "description": "PostgreSQL database project", "name": "*", @@ -6,5 +5,6 @@ "files": [ "*.sql", "docker-compose.yml" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/postgrest.json5 b/templates/postgrest.json5 index b41a4edb..adfb5efd 100644 --- a/templates/postgrest.json5 +++ b/templates/postgrest.json5 @@ -1,9 +1,9 @@ -// Struct for a PostgREST Project { "description": "PostgREST automatic API", "name": "*", "folders": [], "files": [ "postgrest.conf" - ] + ], + "min_version": "0.3.16" } diff --git a/templates/prefect.json5 b/templates/prefect.json5 index fc314abf..aaf5b769 100644 --- a/templates/prefect.json5 +++ b/templates/prefect.json5 @@ -1,4 +1,3 @@ -// Prefect workflow automation { "description": "Prefect modern data workflow automation", "name": "*", @@ -6,12 +5,15 @@ { "name": "flows", "folders": [], - "files": ["*.py"] + "files": [ + "*.py" + ] } ], "files": [ "prefect.yaml", "requirements.txt", ".prefect" - ] + ], + "min_version": "0.3.16" }