create-aron-app 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -31
- package/dist/index.js +38 -49
- package/package.json +3 -3
- package/templates/.cursor/rules/backend.mdc +112 -0
- package/templates/.cursor/rules/coding_standards.mdc +85 -4
- package/templates/.cursor/rules/frontend_architecture.mdc +334 -0
- package/templates/.github/workflows/ci.yml +17 -6
- package/templates/apps/{react-router → web}/.react-router/types/+routes.ts +11 -6
- package/templates/apps/{react-router/.react-router/types/src/routes/(dashboard)/todos → web/.react-router/types/src/routes/(dashboard)/(todos)}/+types/[id].ts +5 -2
- package/templates/apps/{react-router/.react-router/types/src/routes/(dashboard)/todos → web/.react-router/types/src/routes/(dashboard)/(todos)}/+types/index.ts +5 -2
- package/templates/apps/web/.react-router/types/src/routes/(dashboard)/(todos)/+types/layout.ts +65 -0
- package/templates/apps/{react-router → web}/project.json +11 -4
- package/templates/apps/{react-router → web}/react-router.config.ts +1 -1
- package/templates/apps/web/src/libs/convex_query_client.ts +11 -0
- package/templates/apps/web/src/libs/react_query_client.ts +17 -0
- package/templates/apps/web/src/libs/server/auth.ts +32 -0
- package/templates/apps/web/src/libs/server/protected.ts +17 -0
- package/templates/apps/web/src/providers/api_auth_provider.tsx +26 -0
- package/templates/apps/web/src/providers/global_provider.tsx +28 -0
- package/templates/apps/web/src/providers/navigation_loading_bar_provider.tsx +72 -0
- package/templates/apps/web/src/root.tsx +68 -0
- package/templates/apps/web/src/routes/(dashboard)/(todos)/[id].tsx +33 -0
- package/templates/apps/web/src/routes/(dashboard)/(todos)/index.tsx +26 -0
- package/templates/apps/web/src/routes/(dashboard)/(todos)/layout.tsx +9 -0
- package/templates/apps/{react-router → web}/src/routes/(dashboard)/index.tsx +3 -2
- package/templates/apps/web/src/routes/(dashboard)/layout.tsx +20 -0
- package/templates/apps/{react-router → web}/src/routes.ts +4 -2
- package/templates/apps/{nextjs → web}/src/surfaces/sidebar/install.tsx +1 -5
- package/templates/apps/{react-router → web}/src/surfaces/sidebar/layout.tsx +24 -15
- package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/all_todos.tsx +1 -1
- package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/all_todos_controller.ts +1 -1
- package/templates/apps/web/src/surfaces/todos/all_todos/bootstrap.ts +21 -0
- package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/bootstrap.ts +4 -5
- package/templates/apps/{nextjs → web}/src/surfaces/todos/single_todo/header/create.tsx +4 -6
- package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/single_todo_controller.ts +1 -1
- package/templates/biome.json +5 -0
- package/templates/bun.lock +11 -1281
- package/templates/nx.json +0 -11
- package/templates/package.json +2 -3
- package/templates/shared/assets/src/styles/global.css +14 -8
- package/templates/shared/ui/src/base/collapsible.tsx +31 -0
- package/templates/shared/ui/src/base/hover-card.tsx +42 -0
- package/templates/shared/ui/src/base/input-group.tsx +168 -0
- package/templates/shared/ui/src/base/panel.tsx +93 -0
- package/templates/shared/ui/src/hooks/use_mobile.tsx +1 -1
- package/templates/shared/ui/src/hooks/use_query_params.tsx +6 -7
- package/templates/shared/ui/tsconfig.json +1 -1
- package/templates/shared/utils/src/convex.ts +2 -1
- package/templates/tsconfig.base.json +2 -4
- package/templates/.cursor/commands/builder.md +0 -0
- package/templates/.cursor/rules/api_architecture.mdc +0 -262
- package/templates/.cursor/rules/convex_rules.mdc +0 -331
- package/templates/.cursor/rules/frontend_architecture_core.mdc +0 -495
- package/templates/.cursor/rules/frontend_architecture_nextjs.mdc +0 -458
- package/templates/.cursor/rules/frontend_architecture_reactrouter.mdc +0 -473
- package/templates/apps/nextjs/.env.example +0 -10
- package/templates/apps/nextjs/index.d.ts +0 -6
- package/templates/apps/nextjs/next-env.d.ts +0 -5
- package/templates/apps/nextjs/next.config.js +0 -22
- package/templates/apps/nextjs/postcss.config.js +0 -17
- package/templates/apps/nextjs/project.json +0 -22
- package/templates/apps/nextjs/src/app/(auth)/layout.tsx +0 -21
- package/templates/apps/nextjs/src/app/(auth)/not-allowed/page.tsx +0 -23
- package/templates/apps/nextjs/src/app/(auth)/sign-in/[[...sign-in]]/page.tsx +0 -15
- package/templates/apps/nextjs/src/app/(dashboard)/layout.tsx +0 -22
- package/templates/apps/nextjs/src/app/(dashboard)/page.tsx +0 -12
- package/templates/apps/nextjs/src/app/(dashboard)/todos/[id]/page.tsx +0 -26
- package/templates/apps/nextjs/src/app/(dashboard)/todos/page.tsx +0 -19
- package/templates/apps/nextjs/src/app/app.css +0 -3
- package/templates/apps/nextjs/src/app/layout.tsx +0 -26
- package/templates/apps/nextjs/src/middleware.ts +0 -18
- package/templates/apps/nextjs/src/providers/convex_provider.tsx +0 -44
- package/templates/apps/nextjs/src/surfaces/home/home.tsx +0 -27
- package/templates/apps/nextjs/src/surfaces/home/layout.tsx +0 -44
- package/templates/apps/nextjs/src/surfaces/home/main/create.tsx +0 -34
- package/templates/apps/nextjs/src/surfaces/sidebar/layout.tsx +0 -118
- package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/create.tsx +0 -19
- package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/nav_config.ts +0 -22
- package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/nav_main.tsx +0 -25
- package/templates/apps/nextjs/src/surfaces/sidebar/nav_secondary/create.tsx +0 -21
- package/templates/apps/nextjs/src/surfaces/sidebar/nav_secondary/nav_secondary.tsx +0 -33
- package/templates/apps/nextjs/src/surfaces/sidebar/sidebar.tsx +0 -23
- package/templates/apps/nextjs/src/surfaces/sidebar/ui/sidebar_nav_link.tsx +0 -39
- package/templates/apps/nextjs/src/surfaces/sidebar/user_menu/create.tsx +0 -28
- package/templates/apps/nextjs/src/surfaces/sidebar/user_menu/user_menu.tsx +0 -42
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/all_todos.tsx +0 -29
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/all_todos_controller.ts +0 -61
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/bootstrap.ts +0 -21
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/header/create.tsx +0 -23
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/install.tsx +0 -23
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/layout.tsx +0 -44
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/create.tsx +0 -49
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/main.tsx +0 -70
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/new_todo_sheet/create.tsx +0 -56
- package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/new_todo_sheet/new_todo_sheet.tsx +0 -99
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/bootstrap.ts +0 -32
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/header/header.tsx +0 -22
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/install.tsx +0 -27
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/layout.tsx +0 -55
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/main/create.tsx +0 -38
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/main/main.tsx +0 -49
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/single_todo.tsx +0 -29
- package/templates/apps/nextjs/src/surfaces/todos/single_todo/single_todo_controller.ts +0 -13
- package/templates/apps/nextjs/src/utils/auth.ts +0 -18
- package/templates/apps/nextjs/src/utils/convex.ts +0 -11
- package/templates/apps/nextjs/src/utils/font.ts +0 -9
- package/templates/apps/nextjs/tsconfig.json +0 -42
- package/templates/apps/react-router/src/providers/api_auth_provider.tsx +0 -40
- package/templates/apps/react-router/src/root.tsx +0 -37
- package/templates/apps/react-router/src/routes/(dashboard)/layout.tsx +0 -37
- package/templates/apps/react-router/src/routes/(dashboard)/todos/[id].tsx +0 -19
- package/templates/apps/react-router/src/routes/(dashboard)/todos/index.tsx +0 -19
- package/templates/apps/react-router/src/surfaces/home/bootstrap.ts +0 -9
- package/templates/apps/react-router/src/surfaces/home/install.tsx +0 -17
- package/templates/apps/react-router/src/surfaces/sidebar/install.tsx +0 -23
- package/templates/apps/react-router/src/surfaces/sidebar/nav_secondary/create.tsx +0 -21
- package/templates/apps/react-router/src/surfaces/sidebar/nav_secondary/nav_secondary.tsx +0 -31
- package/templates/apps/react-router/src/surfaces/todos/all_todos/bootstrap.ts +0 -18
- package/templates/apps/react-router/src/surfaces/todos/all_todos/main/new_todo_sheet/schema.ts +0 -11
- package/templates/apps/react-router/src/surfaces/todos/single_todo/header/create.tsx +0 -32
- /package/templates/apps/{react-router → web}/.env.example +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/+future.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/+server-build.d.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/src/+types/root.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/src/routes/(auth)/+types/layout.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/src/routes/(auth)/sign-in/+types/index.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/src/routes/(dashboard)/+types/index.ts +0 -0
- /package/templates/apps/{react-router → web}/.react-router/types/src/routes/(dashboard)/+types/layout.ts +0 -0
- /package/templates/apps/{react-router → web}/postcss.config.js +0 -0
- /package/templates/apps/{react-router → web}/public/favicon.ico +0 -0
- /package/templates/apps/{react-router → web}/src/app.css +0 -0
- /package/templates/apps/{react-router → web}/src/components/error_boundary.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/routes/(auth)/layout.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/routes/(auth)/sign-in/index.tsx +0 -0
- /package/templates/apps/{nextjs → web}/src/surfaces/home/bootstrap.ts +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/home/home.tsx +0 -0
- /package/templates/apps/{nextjs → web}/src/surfaces/home/install.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/home/layout.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/home/main/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/sidebar/nav_main/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/sidebar/nav_main/nav_main.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/sidebar/sidebar.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/sidebar/user_menu/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/sidebar/user_menu/user_menu.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/header/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/install.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/layout.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/main/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/main/main.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/main/new_todo_sheet/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/all_todos/main/new_todo_sheet/new_todo_sheet.tsx +0 -0
- /package/templates/apps/{nextjs → web}/src/surfaces/todos/all_todos/main/new_todo_sheet/schema.ts +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/header/header.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/install.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/layout.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/main/create.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/main/main.tsx +0 -0
- /package/templates/apps/{react-router → web}/src/surfaces/todos/single_todo/single_todo.tsx +0 -0
- /package/templates/apps/{react-router → web}/tsconfig.json +0 -0
- /package/templates/apps/{react-router → web}/vite.config.ts +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# create-aron-app
|
|
2
2
|
|
|
3
|
-
> CLI scaffolding tool that stamps out a production-ready Nx monorepo with Convex, Clerk, and
|
|
3
|
+
> CLI scaffolding tool that stamps out a production-ready Nx monorepo with Convex, Clerk, and React Router v7.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -14,41 +14,36 @@ bunx create-aron-app
|
|
|
14
14
|
|
|
15
15
|
The CLI will ask a few questions and scaffold a new project:
|
|
16
16
|
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **Output directory** — where to create the project (defaults to `~/Desktop/<name>`)
|
|
20
|
-
- **Package manager** — Bun (recommended), pnpm, npm, or Yarn
|
|
21
|
-
- **Install dependencies** — run install automatically
|
|
22
|
-
- **Initialize git** — create an initial commit
|
|
17
|
+
- **Output directory** — where to create the project (defaults to `~/Desktop/my-app`)
|
|
18
|
+
- **Initialize git** — create an initial commit and initial repository
|
|
23
19
|
|
|
24
20
|
## What gets scaffolded
|
|
25
21
|
|
|
26
|
-
The output is an **Nx monorepo** with
|
|
22
|
+
The output is an **Nx monorepo** with a full-stack React Router v7 application:
|
|
27
23
|
|
|
28
24
|
```
|
|
29
25
|
my-app/
|
|
30
26
|
├── apps/
|
|
31
27
|
│ ├── api/ # Convex backend (convex-ents + Zod validation)
|
|
32
|
-
│ └──
|
|
28
|
+
│ └── react-router/ # React Router v7 frontend (Vite)
|
|
33
29
|
├── shared/
|
|
34
|
-
│ ├── ui/ #
|
|
35
|
-
│ ├── utils/ # Convex client helpers, date utils
|
|
30
|
+
│ ├── ui/ # shadcn/Radix UI components + hooks
|
|
36
31
|
│ └── assets/ # global.css (Tailwind 4)
|
|
37
32
|
├── emails/ # React Email templates
|
|
38
|
-
├── scripts/ # sync_convex_env.ts
|
|
39
33
|
├── .cursor/ # Pre-configured Cursor AI rules and skills
|
|
40
34
|
└── .github/
|
|
41
35
|
└── workflows/ci.yml
|
|
42
36
|
```
|
|
43
37
|
|
|
44
|
-
A working **Todos** feature is wired end-to-end as the canonical example of the
|
|
38
|
+
A working **Todos** feature is wired end-to-end as the canonical example of the surface architecture pattern.
|
|
45
39
|
|
|
46
40
|
## Stack
|
|
47
41
|
|
|
48
42
|
- **Backend** — [Convex](https://docs.convex.dev) with [`convex-ents`](https://labs.convex.dev/convex-ents) for relational modeling and Zod-validated function wrappers
|
|
49
|
-
- **Frontend** — [
|
|
43
|
+
- **Frontend** — [React Router v7](https://reactrouter.com) with Vite
|
|
50
44
|
- **Auth** — [Clerk](https://clerk.com) wired to both Convex and the frontend
|
|
51
|
-
- **Data fetching** — [TanStack Query v5](https://tanstack.com/query)
|
|
45
|
+
- **Data fetching** — [TanStack Query v5](https://tanstack.com/query) with `@convex-dev/react-query`
|
|
46
|
+
- **State management** — [MobX](https://mobx.js.org) with surface architecture pattern
|
|
52
47
|
- **UI** — Radix UI + Tailwind CSS 4 + shared component library
|
|
53
48
|
- **Monorepo** — [Nx](https://nx.dev) with Bun workspaces
|
|
54
49
|
- **Linting** — [Biome](https://biomejs.dev)
|
|
@@ -99,14 +94,14 @@ Publishing is also automated via GitHub Actions — creating a GitHub Release tr
|
|
|
99
94
|
create-aron-app/
|
|
100
95
|
├── src/
|
|
101
96
|
│ ├── index.ts # CLI entrypoint (prompts + orchestration)
|
|
102
|
-
│ ├── types.ts # Shared TS types
|
|
103
97
|
│ └── utils/
|
|
104
|
-
│
|
|
105
|
-
|
|
106
|
-
├──
|
|
107
|
-
│ ├──
|
|
108
|
-
│
|
|
109
|
-
│
|
|
98
|
+
│ └── helpers.ts # File ops, template copy helpers
|
|
99
|
+
├── templates/ # Complete React Router v7 monorepo template
|
|
100
|
+
│ ├── apps/
|
|
101
|
+
│ │ ├── api/ # Convex backend
|
|
102
|
+
│ │ └── react-router/ # React Router v7 app
|
|
103
|
+
│ ├── shared/ # Shared UI and assets
|
|
104
|
+
│ └── ... # nx.json, package.json, etc.
|
|
110
105
|
├── dist/ # Built CLI output
|
|
111
106
|
└── .github/
|
|
112
107
|
└── workflows/
|
|
@@ -115,12 +110,10 @@ create-aron-app/
|
|
|
115
110
|
|
|
116
111
|
### How scaffolding works
|
|
117
112
|
|
|
118
|
-
1. Copy `templates
|
|
119
|
-
2.
|
|
120
|
-
3.
|
|
121
|
-
4.
|
|
122
|
-
5.
|
|
123
|
-
6.
|
|
124
|
-
7.
|
|
125
|
-
8. Optionally: `git init` + initial commit
|
|
126
|
-
9. Optionally: `<pm> install`
|
|
113
|
+
1. Copy the entire `templates/` directory to the output location
|
|
114
|
+
2. Rename `_gitignore` files to `.gitignore` (npm strips dotfiles on publish)
|
|
115
|
+
3. Set the project name in the root `package.json`
|
|
116
|
+
4. Promote `apps/react-router/.env.example` to the root as `.env.example`
|
|
117
|
+
5. Copy local `.env.router` to `.env.local` if it exists (for local development only)
|
|
118
|
+
6. Optionally: `git init` + initial commit
|
|
119
|
+
7. Run `bun install` to install dependencies
|
package/dist/index.js
CHANGED
|
@@ -1,54 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var jb=Object.create;var{getPrototypeOf:Lb,defineProperty:K1,getOwnPropertyNames:Pb}=Object;var _b=Object.prototype.hasOwnProperty;var f=(x,$,B)=>{B=x!=null?jb(Lb(x)):{};let m=$||!x||!x.__esModule?K1(B,"default",{value:x,enumerable:!0}):B;for(let I of Pb(x))if(!_b.call(m,I))K1(m,I,{get:()=>x[I],enumerable:!0});return m};var C1=(x,$)=>()=>($||x(($={exports:{}}).exports,$),$.exports);var i=C1((R9,N1)=>{var n={to(x,$){if(!$)return`\x1B[${x+1}G`;return`\x1B[${$+1};${x+1}H`},move(x,$){let B="";if(x<0)B+=`\x1B[${-x}D`;else if(x>0)B+=`\x1B[${x}C`;if($<0)B+=`\x1B[${-$}A`;else if($>0)B+=`\x1B[${$}B`;return B},up:(x=1)=>`\x1B[${x}A`,down:(x=1)=>`\x1B[${x}B`,forward:(x=1)=>`\x1B[${x}C`,backward:(x=1)=>`\x1B[${x}D`,nextLine:(x=1)=>"\x1B[E".repeat(x),prevLine:(x=1)=>"\x1B[F".repeat(x),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},wb={up:(x=1)=>"\x1B[S".repeat(x),down:(x=1)=>"\x1B[T".repeat(x)},hb={screen:"\x1B[2J",up:(x=1)=>"\x1B[1J".repeat(x),down:(x=1)=>"\x1B[J".repeat(x),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(x){let $="";for(let B=0;B<x;B++)$+=this.line+(B<x-1?n.up():"");if(x)$+=n.left;return $}};N1.exports={cursor:n,scroll:wb,erase:hb,beep:"\x07"}});var d=C1((j9,r)=>{var y=process||{},U1=y.argv||[],g=y.env||{},Eb=!(!!g.NO_COLOR||U1.includes("--no-color"))&&(!!g.FORCE_COLOR||U1.includes("--color")||y.platform==="win32"||(y.stdout||{}).isTTY&&g.TERM!=="dumb"||!!g.CI),Sb=(x,$,B=x)=>(m)=>{let I=""+m,G=I.indexOf($,x.length);return~G?x+fb(I,$,B,G)+$:x+I+$},fb=(x,$,B,m)=>{let I="",G=0;do I+=x.substring(G,m)+B,G=m+$.length,m=x.indexOf($,G);while(~m);return I+x.substring(G)},M1=(x=Eb)=>{let $=x?Sb:()=>String;return{isColorSupported:x,reset:$("\x1B[0m","\x1B[0m"),bold:$("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:$("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:$("\x1B[3m","\x1B[23m"),underline:$("\x1B[4m","\x1B[24m"),inverse:$("\x1B[7m","\x1B[27m"),hidden:$("\x1B[8m","\x1B[28m"),strikethrough:$("\x1B[9m","\x1B[29m"),black:$("\x1B[30m","\x1B[39m"),red:$("\x1B[31m","\x1B[39m"),green:$("\x1B[32m","\x1B[39m"),yellow:$("\x1B[33m","\x1B[39m"),blue:$("\x1B[34m","\x1B[39m"),magenta:$("\x1B[35m","\x1B[39m"),cyan:$("\x1B[36m","\x1B[39m"),white:$("\x1B[37m","\x1B[39m"),gray:$("\x1B[90m","\x1B[39m"),bgBlack:$("\x1B[40m","\x1B[49m"),bgRed:$("\x1B[41m","\x1B[49m"),bgGreen:$("\x1B[42m","\x1B[49m"),bgYellow:$("\x1B[43m","\x1B[49m"),bgBlue:$("\x1B[44m","\x1B[49m"),bgMagenta:$("\x1B[45m","\x1B[49m"),bgCyan:$("\x1B[46m","\x1B[49m"),bgWhite:$("\x1B[47m","\x1B[49m"),blackBright:$("\x1B[90m","\x1B[39m"),redBright:$("\x1B[91m","\x1B[39m"),greenBright:$("\x1B[92m","\x1B[39m"),yellowBright:$("\x1B[93m","\x1B[39m"),blueBright:$("\x1B[94m","\x1B[39m"),magentaBright:$("\x1B[95m","\x1B[39m"),cyanBright:$("\x1B[96m","\x1B[39m"),whiteBright:$("\x1B[97m","\x1B[39m"),bgBlackBright:$("\x1B[100m","\x1B[49m"),bgRedBright:$("\x1B[101m","\x1B[49m"),bgGreenBright:$("\x1B[102m","\x1B[49m"),bgYellowBright:$("\x1B[103m","\x1B[49m"),bgBlueBright:$("\x1B[104m","\x1B[49m"),bgMagentaBright:$("\x1B[105m","\x1B[49m"),bgCyanBright:$("\x1B[106m","\x1B[49m"),bgWhiteBright:$("\x1B[107m","\x1B[49m")}};r.exports=M1();r.exports.createColors=M1});import{existsSync as N9,rmSync as U9}from"node:fs";import{basename as M9,dirname as T9,resolve as V1}from"node:path";import{fileURLToPath as O9}from"node:url";var C=f(i(),1),h1=f(d(),1);import{stdin as _1,stdout as w1}from"node:process";import*as R from"node:readline";import T1 from"node:readline";import{WriteStream as kb}from"node:tty";function gb({onlyFirst:x=!1}={}){let $=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp($,x?void 0:"g")}var yb=gb();function E1(x){if(typeof x!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof x}\``);return x.replace(yb,"")}function S1(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}var f1={exports:{}};(function(x){var $={};x.exports=$,$.eastAsianWidth=function(m){var I=m.charCodeAt(0),G=m.length==2?m.charCodeAt(1):0,b=I;return 55296<=I&&I<=56319&&56320<=G&&G<=57343&&(I&=1023,G&=1023,b=I<<10|G,b+=65536),b==12288||65281<=b&&b<=65376||65504<=b&&b<=65510?"F":b==8361||65377<=b&&b<=65470||65474<=b&&b<=65479||65482<=b&&b<=65487||65490<=b&&b<=65495||65498<=b&&b<=65500||65512<=b&&b<=65518?"H":4352<=b&&b<=4447||4515<=b&&b<=4519||4602<=b&&b<=4607||9001<=b&&b<=9002||11904<=b&&b<=11929||11931<=b&&b<=12019||12032<=b&&b<=12245||12272<=b&&b<=12283||12289<=b&&b<=12350||12353<=b&&b<=12438||12441<=b&&b<=12543||12549<=b&&b<=12589||12593<=b&&b<=12686||12688<=b&&b<=12730||12736<=b&&b<=12771||12784<=b&&b<=12830||12832<=b&&b<=12871||12880<=b&&b<=13054||13056<=b&&b<=19903||19968<=b&&b<=42124||42128<=b&&b<=42182||43360<=b&&b<=43388||44032<=b&&b<=55203||55216<=b&&b<=55238||55243<=b&&b<=55291||63744<=b&&b<=64255||65040<=b&&b<=65049||65072<=b&&b<=65106||65108<=b&&b<=65126||65128<=b&&b<=65131||110592<=b&&b<=110593||127488<=b&&b<=127490||127504<=b&&b<=127546||127552<=b&&b<=127560||127568<=b&&b<=127569||131072<=b&&b<=194367||177984<=b&&b<=196605||196608<=b&&b<=262141?"W":32<=b&&b<=126||162<=b&&b<=163||165<=b&&b<=166||b==172||b==175||10214<=b&&b<=10221||10629<=b&&b<=10630?"Na":b==161||b==164||167<=b&&b<=168||b==170||173<=b&&b<=174||176<=b&&b<=180||182<=b&&b<=186||188<=b&&b<=191||b==198||b==208||215<=b&&b<=216||222<=b&&b<=225||b==230||232<=b&&b<=234||236<=b&&b<=237||b==240||242<=b&&b<=243||247<=b&&b<=250||b==252||b==254||b==257||b==273||b==275||b==283||294<=b&&b<=295||b==299||305<=b&&b<=307||b==312||319<=b&&b<=322||b==324||328<=b&&b<=331||b==333||338<=b&&b<=339||358<=b&&b<=359||b==363||b==462||b==464||b==466||b==468||b==470||b==472||b==474||b==476||b==593||b==609||b==708||b==711||713<=b&&b<=715||b==717||b==720||728<=b&&b<=731||b==733||b==735||768<=b&&b<=879||913<=b&&b<=929||931<=b&&b<=937||945<=b&&b<=961||963<=b&&b<=969||b==1025||1040<=b&&b<=1103||b==1105||b==8208||8211<=b&&b<=8214||8216<=b&&b<=8217||8220<=b&&b<=8221||8224<=b&&b<=8226||8228<=b&&b<=8231||b==8240||8242<=b&&b<=8243||b==8245||b==8251||b==8254||b==8308||b==8319||8321<=b&&b<=8324||b==8364||b==8451||b==8453||b==8457||b==8467||b==8470||8481<=b&&b<=8482||b==8486||b==8491||8531<=b&&b<=8532||8539<=b&&b<=8542||8544<=b&&b<=8555||8560<=b&&b<=8569||b==8585||8592<=b&&b<=8601||8632<=b&&b<=8633||b==8658||b==8660||b==8679||b==8704||8706<=b&&b<=8707||8711<=b&&b<=8712||b==8715||b==8719||b==8721||b==8725||b==8730||8733<=b&&b<=8736||b==8739||b==8741||8743<=b&&b<=8748||b==8750||8756<=b&&b<=8759||8764<=b&&b<=8765||b==8776||b==8780||b==8786||8800<=b&&b<=8801||8804<=b&&b<=8807||8810<=b&&b<=8811||8814<=b&&b<=8815||8834<=b&&b<=8835||8838<=b&&b<=8839||b==8853||b==8857||b==8869||b==8895||b==8978||9312<=b&&b<=9449||9451<=b&&b<=9547||9552<=b&&b<=9587||9600<=b&&b<=9615||9618<=b&&b<=9621||9632<=b&&b<=9633||9635<=b&&b<=9641||9650<=b&&b<=9651||9654<=b&&b<=9655||9660<=b&&b<=9661||9664<=b&&b<=9665||9670<=b&&b<=9672||b==9675||9678<=b&&b<=9681||9698<=b&&b<=9701||b==9711||9733<=b&&b<=9734||b==9737||9742<=b&&b<=9743||9748<=b&&b<=9749||b==9756||b==9758||b==9792||b==9794||9824<=b&&b<=9825||9827<=b&&b<=9829||9831<=b&&b<=9834||9836<=b&&b<=9837||b==9839||9886<=b&&b<=9887||9918<=b&&b<=9919||9924<=b&&b<=9933||9935<=b&&b<=9953||b==9955||9960<=b&&b<=9983||b==10045||b==10071||10102<=b&&b<=10111||11093<=b&&b<=11097||12872<=b&&b<=12879||57344<=b&&b<=63743||65024<=b&&b<=65039||b==65533||127232<=b&&b<=127242||127248<=b&&b<=127277||127280<=b&&b<=127337||127344<=b&&b<=127386||917760<=b&&b<=917999||983040<=b&&b<=1048573||1048576<=b&&b<=1114109?"A":"N"},$.characterLength=function(m){var I=this.eastAsianWidth(m);return I=="F"||I=="W"||I=="A"?2:1};function B(m){return m.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}$.length=function(m){for(var I=B(m),G=0,b=0;b<I.length;b++)G=G+this.characterLength(I[b]);return G},$.slice=function(m,I,G){textLen=$.length(m),I=I||0,G=G||1,I<0&&(I=textLen+I),G<0&&(G=textLen+G);for(var b="",Q=0,z=B(m),q=0;q<z.length;q++){var W=z[q],X=$.length(W);if(Q>=I-(X==2?1:0))if(Q+X<=G)b+=W;else break;Q+=X}return b}})(f1);var db=f1.exports,pb=S1(db),lb=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},ob=S1(lb);function k(x,$={}){if(typeof x!="string"||x.length===0||($={ambiguousIsNarrow:!0,...$},x=E1(x),x.length===0))return 0;x=x.replace(ob()," ");let B=$.ambiguousIsNarrow?1:2,m=0;for(let I of x){let G=I.codePointAt(0);if(G<=31||G>=127&&G<=159||G>=768&&G<=879)continue;switch(pb.eastAsianWidth(I)){case"F":case"W":m+=2;break;case"A":m+=B;break;default:m+=1}}return m}var s=10,O1=(x=0)=>($)=>`\x1B[${$+x}m`,A1=(x=0)=>($)=>`\x1B[${38+x};5;${$}m`,v1=(x=0)=>($,B,m)=>`\x1B[${38+x};2;${$};${B};${m}m`,Z={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(Z.modifier);var cb=Object.keys(Z.color),Fb=Object.keys(Z.bgColor);[...cb];function ab(){let x=new Map;for(let[$,B]of Object.entries(Z)){for(let[m,I]of Object.entries(B))Z[m]={open:`\x1B[${I[0]}m`,close:`\x1B[${I[1]}m`},B[m]=Z[m],x.set(I[0],I[1]);Object.defineProperty(Z,$,{value:B,enumerable:!1})}return Object.defineProperty(Z,"codes",{value:x,enumerable:!1}),Z.color.close="\x1B[39m",Z.bgColor.close="\x1B[49m",Z.color.ansi=O1(),Z.color.ansi256=A1(),Z.color.ansi16m=v1(),Z.bgColor.ansi=O1(s),Z.bgColor.ansi256=A1(s),Z.bgColor.ansi16m=v1(s),Object.defineProperties(Z,{rgbToAnsi256:{value:($,B,m)=>$===B&&B===m?$<8?16:$>248?231:Math.round(($-8)/247*24)+232:16+36*Math.round($/255*5)+6*Math.round(B/255*5)+Math.round(m/255*5),enumerable:!1},hexToRgb:{value:($)=>{let B=/[a-f\d]{6}|[a-f\d]{3}/i.exec($.toString(16));if(!B)return[0,0,0];let[m]=B;m.length===3&&(m=[...m].map((G)=>G+G).join(""));let I=Number.parseInt(m,16);return[I>>16&255,I>>8&255,I&255]},enumerable:!1},hexToAnsi256:{value:($)=>Z.rgbToAnsi256(...Z.hexToRgb($)),enumerable:!1},ansi256ToAnsi:{value:($)=>{if($<8)return 30+$;if($<16)return 90+($-8);let B,m,I;if($>=232)B=(($-232)*10+8)/255,m=B,I=B;else{$-=16;let Q=$%36;B=Math.floor($/36)/5,m=Math.floor(Q/6)/5,I=Q%6/5}let G=Math.max(B,m,I)*2;if(G===0)return 30;let b=30+(Math.round(I)<<2|Math.round(m)<<1|Math.round(B));return G===2&&(b+=60),b},enumerable:!1},rgbToAnsi:{value:($,B,m)=>Z.ansi256ToAnsi(Z.rgbToAnsi256($,B,m)),enumerable:!1},hexToAnsi:{value:($)=>Z.ansi256ToAnsi(Z.hexToAnsi256($)),enumerable:!1}}),Z}var nb=ab(),o=new Set(["\x1B",""]),ib=39,D="\x07",k1="[",rb="]",g1="m",e=`${rb}8;;`,R1=(x)=>`${o.values().next().value}${k1}${x}${g1}`,j1=(x)=>`${o.values().next().value}${e}${x}${D}`,sb=(x)=>x.split(" ").map(($)=>k($)),u=(x,$,B)=>{let m=[...$],I=!1,G=!1,b=k(E1(x[x.length-1]));for(let[Q,z]of m.entries()){let q=k(z);if(b+q<=B?x[x.length-1]+=z:(x.push(z),b=0),o.has(z)&&(I=!0,G=m.slice(Q+1).join("").startsWith(e)),I){G?z===D&&(I=!1,G=!1):z===g1&&(I=!1);continue}b+=q,b===B&&Q<m.length-1&&(x.push(""),b=0)}!b&&x[x.length-1].length>0&&x.length>1&&(x[x.length-2]+=x.pop())},ub=(x)=>{let $=x.split(" "),B=$.length;for(;B>0&&!(k($[B-1])>0);)B--;return B===$.length?x:$.slice(0,B).join(" ")+$.slice(B).join("")},tb=(x,$,B={})=>{if(B.trim!==!1&&x.trim()==="")return"";let m="",I,G,b=sb(x),Q=[""];for(let[q,W]of x.split(" ").entries()){B.trim!==!1&&(Q[Q.length-1]=Q[Q.length-1].trimStart());let X=k(Q[Q.length-1]);if(q!==0&&(X>=$&&(B.wordWrap===!1||B.trim===!1)&&(Q.push(""),X=0),(X>0||B.trim===!1)&&(Q[Q.length-1]+=" ",X++)),B.hard&&b[q]>$){let T=$-X,A=1+Math.floor((b[q]-T-1)/$);Math.floor((b[q]-1)/$)<A&&Q.push(""),u(Q,W,$);continue}if(X+b[q]>$&&X>0&&b[q]>0){if(B.wordWrap===!1&&X<$){u(Q,W,$);continue}Q.push("")}if(X+b[q]>$&&B.wordWrap===!1){u(Q,W,$);continue}Q[Q.length-1]+=W}B.trim!==!1&&(Q=Q.map((q)=>ub(q)));let z=[...Q.join(`
|
|
3
|
-
`)];for(let[q
|
|
4
|
-
`?(G&&(
|
|
5
|
-
`&&(
|
|
2
|
+
var u1=Object.create;var{getPrototypeOf:e1,defineProperty:K1,getOwnPropertyNames:D1}=Object;var bb=Object.prototype.hasOwnProperty;var A=(x,m,$)=>{$=x!=null?u1(e1(x)):{};let I=m||!x||!x.__esModule?K1($,"default",{value:x,enumerable:!0}):$;for(let B of D1(x))if(!bb.call(I,B))K1(I,B,{get:()=>x[B],enumerable:!0});return I};var S1=(x,m)=>()=>(m||x((m={exports:{}}).exports,m),m.exports);var o=S1((tb,W1)=>{var p={to(x,m){if(!m)return`\x1B[${x+1}G`;return`\x1B[${m+1};${x+1}H`},move(x,m){let $="";if(x<0)$+=`\x1B[${-x}D`;else if(x>0)$+=`\x1B[${x}C`;if(m<0)$+=`\x1B[${-m}A`;else if(m>0)$+=`\x1B[${m}B`;return $},up:(x=1)=>`\x1B[${x}A`,down:(x=1)=>`\x1B[${x}B`,forward:(x=1)=>`\x1B[${x}C`,backward:(x=1)=>`\x1B[${x}D`,nextLine:(x=1)=>"\x1B[E".repeat(x),prevLine:(x=1)=>"\x1B[F".repeat(x),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},xb={up:(x=1)=>"\x1B[S".repeat(x),down:(x=1)=>"\x1B[T".repeat(x)},mb={screen:"\x1B[2J",up:(x=1)=>"\x1B[1J".repeat(x),down:(x=1)=>"\x1B[J".repeat(x),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(x){let m="";for(let $=0;$<x;$++)m+=this.line+($<x-1?p.up():"");if(x)m+=p.left;return m}};W1.exports={cursor:p,scroll:xb,erase:mb,beep:"\x07"}});var L=S1((ub,a)=>{var _=process||{},H1=_.argv||[],T=_.env||{},$b=!(!!T.NO_COLOR||H1.includes("--no-color"))&&(!!T.FORCE_COLOR||H1.includes("--color")||_.platform==="win32"||(_.stdout||{}).isTTY&&T.TERM!=="dumb"||!!T.CI),Ib=(x,m,$=x)=>(I)=>{let B=""+I,G=B.indexOf(m,x.length);return~G?x+Bb(B,m,$,G)+m:x+B+m},Bb=(x,m,$,I)=>{let B="",G=0;do B+=x.substring(G,I)+$,G=I+m.length,I=x.indexOf(m,G);while(~I);return B+x.substring(G)},Q1=(x=$b)=>{let m=x?Ib:()=>String;return{isColorSupported:x,reset:m("\x1B[0m","\x1B[0m"),bold:m("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:m("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:m("\x1B[3m","\x1B[23m"),underline:m("\x1B[4m","\x1B[24m"),inverse:m("\x1B[7m","\x1B[27m"),hidden:m("\x1B[8m","\x1B[28m"),strikethrough:m("\x1B[9m","\x1B[29m"),black:m("\x1B[30m","\x1B[39m"),red:m("\x1B[31m","\x1B[39m"),green:m("\x1B[32m","\x1B[39m"),yellow:m("\x1B[33m","\x1B[39m"),blue:m("\x1B[34m","\x1B[39m"),magenta:m("\x1B[35m","\x1B[39m"),cyan:m("\x1B[36m","\x1B[39m"),white:m("\x1B[37m","\x1B[39m"),gray:m("\x1B[90m","\x1B[39m"),bgBlack:m("\x1B[40m","\x1B[49m"),bgRed:m("\x1B[41m","\x1B[49m"),bgGreen:m("\x1B[42m","\x1B[49m"),bgYellow:m("\x1B[43m","\x1B[49m"),bgBlue:m("\x1B[44m","\x1B[49m"),bgMagenta:m("\x1B[45m","\x1B[49m"),bgCyan:m("\x1B[46m","\x1B[49m"),bgWhite:m("\x1B[47m","\x1B[49m"),blackBright:m("\x1B[90m","\x1B[39m"),redBright:m("\x1B[91m","\x1B[39m"),greenBright:m("\x1B[92m","\x1B[39m"),yellowBright:m("\x1B[93m","\x1B[39m"),blueBright:m("\x1B[94m","\x1B[39m"),magentaBright:m("\x1B[95m","\x1B[39m"),cyanBright:m("\x1B[96m","\x1B[39m"),whiteBright:m("\x1B[97m","\x1B[39m"),bgBlackBright:m("\x1B[100m","\x1B[49m"),bgRedBright:m("\x1B[101m","\x1B[49m"),bgGreenBright:m("\x1B[102m","\x1B[49m"),bgYellowBright:m("\x1B[103m","\x1B[49m"),bgBlueBright:m("\x1B[104m","\x1B[49m"),bgMagentaBright:m("\x1B[105m","\x1B[49m"),bgCyanBright:m("\x1B[106m","\x1B[49m"),bgWhiteBright:m("\x1B[107m","\x1B[49m")}};a.exports=Q1();a.exports.createColors=Q1});import{existsSync as ab,rmSync as cb}from"node:fs";import{basename as nb,dirname as rb,resolve as J1}from"node:path";import{fileURLToPath as ib}from"node:url";var w=A(o(),1),U1=A(L(),1);import{stdin as N1,stdout as R1}from"node:process";import*as U from"node:readline";import X1 from"node:readline";import{WriteStream as Gb}from"node:tty";function Jb({onlyFirst:x=!1}={}){let m=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(m,x?void 0:"g")}var Yb=Jb();function V1(x){if(typeof x!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof x}\``);return x.replace(Yb,"")}function g1(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}var O1={exports:{}};(function(x){var m={};x.exports=m,m.eastAsianWidth=function(I){var B=I.charCodeAt(0),G=I.length==2?I.charCodeAt(1):0,b=B;return 55296<=B&&B<=56319&&56320<=G&&G<=57343&&(B&=1023,G&=1023,b=B<<10|G,b+=65536),b==12288||65281<=b&&b<=65376||65504<=b&&b<=65510?"F":b==8361||65377<=b&&b<=65470||65474<=b&&b<=65479||65482<=b&&b<=65487||65490<=b&&b<=65495||65498<=b&&b<=65500||65512<=b&&b<=65518?"H":4352<=b&&b<=4447||4515<=b&&b<=4519||4602<=b&&b<=4607||9001<=b&&b<=9002||11904<=b&&b<=11929||11931<=b&&b<=12019||12032<=b&&b<=12245||12272<=b&&b<=12283||12289<=b&&b<=12350||12353<=b&&b<=12438||12441<=b&&b<=12543||12549<=b&&b<=12589||12593<=b&&b<=12686||12688<=b&&b<=12730||12736<=b&&b<=12771||12784<=b&&b<=12830||12832<=b&&b<=12871||12880<=b&&b<=13054||13056<=b&&b<=19903||19968<=b&&b<=42124||42128<=b&&b<=42182||43360<=b&&b<=43388||44032<=b&&b<=55203||55216<=b&&b<=55238||55243<=b&&b<=55291||63744<=b&&b<=64255||65040<=b&&b<=65049||65072<=b&&b<=65106||65108<=b&&b<=65126||65128<=b&&b<=65131||110592<=b&&b<=110593||127488<=b&&b<=127490||127504<=b&&b<=127546||127552<=b&&b<=127560||127568<=b&&b<=127569||131072<=b&&b<=194367||177984<=b&&b<=196605||196608<=b&&b<=262141?"W":32<=b&&b<=126||162<=b&&b<=163||165<=b&&b<=166||b==172||b==175||10214<=b&&b<=10221||10629<=b&&b<=10630?"Na":b==161||b==164||167<=b&&b<=168||b==170||173<=b&&b<=174||176<=b&&b<=180||182<=b&&b<=186||188<=b&&b<=191||b==198||b==208||215<=b&&b<=216||222<=b&&b<=225||b==230||232<=b&&b<=234||236<=b&&b<=237||b==240||242<=b&&b<=243||247<=b&&b<=250||b==252||b==254||b==257||b==273||b==275||b==283||294<=b&&b<=295||b==299||305<=b&&b<=307||b==312||319<=b&&b<=322||b==324||328<=b&&b<=331||b==333||338<=b&&b<=339||358<=b&&b<=359||b==363||b==462||b==464||b==466||b==468||b==470||b==472||b==474||b==476||b==593||b==609||b==708||b==711||713<=b&&b<=715||b==717||b==720||728<=b&&b<=731||b==733||b==735||768<=b&&b<=879||913<=b&&b<=929||931<=b&&b<=937||945<=b&&b<=961||963<=b&&b<=969||b==1025||1040<=b&&b<=1103||b==1105||b==8208||8211<=b&&b<=8214||8216<=b&&b<=8217||8220<=b&&b<=8221||8224<=b&&b<=8226||8228<=b&&b<=8231||b==8240||8242<=b&&b<=8243||b==8245||b==8251||b==8254||b==8308||b==8319||8321<=b&&b<=8324||b==8364||b==8451||b==8453||b==8457||b==8467||b==8470||8481<=b&&b<=8482||b==8486||b==8491||8531<=b&&b<=8532||8539<=b&&b<=8542||8544<=b&&b<=8555||8560<=b&&b<=8569||b==8585||8592<=b&&b<=8601||8632<=b&&b<=8633||b==8658||b==8660||b==8679||b==8704||8706<=b&&b<=8707||8711<=b&&b<=8712||b==8715||b==8719||b==8721||b==8725||b==8730||8733<=b&&b<=8736||b==8739||b==8741||8743<=b&&b<=8748||b==8750||8756<=b&&b<=8759||8764<=b&&b<=8765||b==8776||b==8780||b==8786||8800<=b&&b<=8801||8804<=b&&b<=8807||8810<=b&&b<=8811||8814<=b&&b<=8815||8834<=b&&b<=8835||8838<=b&&b<=8839||b==8853||b==8857||b==8869||b==8895||b==8978||9312<=b&&b<=9449||9451<=b&&b<=9547||9552<=b&&b<=9587||9600<=b&&b<=9615||9618<=b&&b<=9621||9632<=b&&b<=9633||9635<=b&&b<=9641||9650<=b&&b<=9651||9654<=b&&b<=9655||9660<=b&&b<=9661||9664<=b&&b<=9665||9670<=b&&b<=9672||b==9675||9678<=b&&b<=9681||9698<=b&&b<=9701||b==9711||9733<=b&&b<=9734||b==9737||9742<=b&&b<=9743||9748<=b&&b<=9749||b==9756||b==9758||b==9792||b==9794||9824<=b&&b<=9825||9827<=b&&b<=9829||9831<=b&&b<=9834||9836<=b&&b<=9837||b==9839||9886<=b&&b<=9887||9918<=b&&b<=9919||9924<=b&&b<=9933||9935<=b&&b<=9953||b==9955||9960<=b&&b<=9983||b==10045||b==10071||10102<=b&&b<=10111||11093<=b&&b<=11097||12872<=b&&b<=12879||57344<=b&&b<=63743||65024<=b&&b<=65039||b==65533||127232<=b&&b<=127242||127248<=b&&b<=127277||127280<=b&&b<=127337||127344<=b&&b<=127386||917760<=b&&b<=917999||983040<=b&&b<=1048573||1048576<=b&&b<=1114109?"A":"N"},m.characterLength=function(I){var B=this.eastAsianWidth(I);return B=="F"||B=="W"||B=="A"?2:1};function $(I){return I.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}m.length=function(I){for(var B=$(I),G=0,b=0;b<B.length;b++)G=G+this.characterLength(B[b]);return G},m.slice=function(I,B,G){textLen=m.length(I),B=B||0,G=G||1,B<0&&(B=textLen+B),G<0&&(G=textLen+G);for(var b="",Y=0,K=$(I),S=0;S<K.length;S++){var q=K[S],X=m.length(q);if(Y>=B-(X==2?1:0))if(Y+X<=G)b+=q;else break;Y+=X}return b}})(O1);var Kb=O1.exports,Sb=g1(Kb),Wb=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},Hb=g1(Wb);function M(x,m={}){if(typeof x!="string"||x.length===0||(m={ambiguousIsNarrow:!0,...m},x=V1(x),x.length===0))return 0;x=x.replace(Hb()," ");let $=m.ambiguousIsNarrow?1:2,I=0;for(let B of x){let G=B.codePointAt(0);if(G<=31||G>=127&&G<=159||G>=768&&G<=879)continue;switch(Sb.eastAsianWidth(B)){case"F":case"W":I+=2;break;case"A":I+=$;break;default:I+=1}}return I}var c=10,q1=(x=0)=>(m)=>`\x1B[${m+x}m`,w1=(x=0)=>(m)=>`\x1B[${38+x};5;${m}m`,z1=(x=0)=>(m,$,I)=>`\x1B[${38+x};2;${m};${$};${I}m`,H={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(H.modifier);var Qb=Object.keys(H.color),Xb=Object.keys(H.bgColor);[...Qb];function qb(){let x=new Map;for(let[m,$]of Object.entries(H)){for(let[I,B]of Object.entries($))H[I]={open:`\x1B[${B[0]}m`,close:`\x1B[${B[1]}m`},$[I]=H[I],x.set(B[0],B[1]);Object.defineProperty(H,m,{value:$,enumerable:!1})}return Object.defineProperty(H,"codes",{value:x,enumerable:!1}),H.color.close="\x1B[39m",H.bgColor.close="\x1B[49m",H.color.ansi=q1(),H.color.ansi256=w1(),H.color.ansi16m=z1(),H.bgColor.ansi=q1(c),H.bgColor.ansi256=w1(c),H.bgColor.ansi16m=z1(c),Object.defineProperties(H,{rgbToAnsi256:{value:(m,$,I)=>m===$&&$===I?m<8?16:m>248?231:Math.round((m-8)/247*24)+232:16+36*Math.round(m/255*5)+6*Math.round($/255*5)+Math.round(I/255*5),enumerable:!1},hexToRgb:{value:(m)=>{let $=/[a-f\d]{6}|[a-f\d]{3}/i.exec(m.toString(16));if(!$)return[0,0,0];let[I]=$;I.length===3&&(I=[...I].map((G)=>G+G).join(""));let B=Number.parseInt(I,16);return[B>>16&255,B>>8&255,B&255]},enumerable:!1},hexToAnsi256:{value:(m)=>H.rgbToAnsi256(...H.hexToRgb(m)),enumerable:!1},ansi256ToAnsi:{value:(m)=>{if(m<8)return 30+m;if(m<16)return 90+(m-8);let $,I,B;if(m>=232)$=((m-232)*10+8)/255,I=$,B=$;else{m-=16;let Y=m%36;$=Math.floor(m/36)/5,I=Math.floor(Y/6)/5,B=Y%6/5}let G=Math.max($,I,B)*2;if(G===0)return 30;let b=30+(Math.round(B)<<2|Math.round(I)<<1|Math.round($));return G===2&&(b+=60),b},enumerable:!1},rgbToAnsi:{value:(m,$,I)=>H.ansi256ToAnsi(H.rgbToAnsi256(m,$,I)),enumerable:!1},hexToAnsi:{value:(m)=>H.ansi256ToAnsi(H.hexToAnsi256(m)),enumerable:!1}}),H}var wb=qb(),E=new Set(["\x1B",""]),zb=39,i="\x07",h1="[",Zb="]",k1="m",F=`${Zb}8;;`,Z1=(x)=>`${E.values().next().value}${h1}${x}${k1}`,f1=(x)=>`${E.values().next().value}${F}${x}${i}`,fb=(x)=>x.split(" ").map((m)=>M(m)),n=(x,m,$)=>{let I=[...m],B=!1,G=!1,b=M(V1(x[x.length-1]));for(let[Y,K]of I.entries()){let S=M(K);if(b+S<=$?x[x.length-1]+=K:(x.push(K),b=0),E.has(K)&&(B=!0,G=I.slice(Y+1).join("").startsWith(F)),B){G?K===i&&(B=!1,G=!1):K===k1&&(B=!1);continue}b+=S,b===$&&Y<I.length-1&&(x.push(""),b=0)}!b&&x[x.length-1].length>0&&x.length>1&&(x[x.length-2]+=x.pop())},Cb=(x)=>{let m=x.split(" "),$=m.length;for(;$>0&&!(M(m[$-1])>0);)$--;return $===m.length?x:m.slice(0,$).join(" ")+m.slice($).join("")},Nb=(x,m,$={})=>{if($.trim!==!1&&x.trim()==="")return"";let I="",B,G,b=fb(x),Y=[""];for(let[S,q]of x.split(" ").entries()){$.trim!==!1&&(Y[Y.length-1]=Y[Y.length-1].trimStart());let X=M(Y[Y.length-1]);if(S!==0&&(X>=m&&($.wordWrap===!1||$.trim===!1)&&(Y.push(""),X=0),(X>0||$.trim===!1)&&(Y[Y.length-1]+=" ",X++)),$.hard&&b[S]>m){let N=m-X,g=1+Math.floor((b[S]-N-1)/m);Math.floor((b[S]-1)/m)<g&&Y.push(""),n(Y,q,m);continue}if(X+b[S]>m&&X>0&&b[S]>0){if($.wordWrap===!1&&X<m){n(Y,q,m);continue}Y.push("")}if(X+b[S]>m&&$.wordWrap===!1){n(Y,q,m);continue}Y[Y.length-1]+=q}$.trim!==!1&&(Y=Y.map((S)=>Cb(S)));let K=[...Y.join(`
|
|
3
|
+
`)];for(let[S,q]of K.entries()){if(I+=q,E.has(q)){let{groups:N}=new RegExp(`(?:\\${h1}(?<code>\\d+)m|\\${F}(?<uri>.*)${i})`).exec(K.slice(S).join(""))||{groups:{}};if(N.code!==void 0){let g=Number.parseFloat(N.code);B=g===zb?void 0:g}else N.uri!==void 0&&(G=N.uri.length===0?void 0:N.uri)}let X=wb.codes.get(Number(B));K[S+1]===`
|
|
4
|
+
`?(G&&(I+=f1("")),B&&X&&(I+=Z1(X))):q===`
|
|
5
|
+
`&&(B&&X&&(I+=Z1(B)),G&&(I+=f1(G)))}return I};function C1(x,m,$){return String(x).normalize().replace(/\r\n/g,`
|
|
6
6
|
`).split(`
|
|
7
|
-
`).map((
|
|
8
|
-
`)}var
|
|
9
|
-
`),m
|
|
10
|
-
`),
|
|
11
|
-
`),
|
|
12
|
-
`).length-1;this.output.write(
|
|
13
|
-
`);this.output.write(
|
|
14
|
-
`).slice(
|
|
15
|
-
`)),this._prevFrame=x;return}this.output.write(
|
|
16
|
-
${
|
|
17
|
-
|
|
18
|
-
${
|
|
19
|
-
${
|
|
20
|
-
`;case"submit":return`${
|
|
21
|
-
${
|
|
22
|
-
${
|
|
23
|
-
`}}}).prompt();var
|
|
24
|
-
${
|
|
25
|
-
`,
|
|
26
|
-
${
|
|
27
|
-
${
|
|
28
|
-
`}}}).prompt()}
|
|
29
|
-
${q1(this.state)} ${x.message}
|
|
30
|
-
`;switch(this.state){case"submit":return`${B}${H.default.gray(Y)} ${$(this.options[this.cursor],"selected")}`;case"cancel":return`${B}${H.default.gray(Y)} ${$(this.options[this.cursor],"cancelled")}
|
|
31
|
-
${H.default.gray(Y)}`;default:return`${B}${H.default.cyan(Y)} ${X9({cursor:this.cursor,options:this.options,maxItems:x.maxItems,style:(m,I)=>$(m,I?"active":"inactive")}).join(`
|
|
32
|
-
${H.default.cyan(Y)} `)}
|
|
33
|
-
${H.default.cyan(h)}
|
|
34
|
-
`}}}).prompt()};var z1=(x="")=>{process.stdout.write(`${H.default.gray(h)} ${H.default.red(x)}
|
|
7
|
+
`).map((I)=>Nb(I,m,$)).join(`
|
|
8
|
+
`)}var Rb=["up","down","left","right","space","enter","cancel"],v={actions:new Set(Rb),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function s(x,m){if(typeof x=="string")return v.aliases.get(x)===m;for(let $ of x)if($!==void 0&&s($,m))return!0;return!1}function Ub(x,m){if(x===m)return;let $=x.split(`
|
|
9
|
+
`),I=m.split(`
|
|
10
|
+
`),B=[];for(let G=0;G<Math.max($.length,I.length);G++)$[G]!==I[G]&&B.push(G);return B}var Vb=globalThis.process.platform.startsWith("win"),r=Symbol("clack:cancel");function t(x){return x===r}function j(x,m){let $=x;$.isTTY&&$.setRawMode(m)}function A1({input:x=N1,output:m=R1,overwrite:$=!0,hideCursor:I=!0}={}){let B=U.createInterface({input:x,output:m,prompt:"",tabSize:1});U.emitKeypressEvents(x,B),x.isTTY&&x.setRawMode(!0);let G=(b,{name:Y,sequence:K})=>{let S=String(b);if(s([S,Y,K],"cancel")){I&&m.write(w.cursor.show),process.exit(0);return}if(!$)return;U.moveCursor(m,Y==="return"?0:-1,Y==="return"?-1:0,()=>{U.clearLine(m,1,()=>{x.once("keypress",G)})})};return I&&m.write(w.cursor.hide),x.once("keypress",G),()=>{x.off("keypress",G),I&&m.write(w.cursor.show),x.isTTY&&!Vb&&x.setRawMode(!1),B.terminal=!1,B.close()}}var gb=Object.defineProperty,Ob=(x,m,$)=>(m in x)?gb(x,m,{enumerable:!0,configurable:!0,writable:!0,value:$}):x[m]=$,f=(x,m,$)=>(Ob(x,typeof m!="symbol"?m+"":m,$),$);class u{constructor(x,m=!0){f(this,"input"),f(this,"output"),f(this,"_abortSignal"),f(this,"rl"),f(this,"opts"),f(this,"_render"),f(this,"_track",!1),f(this,"_prevFrame",""),f(this,"_subscribers",new Map),f(this,"_cursor",0),f(this,"state","initial"),f(this,"error",""),f(this,"value");let{input:$=N1,output:I=R1,render:B,signal:G,...b}=x;this.opts=b,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=B.bind(this),this._track=m,this._abortSignal=G,this.input=$,this.output=I}unsubscribe(){this._subscribers.clear()}setSubscriber(x,m){let $=this._subscribers.get(x)??[];$.push(m),this._subscribers.set(x,$)}on(x,m){this.setSubscriber(x,{cb:m})}once(x,m){this.setSubscriber(x,{cb:m,once:!0})}emit(x,...m){let $=this._subscribers.get(x)??[],I=[];for(let B of $)B.cb(...m),B.once&&I.push(()=>$.splice($.indexOf(B),1));for(let B of I)B()}prompt(){return new Promise((x,m)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),x(r);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let $=new Gb(0);$._write=(I,B,G)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),G()},this.input.pipe($),this.rl=X1.createInterface({input:this.input,output:$,tabSize:2,prompt:"",escapeCodeTimeout:50}),X1.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),j(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(w.cursor.show),this.output.off("resize",this.render),j(this.input,!1),x(this.value)}),this.once("cancel",()=>{this.output.write(w.cursor.show),this.output.off("resize",this.render),j(this.input,!1),x(r)})})}onKeypress(x,m){if(this.state==="error"&&(this.state="active"),m?.name&&(!this._track&&v.aliases.has(m.name)&&this.emit("cursor",v.aliases.get(m.name)),v.actions.has(m.name)&&this.emit("cursor",m.name)),x&&(x.toLowerCase()==="y"||x.toLowerCase()==="n")&&this.emit("confirm",x.toLowerCase()==="y"),x==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),x&&this.emit("key",x.toLowerCase()),m?.name==="return"){if(this.opts.validate){let $=this.opts.validate(this.value);$&&(this.error=$ instanceof Error?$.message:$,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}s([x,m?.name,m?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
11
|
+
`),j(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let x=C1(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
|
|
12
|
+
`).length-1;this.output.write(w.cursor.move(-999,x*-1))}render(){let x=C1(this._render(this)??"",process.stdout.columns,{hard:!0});if(x!==this._prevFrame){if(this.state==="initial")this.output.write(w.cursor.hide);else{let m=Ub(this._prevFrame,x);if(this.restoreCursor(),m&&m?.length===1){let $=m[0];this.output.write(w.cursor.move(0,$)),this.output.write(w.erase.lines(1));let I=x.split(`
|
|
13
|
+
`);this.output.write(I[$]),this._prevFrame=x,this.output.write(w.cursor.move(0,I.length-$-1));return}if(m&&m?.length>1){let $=m[0];this.output.write(w.cursor.move(0,$)),this.output.write(w.erase.down());let I=x.split(`
|
|
14
|
+
`).slice($);this.output.write(I.join(`
|
|
15
|
+
`)),this._prevFrame=x;return}this.output.write(w.erase.down())}this.output.write(x),this.state==="initial"&&(this.state="active"),this._prevFrame=x}}}class e extends u{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(x){super(x,!1),this.value=!!x.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(m)=>{this.output.write(w.cursor.move(0,-1)),this.value=m,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}class D extends u{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}█`;let x=this.value.slice(0,this.cursor),[m,...$]=this.value.slice(this.cursor);return`${x}${U1.default.inverse(m)}${$.join("")}`}get cursor(){return this._cursor}constructor(x){super(x),this.on("finalize",()=>{this.value||(this.value=x.defaultValue)})}}var J=A(L(),1),y=A(o(),1);import C from"node:process";function hb(){return C.platform!=="win32"?C.env.TERM!=="linux":!!C.env.CI||!!C.env.WT_SESSION||!!C.env.TERMINUS_SUBLIME||C.env.ConEmuTask==="{cmd::Cmder}"||C.env.TERM_PROGRAM==="Terminus-Sublime"||C.env.TERM_PROGRAM==="vscode"||C.env.TERM==="xterm-256color"||C.env.TERM==="alacritty"||C.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var b1=hb(),Q=(x,m)=>b1?x:m,kb=Q("◆","*"),T1=Q("■","x"),_1=Q("▲","x"),x1=Q("◇","o"),Ab=Q("┌","T"),z=Q("│","|"),P=Q("└","—"),M1=Q("●",">"),P1=Q("○"," "),Sx=Q("◻","[•]"),Wx=Q("◼","[+]"),Hx=Q("◻","[ ]"),Qx=Q("▪","•"),Xx=Q("─","-"),qx=Q("╮","+"),wx=Q("├","+"),zx=Q("╯","+"),Mb=Q("●","•"),Pb=Q("◆","*"),Tb=Q("▲","!"),_b=Q("■","x"),L1=(x)=>{switch(x){case"initial":case"active":return J.default.cyan(kb);case"cancel":return J.default.red(T1);case"error":return J.default.yellow(_1);case"submit":return J.default.green(x1)}};var j1=(x)=>new D({validate:x.validate,placeholder:x.placeholder,defaultValue:x.defaultValue,initialValue:x.initialValue,render(){let m=`${J.default.gray(z)}
|
|
16
|
+
${L1(this.state)} ${x.message}
|
|
17
|
+
`,$=x.placeholder?J.default.inverse(x.placeholder[0])+J.default.dim(x.placeholder.slice(1)):J.default.inverse(J.default.hidden("_")),I=this.value?this.valueWithCursor:$;switch(this.state){case"error":return`${m.trim()}
|
|
18
|
+
${J.default.yellow(z)} ${I}
|
|
19
|
+
${J.default.yellow(P)} ${J.default.yellow(this.error)}
|
|
20
|
+
`;case"submit":return`${m}${J.default.gray(z)} ${J.default.dim(this.value||x.placeholder)}`;case"cancel":return`${m}${J.default.gray(z)} ${J.default.strikethrough(J.default.dim(this.value??""))}${this.value?.trim()?`
|
|
21
|
+
${J.default.gray(z)}`:""}`;default:return`${m}${J.default.cyan(z)} ${I}
|
|
22
|
+
${J.default.cyan(P)}
|
|
23
|
+
`}}}).prompt();var v1=(x)=>{let m=x.active??"Yes",$=x.inactive??"No";return new e({active:m,inactive:$,initialValue:x.initialValue??!0,render(){let I=`${J.default.gray(z)}
|
|
24
|
+
${L1(this.state)} ${x.message}
|
|
25
|
+
`,B=this.value?m:$;switch(this.state){case"submit":return`${I}${J.default.gray(z)} ${J.default.dim(B)}`;case"cancel":return`${I}${J.default.gray(z)} ${J.default.strikethrough(J.default.dim(B))}
|
|
26
|
+
${J.default.gray(z)}`;default:return`${I}${J.default.cyan(z)} ${this.value?`${J.default.green(M1)} ${m}`:`${J.default.dim(P1)} ${J.default.dim(m)}`} ${J.default.dim("/")} ${this.value?`${J.default.dim(P1)} ${J.default.dim($)}`:`${J.default.green(M1)} ${$}`}
|
|
27
|
+
${J.default.cyan(P)}
|
|
28
|
+
`}}}).prompt()};var m1=(x="")=>{process.stdout.write(`${J.default.gray(P)} ${J.default.red(x)}
|
|
35
29
|
|
|
36
|
-
`)},
|
|
37
|
-
`)},
|
|
38
|
-
${
|
|
30
|
+
`)},E1=(x="")=>{process.stdout.write(`${J.default.gray(Ab)} ${x}
|
|
31
|
+
`)},y1=(x="")=>{process.stdout.write(`${J.default.gray(z)}
|
|
32
|
+
${J.default.gray(P)} ${x}
|
|
39
33
|
|
|
40
|
-
`)},
|
|
41
|
-
`)
|
|
34
|
+
`)},V={message:(x="",{symbol:m=J.default.gray(z)}={})=>{let $=[`${J.default.gray(z)}`];if(x){let[I,...B]=x.split(`
|
|
35
|
+
`);$.push(`${m} ${I}`,...B.map((G)=>`${J.default.gray(z)} ${G}`))}process.stdout.write(`${$.join(`
|
|
42
36
|
`)}
|
|
43
|
-
`)},info:(x)=>{
|
|
44
|
-
`);let
|
|
45
|
-
`);process.stdout.write(
|
|
46
|
-
`);let
|
|
47
|
-
`),
|
|
48
|
-
`,"utf-8")},
|
|
49
|
-
|
|
50
|
-
`,"utf-8")},Jb=(x)=>{let $=V(x,"apps/web/.env.example"),B=V(x,".env.example");if(N($))X1($,B)},C9={nextjs:".env.next","react-router":".env.router"},Xb=(x,$)=>{let B=["nextjs","react-router"];for(let m of B){if(m===$)continue;for(let I of t1[m]){let G=V(x,".cursor","rules",I);if(N(G))P(G,{force:!0})}}},Zb=(x,$)=>{let B=V(x,"tsconfig.base.json");if(!N(B))return;let m=L(B,"utf-8").replace(/,\s*([\]}])/g,"$1"),I=JSON.parse(m),b=I.compilerOptions.paths;if($==="api"){delete b["@/assets/*"],delete b["@/ui/*"],delete b["@/emails/*"],delete b["@/web/*"],delete b["@/router/*"];let Q=I.include;if(Q)I.include=Q.filter((z)=>!z.startsWith("./apps/nextjs/")&&!z.startsWith("./apps/react-router/")&&!z.startsWith("./apps/web/")&&!z.startsWith("./shared/assets/")&&!z.startsWith("./shared/ui/"))}else{if(b["@/web/*"])b["@/web/*"]=["./apps/web/src/*"];if($!=="react-router")delete b["@/router/*"];let Q=I.include;if(Q)I.include=Q.filter((z)=>!z.startsWith("./apps/nextjs/")&&!z.startsWith("./apps/react-router/"))}_(B,`${JSON.stringify(I,null,2)}
|
|
51
|
-
`,"utf-8")},Yb=(x)=>{let $=V(x,"shared","ui");if(N($))P($,{recursive:!0,force:!0})},Vb=(x)=>{let $=V(x,"shared","assets");if(N($))P($,{recursive:!0,force:!0})},Wb=(x)=>{let $=V(x,"emails");if(N($))P($,{recursive:!0,force:!0})},Kb=(x)=>{let $=V(x,"package.json"),B=JSON.parse(L($,"utf-8"));for(let m of Object.keys(J1.dependencies))delete B.dependencies?.[m];for(let m of Object.keys(J1.devDependencies))delete B.devDependencies?.[m];_($,`${JSON.stringify(B,null,2)}
|
|
52
|
-
`,"utf-8")},Cb=(x)=>{for(let $ of D1){let B=V(x,".cursor","rules",$);if(N(B))P(B,{force:!0})}},Nb=(x)=>{for(let $ of e1){let B=V(x,".cursor","agents","skills",$);if(N(B))P(B,{recursive:!0,force:!0})}},Ub=(x)=>{let $=V(x,"skills-lock.json");if(!N($))return;let B=JSON.parse(L($,"utf-8")),m=B.skills;if(m)for(let I of bb)delete m[I];_($,`${JSON.stringify(B,null,2)}
|
|
53
|
-
`,"utf-8")},Mb=(x,$,B)=>{let m=C9[B];if(!m)return;let I=V(x,m);if(N(I))X1(I,V($,".env.local"))};var Ob=T9(O9(import.meta.url)),Tb=V1(Ob,"../templates"),Y1=process.argv.includes("--local");async function A9(){if(console.log(),F1(`${J.default.bgMagenta(J.default.white("New Aron Project Template"))} ${J.default.dim("— Convex · Clerk · Nx")}`),Y1){let q=V1(Ob,"../test-app");if(N9(q))U9(q,{recursive:!0,force:!0});j.info(`${J.default.dim("--local")} mode — output → ${J.default.cyan(q)}`)}let x=await n1({framework:()=>c1({message:"Frontend framework",options:r1,initialValue:"nextjs"}),dir:()=>Y1?Promise.resolve("./test-app"):l1({message:"Where should we create it?",initialValue:"~/Desktop/my-app",placeholder:"~/Desktop/my-app",validate(q){if(!q?.trim())return"Directory is required";let W=(q??"").replace(/^~/,process.env.HOME??"~");if(!Bb(W))return`${J.default.cyan(q)} already exists and is not empty`}}),git:()=>Y1?Promise.resolve(!1):o1({message:"Initialize a git repository?",initialValue:!0})},{onCancel(){z1("Cancelled."),process.exit(0)}}),{framework:$}=x,B=x.dir.replace(/^~/,process.env.HOME??"~"),m=V1(B),I=M9(m),G=a();G.start("Copying template…");try{if(await mb(Tb,m),Ib(m,$),$!=="api")Gb(m,$),Hb(m,$);if(Qb(m,$),qb(m,$),Zb(m,$),Xb(m,$),zb(m,I),Z1(m),$!=="api")Jb(m),Mb(Tb,m,$);else Yb(m),Vb(m),Wb(m),Kb(m),Cb(m),Nb(m),Ub(m);G.stop("Template copied")}catch(q){G.stop("Failed"),z1(q instanceof Error?q.message:String(q)),process.exit(1)}if(x.git){let q=a();q.start("Initializing git…");try{E("git init",m),E("git branch -M main",m),E("git add -A",m),E('git commit -m "chore: initial commit from template"',m),q.stop("Git initialized")}catch{q.stop(J.default.yellow("Git init skipped"))}}let b=a();b.start("Installing dependencies with bun…");try{E("bun install",m),b.stop("Dependencies installed")}catch{b.stop(J.default.yellow(`Install failed — run ${J.default.cyan("bun install")} manually`))}let Q=B.startsWith(process.env.HOME??"~")?`cd ~/${B.slice((process.env.HOME??"").length+1)}`:`cd ${B}`,z=[`${J.default.green("✓")} Created ${J.default.cyan(I)} at ${J.default.dim(m)}`,"",` ${J.default.bold("Next steps:")}`,` ${J.default.dim("1.")} ${Q}`,` ${J.default.dim("2.")} Copy ${J.default.cyan(".env.example")} → ${J.default.cyan(".env.local")} and add your keys`,` ${J.default.dim("3.")} ${J.default.cyan("nx dev api")} ${J.default.dim("(Convex backend)")}`];if($!=="api"){let q=$==="nextjs"?"Next.js":"React Router";z.push(` ${J.default.dim("4.")} ${J.default.cyan("nx dev web")} ${J.default.dim(`(${q} frontend)`)}`)}z.push("",` ${J.default.dim("Docs:")} ${J.default.underline("https://docs.convex.dev")} · ${J.default.underline("https://clerk.com/docs")}`),a1(z.join(`
|
|
54
|
-
`))}A9().catch((x)=>{console.error(x),process.exit(1)});
|
|
37
|
+
`)},info:(x)=>{V.message(x,{symbol:J.default.blue(Mb)})},success:(x)=>{V.message(x,{symbol:J.default.green(Pb)})},step:(x)=>{V.message(x,{symbol:J.default.green(x1)})},warn:(x)=>{V.message(x,{symbol:J.default.yellow(Tb)})},warning:(x)=>{V.warn(x)},error:(x)=>{V.message(x,{symbol:J.default.red(_b)})}},l=()=>{let x=b1?["◒","◐","◓","◑"]:["•","o","O","0"],m=b1?80:120,$=process.env.CI==="true",I,B,G=!1,b="",Y,K=(Z)=>{let R=Z>1?"Something went wrong":"Canceled";G&&Y1(R,Z)},S=()=>K(2),q=()=>K(1),X=()=>{process.on("uncaughtExceptionMonitor",S),process.on("unhandledRejection",S),process.on("SIGINT",q),process.on("SIGTERM",q),process.on("exit",K)},N=()=>{process.removeListener("uncaughtExceptionMonitor",S),process.removeListener("unhandledRejection",S),process.removeListener("SIGINT",q),process.removeListener("SIGTERM",q),process.removeListener("exit",K)},g=()=>{if(Y===void 0)return;$&&process.stdout.write(`
|
|
38
|
+
`);let Z=Y.split(`
|
|
39
|
+
`);process.stdout.write(y.cursor.move(-999,Z.length-1)),process.stdout.write(y.erase.down(Z.length))},d=(Z)=>Z.replace(/\.+$/,""),F1=(Z="")=>{G=!0,I=A1(),b=d(Z),process.stdout.write(`${J.default.gray(z)}
|
|
40
|
+
`);let R=0,h=0;X(),B=setInterval(()=>{if($&&b===Y)return;g(),Y=b;let s1=J.default.magenta(x[R]),t1=$?"...":".".repeat(Math.floor(h)).slice(0,3);process.stdout.write(`${s1} ${b}${t1}`),R=R+1<x.length?R+1:0,h=h<x.length?h+0.125:0},m)},Y1=(Z="",R=0)=>{G=!1,clearInterval(B),g();let h=R===0?J.default.green(x1):R===1?J.default.red(T1):J.default.red(_1);b=d(Z??b),process.stdout.write(`${h} ${b}
|
|
41
|
+
`),N(),I()};return{start:F1,stop:Y1,message:(Z="")=>{b=d(Z??b)}}},l1=async(x,m)=>{let $={},I=Object.keys(x);for(let B of I){let G=x[B],b=await G({results:$})?.catch((Y)=>{throw Y});if(typeof m?.onCancel=="function"&&t(b)){$[B]="canceled",m.onCancel({results:$});continue}$[B]=b}return $};var W=A(L(),1);import{execSync as jb}from"node:child_process";import{cpSync as $1,existsSync as I1,readdirSync as d1,readFileSync as vb,renameSync as Eb,writeFileSync as yb}from"node:fs";import{basename as lb,join as O}from"node:path";import{downloadTemplate as db}from"giget";var pb=new Set(["node_modules",".git",".nx",".next","dist","build",".turbo","_base",".env.local",".env.next",".env.router",".env.convex"]),p1=(x)=>{return!I1(x)||d1(x).length===0},k=(x,m)=>{jb(x,{cwd:m,stdio:"ignore"})},ob=(x,m)=>{$1(x,m,{recursive:!0,filter:($)=>!pb.has(lb($))})},o1=async(x,m)=>{if(x.startsWith("/")||x.startsWith("./")||x.startsWith("../"))ob(x,m);else await db(x,{dir:m,forceClean:!1})},B1=(x)=>{let m=d1(x,{withFileTypes:!0});for(let $ of m){let I=O(x,$.name);if($.isDirectory())B1(I);else if($.isFile()&&$.name==="_gitignore")Eb(I,O(x,".gitignore"))}},a1=(x,m)=>{let $=O(x,"package.json"),I=JSON.parse(vb($,"utf-8"));I.name=m,yb($,`${JSON.stringify(I,null,2)}
|
|
42
|
+
`,"utf-8")},c1=(x)=>{let m=O(x,"apps/react-router/.env.example"),$=O(x,".env.example");if(I1(m))$1(m,$)},n1=(x,m)=>{let $=O(x,".env.router");if(I1($))$1($,O(m,".env.local"))};var i1=rb(ib(import.meta.url)),r1=J1(i1,"../templates"),G1=process.argv.includes("--local");async function Fb(){if(console.log(),E1(`${W.default.bgMagenta(W.default.white("New Aron Project Template"))} ${W.default.dim("— Convex · Clerk · React Router v7")}`),G1){let K=J1(i1,"../test-app");if(ab(K))cb(K,{recursive:!0,force:!0});V.info(`${W.default.dim("--local")} mode — output → ${W.default.cyan(K)}`)}let x=await l1({dir:()=>G1?Promise.resolve("./test-app"):j1({message:"Where should we create it?",initialValue:"~/Desktop/my-app",placeholder:"~/Desktop/my-app",validate(K){if(!K?.trim())return"Directory is required";let S=(K??"").replace(/^~/,process.env.HOME??"~");if(!p1(S))return`${W.default.cyan(K)} already exists and is not empty`}}),git:()=>G1?Promise.resolve(!1):v1({message:"Initialize a git repository?",initialValue:!0})},{onCancel(){m1("Cancelled."),process.exit(0)}}),m=x.dir.replace(/^~/,process.env.HOME??"~"),$=J1(m),I=nb($),B=l();B.start("Copying template…");try{await o1(r1,$),B1($),a1($,I),c1($),n1(r1,$),B.stop("Template copied")}catch(K){B.stop("Failed"),m1(K instanceof Error?K.message:String(K)),process.exit(1)}if(x.git){let K=l();K.start("Initializing git…");try{k("git init",$),k("git branch -M main",$),k("git add -A",$),k('git commit -m "chore: initial commit from template"',$),K.stop("Git initialized")}catch{K.stop(W.default.yellow("Git init skipped"))}}let G=l();G.start("Installing dependencies with bun…");try{k("bun install",$),G.stop("Dependencies installed")}catch{G.stop(W.default.yellow(`Install failed — run ${W.default.cyan("bun install")} manually`))}let b=m.startsWith(process.env.HOME??"~")?`cd ~/${m.slice((process.env.HOME??"").length+1)}`:`cd ${m}`,Y=[`${W.default.green("✓")} Created ${W.default.cyan(I)} at ${W.default.dim($)}`,"",` ${W.default.bold("Next steps:")}`,` ${W.default.dim("1.")} ${b}`,` ${W.default.dim("2.")} Copy ${W.default.cyan(".env.example")} → ${W.default.cyan(".env.local")} and add your keys`,` ${W.default.dim("3.")} ${W.default.cyan("nx dev api")} ${W.default.dim("(Convex backend)")}`,` ${W.default.dim("4.")} ${W.default.cyan("nx dev react-router")} ${W.default.dim("(React Router v7 frontend)")}`,"",` ${W.default.dim("Docs:")} ${W.default.underline("https://docs.convex.dev")} · ${W.default.underline("https://clerk.com/docs")}`];y1(Y.join(`
|
|
43
|
+
`))}Fb().catch((x)=>{console.error(x),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-aron-app",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Scaffold a new Convex +
|
|
3
|
+
"version": "0.1.8",
|
|
4
|
+
"description": "Scaffold a new Convex + React Router + Clerk full-stack project",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"create",
|
|
37
37
|
"template",
|
|
38
38
|
"convex",
|
|
39
|
-
"
|
|
39
|
+
"react-router",
|
|
40
40
|
"clerk",
|
|
41
41
|
"nx",
|
|
42
42
|
"monorepo"
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Convex backend in apps/api — ents, zQuery/zMutation, CRUD layout, auth, and platform conventions that apply alongside project wrappers.
|
|
3
|
+
globs: templates/apps/api/**/*.ts,apps/api/**/*.ts
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Backend API (`apps/api`)
|
|
8
|
+
|
|
9
|
+
Convex backend using **convex-ents**, **`zQuery` / `zMutation`** from `@/api/functions`, and **Zod** (`z.*`, `zid()`) for public function args — not raw `v.*` validators on public handlers.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Layout
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
apps/api/
|
|
17
|
+
├── <entity>/
|
|
18
|
+
│ ├── schema.ts # ent definition (table + edges + indexes)
|
|
19
|
+
│ ├── types.ts # Zod schemas + TS types
|
|
20
|
+
│ └── crud.ts # queries/mutations (GET → UPDATE → CREATE → DELETE)
|
|
21
|
+
├── schema.ts # spreads all entity ents
|
|
22
|
+
├── types.ts # shared context types
|
|
23
|
+
├── functions.ts # zQuery / zMutation wrappers
|
|
24
|
+
└── auth.config.ts # JWT providers (required for ctx.auth)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Example entity (`todos/`): `schema.ts`, `types.ts`, `crud.ts`.
|
|
28
|
+
|
|
29
|
+
### New entity checklist
|
|
30
|
+
|
|
31
|
+
1. Add `apps/api/<entity>/schema.ts` → export `<entity>Ents`
|
|
32
|
+
2. Add `types.ts` — Zod input/output shapes
|
|
33
|
+
3. Add `crud.ts` — `zQuery` / `zMutation` handlers
|
|
34
|
+
4. Spread ents in `apps/api/schema.ts` via `defineEntSchema`
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Schema (`schema.ts` per entity)
|
|
39
|
+
|
|
40
|
+
- Export `{ tableName: defineEnt({...}).edge(...).index(...) }`
|
|
41
|
+
- Index names include all indexed fields, e.g. `by_user_id`
|
|
42
|
+
- Prefer **indexes** for lookups; avoid unbounded `filter` scans in production code
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Types (`types.ts`)
|
|
47
|
+
|
|
48
|
+
- Zod schemas and inferred types live here, not in ent schema files
|
|
49
|
+
- Use `zodToConvex` from convex-helpers when bridging Zod → Convex validators
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## CRUD (`crud.ts`)
|
|
54
|
+
|
|
55
|
+
Order functions: **GET → UPDATE → CREATE → DELETE**.
|
|
56
|
+
|
|
57
|
+
- Authenticate with `ctx.auth.getUserIdentity()`; resolve the app user as your schema requires
|
|
58
|
+
- **Never** take `userId` from the client for authorization — derive from auth context
|
|
59
|
+
- Prefer **`identity.tokenIdentifier`** for stable auth-linked lookups (not `subject` alone)
|
|
60
|
+
- Use **`ConvexError`** for business errors; messages stay concise
|
|
61
|
+
- For expected present/missing entity semantics: **`getX` / `get`**, **`uniqueX` / `unique`** — no redundant null checks after `getX`
|
|
62
|
+
|
|
63
|
+
### Ent helpers
|
|
64
|
+
|
|
65
|
+
| API | Use when |
|
|
66
|
+
|-----|----------|
|
|
67
|
+
| `getX(id)` | Row must exist |
|
|
68
|
+
| `get(id)` | Row may be missing |
|
|
69
|
+
| `uniqueX` / `firstX` | Index query must yield exactly one / at least one |
|
|
70
|
+
|
|
71
|
+
### Edge patterns
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
const related = await entity.edge("relatedEntity");
|
|
75
|
+
return { ...entity, related };
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Standard update:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const { entityId, ...updates } = args;
|
|
82
|
+
const entity = await ctx.table("entities").getX(entityId);
|
|
83
|
+
return entity.patch(updates);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Documentation style
|
|
89
|
+
|
|
90
|
+
- **No** JSDoc on every exported function — names should read clearly
|
|
91
|
+
- **Only** inline comments for non-obvious business rules
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Convex platform notes (template-wide)
|
|
96
|
+
|
|
97
|
+
These apply to any `query`/`mutation`/`action` code; **this repo’s public API should still use `zQuery`/`zMutation`** per above.
|
|
98
|
+
|
|
99
|
+
- Register **internal** functions with `internalQuery` / `internalMutation` / `internalAction` — never expose sensitive ops as public `query`/`mutation`
|
|
100
|
+
- **Actions**: add `"use node"` only in files that need Node builtins; **never** mix `"use node"` with queries/mutations in the same file
|
|
101
|
+
- **Pagination**: use `paginationOptsValidator` and `.paginate()` for large lists — avoid unbounded `.collect()` on big tables
|
|
102
|
+
- **Scheduling**: only schedule **internal** function references
|
|
103
|
+
- **Queries**: do not use `Date.now()` in query logic if it should be reactive/cached predictably
|
|
104
|
+
- **DB**: no `.collect().length` for counts at scale — denormalize or bound reads
|
|
105
|
+
|
|
106
|
+
For HTTP routes in Convex, use `httpRouter` + `httpAction` and register exact paths.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Client imports
|
|
111
|
+
|
|
112
|
+
Frontend code imports **`Doc` / `Id`** only through per-entity **`types.ts` aliases** (e.g. `Todo`, `TodoId`). Do not use `Ent<T>` outside the backend.
|