@stacksjs/rpx 0.9.1 → 0.11.0

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/dist/config.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { ReverseProxyConfig } from './types';
2
-
3
- export declare const defaultConfig: ReverseProxyConfig;
4
- export declare const config: ReverseProxyConfig;
1
+ import type { ProxyConfig } from './types';
2
+ export declare function getConfig(): Promise<ProxyConfig>;
3
+ export declare const defaultConfig: ProxyConfig;
4
+ // For backwards compatibility - synchronous access with default fallback
5
+ export declare const config: ProxyConfig;
package/dist/dns.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Start the DNS server
3
+ */
4
+ export declare function startDnsServer(domains: string[], verbose?: boolean): Promise<boolean>;
5
+ /**
6
+ * Stop the DNS server
7
+ */
8
+ export declare function stopDnsServer(verbose?: boolean): void;
9
+ /**
10
+ * Check if DNS server is running
11
+ */
12
+ export declare function isDnsServerRunning(): boolean;
13
+ /**
14
+ * Set up the macOS resolver for configured domains
15
+ * Creates /etc/resolver/<tld> files pointing to our local DNS server
16
+ */
17
+ export declare function setupResolver(verbose?: boolean, domains?: string[]): Promise<boolean>;
18
+ /**
19
+ * Remove the macOS resolver files we created
20
+ */
21
+ export declare function removeResolver(verbose?: boolean): Promise<void>;
package/dist/hosts.d.ts CHANGED
@@ -1,6 +1,4 @@
1
- declare const execAsync: unknown;
2
- export declare const hostsFilePath: string;
3
- declare function execSudo(command: string): Promise<void>;
4
1
  export declare function addHosts(hosts: string[], verbose?: boolean): Promise<void>;
5
2
  export declare function removeHosts(hosts: string[], verbose?: boolean): Promise<void>;
6
- export declare function checkHosts(hosts: string[], verbose?: boolean): Promise<boolean[]>;
3
+ export declare function checkHosts(hosts: string[], verbose?: boolean): Promise<boolean[]>;
4
+ export declare const hostsFilePath: string;
package/dist/https.d.ts CHANGED
@@ -1,12 +1,39 @@
1
- import type { ReverseProxyConfigs, ReverseProxyOption, ReverseProxyOptions, TlsConfig } from './types';
2
-
3
- export declare function resolveSSLPaths(options: ReverseProxyConfigs, defaultConfig: typeof config): TlsConfig;
1
+ import { config } from './config';
2
+ import type { ProxyConfigs, ProxyOption, ProxyOptions, SSLConfig, TlsConfig } from './types';
3
+ /**
4
+ * Resolves SSL paths based on configuration
5
+ */
6
+ export declare function resolveSSLPaths(options: ProxyConfigs, defaultConfig: typeof config): TlsConfig;
7
+ // Generate wildcard patterns for a domain
4
8
  export declare function generateWildcardPatterns(domain: string): string[];
5
- export declare function generateSSLPaths(options?: ReverseProxyOptions): void;
6
- export declare function getAllDomains(options: ReverseProxyOption | ReverseProxyOptions): Set<string>;
7
- export declare function loadSSLConfig(options: ReverseProxyOption): Promise<SSLConfig | null>;
8
- export declare function generateCertificate(options: ReverseProxyOptions): Promise<void>;
9
- export declare function getSSLConfig(): void;
10
- export declare function checkExistingCertificates(options?: ReverseProxyOptions): Promise<SSLConfig | null>;
11
- export declare function httpsConfig(options: ReverseProxyOption | ReverseProxyOptions, verbose?: boolean): TlsConfig;
12
- export declare function cleanupCertificates(domain: string, verbose?: boolean): Promise<void>;
9
+ /**
10
+ * Generates SSL file paths based on domain
11
+ */
12
+ export declare function generateSSLPaths(options?: ProxyOptions): {
13
+ caCertPath: string
14
+ certPath: string
15
+ keyPath: string
16
+ };
17
+ export declare function getAllDomains(options: ProxyOption | ProxyOptions): Set<string>;
18
+ /**
19
+ * Load SSL certificates from files or use provided strings
20
+ */
21
+ export declare function loadSSLConfig(options: ProxyOption): Promise<SSLConfig | null>;
22
+ /**
23
+ * Force trust a certificate - exposing for direct use
24
+ */
25
+ export declare function forceTrustCertificate(certPath: string): Promise<boolean>;
26
+ export declare function generateCertificate(options: ProxyOptions): Promise<void>;
27
+ export declare function getSSLConfig(): { key: string, cert: string, ca?: string } | null;
28
+ // needs to accept the options
29
+ export declare function checkExistingCertificates(options?: ProxyOptions): Promise<SSLConfig | null>;
30
+ export declare function httpsConfig(options: ProxyOption | ProxyOptions, verbose?: boolean): TlsConfig;
31
+ /**
32
+ * Clean up SSL certificates for a specific domain
33
+ */
34
+ export declare function cleanupCertificates(domain: string, verbose?: boolean): Promise<void>;
35
+ /**
36
+ * Checks if a certificate is trusted by the system (macOS only for now)
37
+ * If options.regenerateUntrustedCerts is false, always returns true (skips trust check)
38
+ */
39
+ export declare function isCertTrusted(certPath: string, options?: { verbose?: boolean, regenerateUntrustedCerts?: boolean }): Promise<boolean>;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,21 @@
1
- import { startProxies } from './start';
2
-
3
-
4
- export { config } from './config'
5
-
6
- export * from './hosts'
7
- export * from './https'
8
- export * from './start'
9
- export * from './types'
10
- export * from './utils'
11
-
12
- export default startProxies;
1
+ export { config, config as defaultConfig } from './config';
2
+ export {
3
+ addHosts,
4
+ checkHosts,
5
+ removeHosts,
6
+ } from './hosts';
7
+ export {
8
+ checkExistingCertificates,
9
+ cleanupCertificates,
10
+ forceTrustCertificate,
11
+ generateCertificate,
12
+ httpsConfig,
13
+ isCertTrusted,
14
+ loadSSLConfig,
15
+ } from './https';
16
+ export { DefaultPortManager, findAvailablePort, isPortInUse, portManager } from './port-manager';
17
+ export { cleanup } from './start';
18
+ export { startProxies, startProxy, startServer } from './start';
19
+ export * from './types';
20
+ export * from './utils';
21
+ export default startProxiesFunc;
@@ -0,0 +1,10 @@
1
+ export declare const log: {
2
+ info: (...args: any[]) => void
3
+ success: (...args: any[]) => void
4
+ warn: (...args: any[]) => void
5
+ error: (...args: any[]) => void
6
+ debug: (...args: any[]) => void
7
+ log: (...args: any[]) => void
8
+ start: (...args: any[]) => void
9
+ box: (...args: any[]) => void
10
+ };
@@ -0,0 +1,25 @@
1
+ import type { PortManager } from './types';
2
+ /**
3
+ * Check if a port is in use
4
+ */
5
+ export declare function isPortInUse(port: number, hostname: string, verbose?: boolean): Promise<boolean>;
6
+ /**
7
+ * Find next available port
8
+ */
9
+ export declare function findAvailablePort(startPort: number, hostname: string, verbose?: boolean, maxAttempts?: any): Promise<number>;
10
+ /**
11
+ * Test if a port is actually connectable
12
+ */
13
+ export declare function testPortConnectivity(port: number, hostname: string, timeout?: any, verbose?: boolean): Promise<boolean>;
14
+ // Global port manager instance
15
+ export declare const portManager: DefaultPortManager;
16
+ export declare class DefaultPortManager implements PortManager {
17
+ usedPorts: Set<number>;
18
+ private hostname: string;
19
+ private verbose?: boolean;
20
+ private maxRetries: number;
21
+ constructor(hostname?: string, verbose?: boolean, maxRetries?: any);
22
+ getNextAvailablePort(startPort: number, testConnectivity?: any): Promise<number>;
23
+ private findNextAvailablePort(startPort: number, testConnectivity?: any): Promise<number>;
24
+ releasePort(port: number): void;
25
+ }
@@ -0,0 +1,17 @@
1
+ import type { ChildProcess } from 'node:child_process';
2
+ import type { StartOptions } from './types';
3
+ export declare const processManager: ProcessManager;
4
+ export declare interface ManagedProcess {
5
+ command: string
6
+ cwd: string
7
+ process: ChildProcess | null
8
+ env?: Record<string, string>
9
+ }
10
+ export declare class ProcessManager {
11
+ private processes: Map<string, ManagedProcess>;
12
+ private isShuttingDown: any;
13
+ startProcess(id: string, options: StartOptions, verbose?: boolean): Promise<void>;
14
+ stopProcess(id: string, verbose?: boolean): Promise<void>;
15
+ stopAll(verbose?: boolean): Promise<void>;
16
+ isRunning(id: string): boolean;
17
+ }
package/dist/src/index.js CHANGED
@@ -1 +1 @@
1
- import{A as R,B as S,C as T,D as o,b as r,c as j,d as k,e as n,f as q,g as v,h as w,i as y,j as z,k as A,l as B,m as C,n as D,o as E,p as F,q as G,r as H,s as I,t as J,u as K,v as L,w as M,x as N,y as O,z as Q}from"../chunk-wn28gp4d.js";import"../chunk-en36kajt.js";import"../chunk-2y0c08hn.js";import"../chunk-e794mmrn.js";var i=o;export{Q as startServer,T as startProxy,o as startProxies,S as startHttpRedirectServer,R as setupReverseProxy,z as safeDeleteFile,E as resolveSSLPaths,C as removeHosts,I as loadSSLConfig,n as isValidRootCA,y as isSingleProxyOptions,w as isMultiProxyOptions,v as isMultiProxyConfig,M as httpsConfig,A as hostsFilePath,K as getSSLConfig,q as getPrimaryDomain,H as getAllDomains,F as generateWildcardPatterns,G as generateSSLPaths,J as generateCertificate,k as extractHostname,i as default,j as debugLog,r as config,N as cleanupCertificates,O as cleanup,D as checkHosts,L as checkExistingCertificates,B as addHosts};
1
+ import{b as o,c as t,d as e,e as f,f as a,g as i,h as s,i as p,j as c,k as x,l as n,m,n as g,o as C,p as P,r as l,s as d,t as u,u as r}from"../chunk-szmp12hh.js";import"../chunk-b6654twv.js";import{C as L,D as U,E as j,F as q,G as z,H as B,I as G,J as I,K as J,L as K,M as N}from"../chunk-4csm61sj.js";import"../chunk-4960052z.js";var F=r;export{d as startServer,u as startProxy,r as startProxies,N as safeDeleteFile,e as removeHosts,P as portManager,a as loadSSLConfig,z as isValidRootCA,J as isSingleProxyOptions,K as isSingleProxyConfig,m as isPortInUse,I as isMultiProxyOptions,G as isMultiProxyConfig,n as isCertTrusted,c as httpsConfig,L as getSudoPassword,B as getPrimaryDomain,s as generateCertificate,i as forceTrustCertificate,g as findAvailablePort,q as extractHostname,U as execSudoSync,o as defaultConfig,F as default,j as debugLog,o as config,x as cleanupCertificates,l as cleanup,f as checkHosts,p as checkExistingCertificates,t as addHosts,C as DefaultPortManager};
package/dist/start.d.ts CHANGED
@@ -1,12 +1,10 @@
1
- import type { CleanupOptions, ProxySetupOptions, ReverseProxyOption, ReverseProxyOptions, SingleReverseProxyConfig } from './types';
2
-
3
- declare const activeServers: Set<http.Server | https.Server>;
1
+ import type { CleanupOptions, ProxyOption, ProxyOptions, ProxySetupOptions, SingleProxyConfig } from './types';
4
2
  export declare function cleanup(options?: CleanupOptions): Promise<void>;
5
- declare function isPortInUse(port: number, hostname: string, verbose?: boolean): Promise<boolean>;
6
- declare function findAvailablePort(startPort: number, hostname: string, verbose?: boolean): Promise<number>;
7
- declare function testConnection(hostname: string, port: number, verbose?: boolean): Promise<void>;
8
- export declare function startServer(options: SingleReverseProxyConfig): Promise<void>;
9
- export declare function setupReverseProxy(options: ProxySetupOptions): Promise<void>;
3
+ export declare function startServer(options: SingleProxyConfig): Promise<void>;
4
+ export declare function setupProxy(options: ProxySetupOptions): Promise<void>;
10
5
  export declare function startHttpRedirectServer(verbose?: boolean): void;
11
- export declare function startProxy(options: ReverseProxyOption): void;
12
- export declare function startProxies(options?: ReverseProxyOptions): Promise<void>;
6
+ export declare function startProxy(options: ProxyOption): void;
7
+ export declare function startProxies(options?: ProxyOptions): Promise<void>;
8
+ declare type AnyServerType = http.Server | https.Server | http2.Http2SecureServer
9
+ declare type AnyIncomingMessage = http.IncomingMessage | http2.Http2ServerRequest
10
+ declare type AnyServerResponse = http.ServerResponse | http2.Http2ServerResponse
package/dist/types.d.ts CHANGED
@@ -1,66 +1,61 @@
1
1
  import type { TlsConfig, TlsOption } from '@stacksjs/tlsx';
2
-
3
- export type { TlsConfig, TlsOption }
4
- export declare interface BaseReverseProxyConfig {
5
- from: string
6
- to: string
7
- cleanUrls: boolean
2
+ export type { TlsConfig, TlsOption };
3
+ export declare interface StartOptions {
4
+ command: string
5
+ cwd?: string
6
+ env?: Record<string, string>
8
7
  }
9
- export declare type BaseReverseProxyOptions = Partial<BaseReverseProxyConfig>
10
-
11
- export interface CleanupConfig {
12
- domains: string[]
13
- hosts: boolean
14
- certs: boolean
15
- verbose: boolean
8
+ export declare interface BaseProxyConfig {
9
+ from: string
10
+ to: string
11
+ start?: StartOptions
16
12
  }
17
-
18
- export type CleanupOptions = Partial<CleanupConfig>
19
-
20
- export interface SharedProxyConfig {
13
+ export declare interface CleanupConfig {
14
+ domains: string[]
15
+ hosts: boolean
16
+ certs: boolean
17
+ verbose: boolean
18
+ vitePluginUsage?: boolean
19
+ }
20
+ export declare interface SharedProxyConfig {
21
21
  https: boolean | TlsOption
22
22
  cleanup: boolean | CleanupOptions
23
23
  vitePluginUsage: boolean
24
24
  verbose: boolean
25
25
  _cachedSSLConfig?: SSLConfig | null
26
+ start?: StartOptions
27
+ cleanUrls: boolean
28
+ changeOrigin?: boolean
29
+ regenerateUntrustedCerts?: boolean
26
30
  }
27
- export type SharedProxyOptions = Partial<SharedProxyConfig>
31
+ export declare interface SingleProxyConfig extends BaseProxyConfig, SharedProxyConfig {
28
32
 
29
- export interface SingleReverseProxyConfig extends BaseReverseProxyConfig, SharedProxyConfig {}
30
- export interface MultiReverseProxyConfig extends SharedProxyConfig {
31
- proxies: BaseReverseProxyConfig[]
32
33
  }
33
- export type ReverseProxyConfig = SingleReverseProxyConfig
34
- export type ReverseProxyConfigs = SingleReverseProxyConfig | MultiReverseProxyConfig
35
-
36
- export type BaseReverseProxyOption = Partial<BaseReverseProxyConfig>
37
- export type ReverseProxyOption = Partial<SingleReverseProxyConfig>
38
- export type ReverseProxyOptions = Partial<SingleReverseProxyConfig> | Partial<MultiReverseProxyConfig>
39
-
40
- export interface SSLConfig {
34
+ export declare interface MultiProxyConfig extends SharedProxyConfig {
35
+ proxies: Array<BaseProxyConfig & { cleanUrls: boolean }>
36
+ }
37
+ export declare interface SSLConfig {
41
38
  key: string
42
39
  cert: string
43
40
  ca?: string | string[]
44
41
  }
45
-
46
- export interface ProxySetupOptions extends Omit<ReverseProxyOption, 'from'> {
42
+ export declare interface ProxySetupOptions extends Omit<ProxyOption, 'from'> {
47
43
  fromPort: number
48
44
  sourceUrl: Pick<URL, 'hostname' | 'host'>
49
45
  ssl: SSLConfig | null
50
46
  from: string
51
47
  to: string
48
+ portManager?: PortManager
52
49
  }
53
-
54
- export interface PortManager {
50
+ export declare interface PortManager {
55
51
  usedPorts: Set<number>
56
52
  getNextAvailablePort: (startPort: number) => Promise<number>
57
53
  }
58
-
59
- export interface ProxySetupOptions extends Omit<ReverseProxyOption, 'from'> {
60
- fromPort: number
61
- sourceUrl: Pick<URL, 'hostname' | 'host'>
62
- ssl: SSLConfig | null
63
- from: string
64
- to: string
65
- portManager?: PortManager
66
- }
54
+ export type BaseProxyOptions = Partial<BaseProxyConfig>
55
+ export type CleanupOptions = Partial<CleanupConfig>
56
+ export type SharedProxyOptions = Partial<SharedProxyConfig>
57
+ export type ProxyConfig = SingleProxyConfig
58
+ export type ProxyConfigs = SingleProxyConfig | MultiProxyConfig
59
+ export type BaseProxyOption = Partial<BaseProxyConfig>
60
+ export type ProxyOption = Partial<SingleProxyConfig>
61
+ export type ProxyOptions = Partial<SingleProxyConfig> | Partial<MultiProxyConfig>
package/dist/utils.d.ts CHANGED
@@ -1,14 +1,37 @@
1
- import type { ReverseProxyConfigs, ReverseProxyOption } from './types';
2
-
1
+ import type { MultiProxyConfig, ProxyConfigs, ProxyOption, ProxyOptions, SingleProxyConfig } from './types';
2
+ /**
3
+ * Get sudo password from environment variable if set
4
+ */
5
+ export declare function getSudoPassword(): string | undefined;
6
+ /**
7
+ * Execute a command with sudo, using SUDO_PASSWORD if available
8
+ */
9
+ export declare function execSudoSync(command: string): string;
3
10
  export declare function debugLog(category: string, message: string, verbose?: boolean): void;
4
- export declare function extractHostname(options: ReverseProxyOption | ReverseProxyOptions): string[];
11
+ /**
12
+ * Extracts hostnames from proxy configuration
13
+ */
14
+ export declare function extractHostname(options: ProxyOption | ProxyOptions): string[];
15
+ export declare function isValidRootCA(value: unknown): value is RootCA;
16
+ export declare function getPrimaryDomain(options?: ProxyOption | ProxyOptions): string;
17
+ /**
18
+ * Type guard for multi-proxy configuration
19
+ */
20
+ export declare function isMultiProxyConfig(options: ProxyConfigs | ProxyOptions): options is MultiProxyConfig;
21
+ /**
22
+ * Type guard to check if options are for multi-proxy configuration
23
+ */
24
+ export declare function isMultiProxyOptions(options: ProxyOption | ProxyOptions): options is MultiProxyConfig;
25
+ /**
26
+ * Type guard to check if options are for single-proxy configuration
27
+ */
28
+ export declare function isSingleProxyOptions(options: ProxyOption | ProxyOptions): options is SingleProxyConfig;
29
+ export declare function isSingleProxyConfig(options: ProxyConfigs | ProxyOptions): options is SingleProxyConfig;
30
+ /**
31
+ * Safely delete a file if it exists
32
+ */
33
+ export declare function safeDeleteFile(filePath: string, verbose?: boolean): Promise<void>;
5
34
  declare interface RootCA {
6
35
  certificate: string
7
36
  privateKey: string
8
- }
9
- export declare function isValidRootCA(value: unknown): value is RootCA;
10
- export declare function getPrimaryDomain(options?: ReverseProxyOption | ReverseProxyOptions): string;
11
- export declare function isMultiProxyConfig(options: ReverseProxyConfigs): options is MultiReverseProxyConfig;
12
- export declare function isMultiProxyOptions(options: ReverseProxyOption | ReverseProxyOptions): options is MultiReverseProxyConfig;
13
- export declare function isSingleProxyOptions(options: ReverseProxyOption | ReverseProxyOptions): options is SingleReverseProxyConfig;
14
- export declare function safeDeleteFile(filePath: string, verbose?: boolean): Promise<void>;
37
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/rpx",
3
3
  "type": "module",
4
- "version": "0.9.1",
4
+ "version": "0.11.0",
5
5
  "description": "A modern and smart reverse proxy.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",
@@ -26,6 +26,7 @@
26
26
  ],
27
27
  "exports": {
28
28
  ".": {
29
+ "types": "./dist/index.d.ts",
29
30
  "import": "./dist/src/index.js"
30
31
  }
31
32
  },
@@ -35,7 +36,10 @@
35
36
  "rpx": "./dist/bin/cli.js",
36
37
  "reverse-proxy": "./dist/bin/cli.js"
37
38
  },
38
- "files": ["README.md", "dist"],
39
+ "files": [
40
+ "README.md",
41
+ "dist"
42
+ ],
39
43
  "scripts": {
40
44
  "build": "bun build.ts && bun run compile",
41
45
  "compile": "bun build ./bin/cli.ts --compile --minify --outfile bin/rpx",
@@ -45,40 +49,36 @@
45
49
  "compile:windows-x64": "bun build ./bin/cli.ts --compile --minify --target=bun-windows-x64 --outfile bin/rpx-windows-x64.exe",
46
50
  "compile:darwin-x64": "bun build ./bin/cli.ts --compile --minify --target=bun-darwin-x64 --outfile bin/rpx-darwin-x64",
47
51
  "compile:darwin-arm64": "bun build ./bin/cli.ts --compile --minify --target=bun-darwin-arm64 --outfile bin/rpx-darwin-arm64",
48
- "lint": "bunx --bun eslint --flag unstable_ts_config .",
49
- "lint:fix": "bunx --bun eslint --flag unstable_ts_config . --fix",
52
+ "lint": "bunx --bun eslint .",
53
+ "lint:fix": "bunx --bun eslint . --fix",
50
54
  "fresh": "bunx rimraf node_modules/ bun.lock && bun i",
51
- "changelog": "bunx changelogen --output CHANGELOG.md",
52
- "prepublishOnly": "bun --bun run build && bun run compile:all",
53
- "release": "bun run changelog && bunx bumpp package.json --all",
55
+ "changelog": "changelogen --output CHANGELOG.md",
56
+ "prepublishOnly": "bun --bun run build && bun run compile:all && bun run zip",
54
57
  "test": "bun test",
55
58
  "typecheck": "bunx tsc --noEmit",
56
- "dev:docs": "bun --bun vitepress dev docs",
57
- "build:docs": "bun --bun vitepress build docs",
58
- "preview:docs": "bun --bun vitepress preview docs"
59
+ "zip": "bun run zip:all",
60
+ "zip:all": "bun run zip:linux-x64 && bun run zip:linux-arm64 && bun run zip:windows-x64 && bun run zip:darwin-x64 && bun run zip:darwin-arm64",
61
+ "zip:linux-x64": "zip -j bin/rpx-linux-x64.zip bin/rpx-linux-x64",
62
+ "zip:linux-arm64": "zip -j bin/rpx-linux-arm64.zip bin/rpx-linux-arm64",
63
+ "zip:windows-x64": "zip -j bin/rpx-windows-x64.zip bin/rpx-windows-x64.exe",
64
+ "zip:darwin-x64": "zip -j bin/rpx-darwin-x64.zip bin/rpx-darwin-x64",
65
+ "zip:darwin-arm64": "zip -j bin/rpx-darwin-arm64.zip bin/rpx-darwin-arm64"
59
66
  },
60
67
  "devDependencies": {
61
- "@iconify-json/carbon": "^1.2.5",
62
- "@shikijs/vitepress-twoslash": "^1.24.2",
63
- "@stacksjs/eslint-config": "^3.12.0-beta.4",
64
- "@stacksjs/tlsx": "^0.9.0",
65
- "@types/bun": "^1.1.14",
66
- "@vite-pwa/vitepress": "^0.5.3",
67
- "bun-config": "^0.3.2",
68
- "bun-plugin-dtsx": "^0.21.9",
68
+ "@stacksjs/tlsx": "^0.10.0",
69
+ "bun-plugin-dtsx": "^0.21.17",
70
+ "bunfig": "^0.15.6",
69
71
  "cac": "^6.7.14",
70
- "consola": "^3.2.3",
71
- "typescript": "^5.7.2",
72
- "unocss": "0.61.0",
73
- "unplugin-icons": "^0.22.0",
74
- "unplugin-vue-components": "^0.28.0",
75
- "vite-plugin-pwa": "^0.21.1",
76
- "vitepress": "^1.5.0"
72
+ "consola": "^3.4.2",
73
+ "typescript": "^5.9.3"
77
74
  },
78
75
  "simple-git-hooks": {
79
76
  "pre-commit": "bunx lint-staged"
80
77
  },
81
78
  "lint-staged": {
82
- "*.{js,ts}": "bunx eslint --flag unstable_ts_config . --fix"
79
+ "*.{js,ts}": "bunx eslint . --fix"
80
+ },
81
+ "dependencies": {
82
+ "picocolors": "^1.1.1"
83
83
  }
84
84
  }
@@ -1,24 +0,0 @@
1
- import{P as q,R as X}from"./chunk-e794mmrn.js";import{createRequire as J}from"node:module";import{formatWithOptions as iD}from"node:util";import{sep as nD}from"node:path";import*as b from"node:tty";import g from"node:process";var DD=Object.create,{getPrototypeOf:uD,defineProperty:N,getOwnPropertyNames:tD}=Object,FD=Object.prototype.hasOwnProperty,HD=(u,t,e)=>{e=u!=null?DD(uD(u)):{};let F=t||!u||!u.__esModule?N(e,"default",{value:u,enumerable:!0}):e;for(let r of tD(u))if(!FD.call(F,r))N(F,r,{get:()=>u[r],enumerable:!0});return F},KD=(u,t)=>()=>(t||u((t={exports:{}}).exports,t),t.exports),QD=J(import.meta.url),n={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},M={silent:{level:-1},fatal:{level:n.fatal},error:{level:n.error},warn:{level:n.warn},log:{level:n.log},info:{level:n.info},success:{level:n.success},fail:{level:n.fail},ready:{level:n.info},start:{level:n.info},box:{level:n.info},debug:{level:n.debug},trace:{level:n.trace},verbose:{level:n.verbose}};function L(u){return u!==null&&typeof u==="object"}function O(u,t,e=".",F){if(!L(t))return O(u,{},e,F);let r=Object.assign({},t);for(let o in u){if(o==="__proto__"||o==="constructor")continue;let D=u[o];if(D===null||D===void 0)continue;if(F&&F(r,o,D,e))continue;if(Array.isArray(D)&&Array.isArray(r[o]))r[o]=[...D,...r[o]];else if(L(D)&&L(r[o]))r[o]=O(D,r[o],(e?`${e}.`:"")+o.toString(),F);else r[o]=D}return r}function eD(u){return(...t)=>t.reduce((e,F)=>O(e,F,"",u),{})}var rD=eD();function oD(u){return Object.prototype.toString.call(u)==="[object Object]"}function CD(u){if(!oD(u))return!1;if(!u.message&&!u.args)return!1;if(u.stack)return!1;return!0}var T=!1,U=[];class i{constructor(u={}){let t=u.types||M;this.options=rD({...u,defaults:{...u.defaults},level:S(u.level,t),reporters:[...u.reporters||[]]},{types:M,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let e in t){let F={type:e,...this.options.defaults,...t[e]};this[e]=this._wrapLogFn(F),this[e].raw=this._wrapLogFn(F,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(u){this.options.level=S(u,this.options.types,this.options.level)}prompt(u,t){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(u,t)}create(u){let t=new i({...this.options,...u});if(this._mockFn)t.mockTypes(this._mockFn);return t}withDefaults(u){return this.create({...this.options,defaults:{...this.options.defaults,...u}})}withTag(u){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+u:u})}addReporter(u){return this.options.reporters.push(u),this}removeReporter(u){if(u){let t=this.options.reporters.indexOf(u);if(t>=0)return this.options.reporters.splice(t,1)}else this.options.reporters.splice(0);return this}setReporters(u){return this.options.reporters=Array.isArray(u)?u:[u],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let u in this.options.types){if(!console["__"+u])console["__"+u]=console[u];console[u]=this[u].raw}}restoreConsole(){for(let u in this.options.types)if(console["__"+u])console[u]=console["__"+u],delete console["__"+u]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(u,t){if(!u)return;if(!u.__write)u.__write=u.write;u.write=(e)=>{this[t].raw(String(e).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(u){if(!u)return;if(u.__write)u.write=u.__write,delete u.__write}pauseLogs(){T=!0}resumeLogs(){T=!1;let u=U.splice(0);for(let t of u)t[0]._logFn(t[1],t[2])}mockTypes(u){let t=u||this.options.mockFn;if(this._mockFn=t,typeof t!=="function")return;for(let e in this.options.types)this[e]=t(e,this.options.types[e])||this[e],this[e].raw=this[e]}_wrapLogFn(u,t){return(...e)=>{if(T){U.push([this,u,e,t]);return}return this._logFn(u,e,t)}}_logFn(u,t,e){if((u.level||0)>this.level)return!1;let F={date:new Date,args:[],...u,level:S(u.level,this.options.types)};if(!e&&t.length===1&&CD(t[0]))Object.assign(F,t[0]);else F.args=[...t];if(F.message)F.args.unshift(F.message),delete F.message;if(F.additional){if(!Array.isArray(F.additional))F.additional=F.additional.split(`
2
- `);F.args.push(`
3
- `+F.additional.join(`
4
- `)),delete F.additional}F.type=typeof F.type==="string"?F.type.toLowerCase():"log",F.tag=typeof F.tag==="string"?F.tag:"";let r=(D=!1)=>{let E=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&E>0){let p=[...this._lastLog.object.args];if(E>1)p.push(`(repeated ${E} times)`);this._log({...this._lastLog.object,args:p}),this._lastLog.count=1}if(D)this._lastLog.object=F,this._log(F)};clearTimeout(this._lastLog.timeout);let o=this._lastLog.time&&F.date?F.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=F.date,o<this.options.throttle)try{let D=JSON.stringify([F.type,F.tag,F.args]),E=this._lastLog.serialized===D;if(this._lastLog.serialized=D,E){if(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin){this._lastLog.timeout=setTimeout(r,this.options.throttle);return}}}catch{}r(!0)}_log(u){for(let t of this.options.reporters)t.log(u,{options:this.options})}}function S(u,t={},e=3){if(u===void 0)return e;if(typeof u==="number")return u;if(t[u]&&t[u].level!==void 0)return t[u].level;return e}i.prototype.add=i.prototype.addReporter;i.prototype.remove=i.prototype.removeReporter;i.prototype.clear=i.prototype.removeReporter;i.prototype.withScope=i.prototype.withTag;i.prototype.mock=i.prototype.mockTypes;i.prototype.pause=i.prototype.pauseLogs;i.prototype.resume=i.prototype.resumeLogs;function ED(u={}){return new i(u)}function j(u){let t=process.cwd()+nD;return u.split(`
5
- `).splice(1).map((e)=>e.trim().replace("file://","").replace(t,""))}function sD(u,t){return(t.__write||t.write).call(t,u)}var R=(u)=>u?`[${u}]`:"";class w{formatStack(u,t){return" "+j(u).join(`
6
- `)}formatArgs(u,t){let e=u.map((F)=>{if(F&&typeof F.stack==="string")return F.message+`
7
- `+this.formatStack(F.stack,t);return F});return iD(t,...e)}formatDate(u,t){return t.date?u.toLocaleTimeString():""}filterAndJoin(u){return u.filter(Boolean).join(" ")}formatLogObj(u,t){let e=this.formatArgs(u.args,t);if(u.type==="box")return`
8
- `+[R(u.tag),u.title&&u.title,...e.split(`
9
- `)].filter(Boolean).map((F)=>" > "+F).join(`
10
- `)+`
11
- `;return this.filterAndJoin([R(u.type),R(u.tag),e])}log(u,t){let e=this.formatLogObj(u,{columns:t.options.stdout.columns||0,...t.options.formatOptions});return sD(e+`
12
- `,u.level<2?t.options.stderr||process.stderr:t.options.stdout||process.stdout)}}var{env:h={},argv:G=[],platform:lD=""}=typeof process==="undefined"?{}:process,aD="NO_COLOR"in h||G.includes("--no-color"),BD="FORCE_COLOR"in h||G.includes("--color"),pD=lD==="win32",W=h.TERM==="dumb",gD=b&&b.isatty&&b.isatty(1)&&h.TERM&&!W,cD="CI"in h&&(("GITHUB_ACTIONS"in h)||("GITLAB_CI"in h)||("CIRCLECI"in h)),AD=!aD&&(BD||pD&&!W||gD||cD);function Y(u,t,e,F,r=t.slice(0,Math.max(0,u))+F,o=t.slice(Math.max(0,u+e.length)),D=o.indexOf(e)){return r+(D<0?o:Y(D,o,e,F))}function hD(u,t,e,F,r){return u<0?e+t+F:e+Y(u,t,F,r)+F}function dD(u,t,e=u,F=u.length+1){return(r)=>r||!(r===""||r===void 0)?hD((""+r).indexOf(t,F),r,u,t,e):""}function C(u,t,e){return dD(`\x1B[${u}m`,`\x1B[${t}m`,e)}var $={reset:C(0,0),bold:C(1,22,"\x1B[22m\x1B[1m"),dim:C(2,22,"\x1B[22m\x1B[2m"),italic:C(3,23),underline:C(4,24),inverse:C(7,27),hidden:C(8,28),strikethrough:C(9,29),black:C(30,39),red:C(31,39),green:C(32,39),yellow:C(33,39),blue:C(34,39),magenta:C(35,39),cyan:C(36,39),white:C(37,39),gray:C(90,39),bgBlack:C(40,49),bgRed:C(41,49),bgGreen:C(42,49),bgYellow:C(43,49),bgBlue:C(44,49),bgMagenta:C(45,49),bgCyan:C(46,49),bgWhite:C(47,49),blackBright:C(90,39),redBright:C(91,39),greenBright:C(92,39),yellowBright:C(93,39),blueBright:C(94,39),magentaBright:C(95,39),cyanBright:C(96,39),whiteBright:C(97,39),bgBlackBright:C(100,49),bgRedBright:C(101,49),bgGreenBright:C(102,49),bgYellowBright:C(103,49),bgBlueBright:C(104,49),bgMagentaBright:C(105,49),bgCyanBright:C(106,49),bgWhiteBright:C(107,49)};function mD(u=AD){return u?$:Object.fromEntries(Object.keys($).map((t)=>[t,String]))}var B=mD();function fD(u,t="reset"){return B[u]||B[t]}var yD=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");function m(u){return u.replace(new RegExp(yD,"g"),"")}var x={solid:{tl:"┌",tr:"┐",bl:"└",br:"┘",h:"─",v:"│"},double:{tl:"╔",tr:"╗",bl:"╚",br:"╝",h:"═",v:"║"},doubleSingle:{tl:"╓",tr:"╖",bl:"╙",br:"╜",h:"─",v:"║"},doubleSingleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"║"},singleThick:{tl:"┏",tr:"┓",bl:"┗",br:"┛",h:"━",v:"┃"},singleDouble:{tl:"╒",tr:"╕",bl:"╘",br:"╛",h:"═",v:"│"},singleDoubleRounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"═",v:"│"},rounded:{tl:"╭",tr:"╮",bl:"╰",br:"╯",h:"─",v:"│"}},_D={borderColor:"white",borderStyle:"rounded",valign:"center",padding:2,marginLeft:1,marginTop:1,marginBottom:1};function vD(u,t={}){let e={...t,style:{..._D,...t.style}},F=u.split(`
13
- `),r=[],o=fD(e.style.borderColor),D={...typeof e.style.borderStyle==="string"?x[e.style.borderStyle]||x.solid:e.style.borderStyle};if(o)for(let s in D)D[s]=o(D[s]);let E=e.style.padding%2===0?e.style.padding:e.style.padding+1,p=F.length+E,l=Math.max(...F.map((s)=>s.length))+E,c=l+E,a=e.style.marginLeft>0?" ".repeat(e.style.marginLeft):"";if(e.style.marginTop>0)r.push("".repeat(e.style.marginTop));if(e.title){let s=D.h.repeat(Math.floor((l-m(e.title).length)/2)),_=D.h.repeat(l-m(e.title).length-m(s).length+E);r.push(`${a}${D.tl}${s}${e.title}${_}${D.tr}`)}else r.push(`${a}${D.tl}${D.h.repeat(c)}${D.tr}`);let d=e.style.valign==="center"?Math.floor((p-F.length)/2):e.style.valign==="top"?p-F.length-E:p-F.length;for(let s=0;s<p;s++)if(s<d||s>=d+F.length)r.push(`${a}${D.v}${" ".repeat(c)}${D.v}`);else{let _=F[s-d],K=" ".repeat(E),Q=" ".repeat(l-m(_).length);r.push(`${a}${D.v}${K}${_}${Q}${D.v}`)}if(r.push(`${a}${D.bl}${D.h.repeat(c)}${D.br}`),e.style.marginBottom>0)r.push("".repeat(e.style.marginBottom));return r.join(`
14
- `)}var bD=[["APPVEYOR"],["AZURE_PIPELINES","SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"],["AZURE_STATIC","INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN"],["APPCIRCLE","AC_APPCIRCLE"],["BAMBOO","bamboo_planKey"],["BITBUCKET","BITBUCKET_COMMIT"],["BITRISE","BITRISE_IO"],["BUDDY","BUDDY_WORKSPACE_ID"],["BUILDKITE"],["CIRCLE","CIRCLECI"],["CIRRUS","CIRRUS_CI"],["CLOUDFLARE_PAGES","CF_PAGES",{ci:!0}],["CODEBUILD","CODEBUILD_BUILD_ARN"],["CODEFRESH","CF_BUILD_ID"],["DRONE"],["DRONE","DRONE_BUILD_EVENT"],["DSARI"],["GITHUB_ACTIONS"],["GITLAB","GITLAB_CI"],["GITLAB","CI_MERGE_REQUEST_ID"],["GOCD","GO_PIPELINE_LABEL"],["LAYERCI"],["HUDSON","HUDSON_URL"],["JENKINS","JENKINS_URL"],["MAGNUM"],["NETLIFY"],["NETLIFY","NETLIFY_LOCAL",{ci:!1}],["NEVERCODE"],["RENDER"],["SAIL","SAILCI"],["SEMAPHORE"],["SCREWDRIVER"],["SHIPPABLE"],["SOLANO","TDDIUM"],["STRIDER"],["TEAMCITY","TEAMCITY_VERSION"],["TRAVIS"],["VERCEL","NOW_BUILDER"],["APPCENTER","APPCENTER_BUILD_ID"],["CODESANDBOX","CODESANDBOX_SSE",{ci:!1}],["STACKBLITZ"],["STORMKIT"],["CLEAVR"]];function ID(u){for(let t of bD){let e=t[1]||t[0];if(u[e])return{name:t[0].toLowerCase(),...t[2]}}if(u.SHELL&&u.SHELL==="/bin/jsh")return{name:"stackblitz",ci:!1};return{name:"",ci:!1}}var I=typeof process!=="undefined"?process:{},f=I.env||{},V=ID(f),LD=typeof process!=="undefined"&&process.env&&"development"||"";I.platform;V.name;var TD=y(f.CI)||V.ci!==!1,Du=y(I.stdout&&I.stdout.isTTY),SD=y(f.DEBUG),Z=LD==="test"||y(f.TEST);y(f.MINIMAL);function y(u){return u?u!=="false":!1}function RD({onlyFirst:u=!1}={}){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,u?void 0:"g")}var OD=RD();function wD(u){if(typeof u!=="string")throw new TypeError(`Expected a \`string\`, got \`${typeof u}\``);return u.replace(OD,"")}function ND(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}var z={exports:{}};(function(u){var t={};u.exports=t,t.eastAsianWidth=function(F){var r=F.charCodeAt(0),o=F.length==2?F.charCodeAt(1):0,D=r;if(55296<=r&&r<=56319&&(56320<=o&&o<=57343))r&=1023,o&=1023,D=r<<10|o,D+=65536;if(D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510)return"F";if(D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518)return"H";if(4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141)return"W";if(32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630)return"Na";if(D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109)return"A";return"N"},t.characterLength=function(F){var r=this.eastAsianWidth(F);if(r=="F"||r=="W"||r=="A")return 2;else return 1};function e(F){return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}t.length=function(F){var r=e(F),o=0;for(var D=0;D<r.length;D++)o=o+this.characterLength(r[D]);return o},t.slice=function(F,r,o){if(textLen=t.length(F),r=r?r:0,o=o?o:1,r<0)r=textLen+r;if(o<0)o=textLen+o;var D="",E=0,p=e(F);for(var l=0;l<p.length;l++){var c=p[l],a=t.length(c);if(E>=r-(a==2?1:0))if(E+a<=o)D+=c;else break;E+=a}return D}})(z);var MD=z.exports,UD=ND(MD),$D=()=>{return/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\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]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\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?|[\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](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\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\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g};function xD(u,t){if(typeof u!=="string"||u.length===0)return 0;if(t={ambiguousIsNarrow:!0,countAnsiEscapeCodes:!1,...t},!t.countAnsiEscapeCodes)u=wD(u);if(u.length===0)return 0;let e=t.ambiguousIsNarrow?1:2,F=0;for(let{segment:r}of new Intl.Segmenter().segment(u)){let o=r.codePointAt(0);if(o<=31||o>=127&&o<=159)continue;if(o>=768&&o<=879)continue;if($D().test(r)){F+=2;continue}switch(UD.eastAsianWidth(r)){case"F":case"W":{F+=2;break}case"A":{F+=e;break}default:F+=1}}return F}function PD(){if(g.platform!=="win32")return g.env.TERM!=="linux";return Boolean(g.env.CI)||Boolean(g.env.WT_SESSION)||Boolean(g.env.TERMINUS_SUBLIME)||g.env.ConEmuTask==="{cmd::Cmder}"||g.env.TERM_PROGRAM==="Terminus-Sublime"||g.env.TERM_PROGRAM==="vscode"||g.env.TERM==="xterm-256color"||g.env.TERM==="alacritty"||g.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var kD={info:"cyan",fail:"red",success:"green",ready:"green",start:"magenta"},jD={0:"red",1:"yellow"},GD=PD(),A=(u,t)=>GD?u:t,P={error:A("✖","×"),fatal:A("✖","×"),ready:A("✔","√"),warn:A("⚠","‼"),info:A("ℹ","i"),success:A("✔","√"),debug:A("⚙","D"),trace:A("→","→"),fail:A("✖","×"),start:A("◐","o"),log:""};function k(u){if(!Intl.Segmenter)return m(u).length;return xD(u)}class H extends w{formatStack(u){return`
15
- `+j(u).map((t)=>" "+t.replace(/^at +/,(e)=>B.gray(e)).replace(/\((.+)\)/,(e,F)=>`(${B.cyan(F)})`)).join(`
16
- `)}formatType(u,t,e){let F=kD[u.type]||jD[u.level]||"gray";if(t)return YD(F)(B.black(` ${u.type.toUpperCase()} `));let r=typeof P[u.type]==="string"?P[u.type]:u.icon||u.type;return r?WD(F)(r):""}formatLogObj(u,t){let[e,...F]=this.formatArgs(u.args,t).split(`
17
- `);if(u.type==="box")return vD(v(e+(F.length>0?`
18
- `+F.join(`
19
- `):"")),{title:u.title?v(u.title):void 0,style:u.style});let r=this.formatDate(u.date,t),o=r&&B.gray(r),D=u.badge??u.level<2,E=this.formatType(u,D,t),p=u.tag?B.gray(u.tag):"",l,c=this.filterAndJoin([E,v(e)]),a=this.filterAndJoin(t.columns?[p,o]:[p]),d=(t.columns||0)-k(c)-k(a)-2;if(l=d>0&&(t.columns||0)>=80?c+" ".repeat(d)+a:(a?`${B.gray(`[${a}]`)} `:"")+c,l+=v(F.length>0?`
20
- `+F.join(`
21
- `):""),u.type==="trace"){let s=new Error("Trace: "+u.message);l+=this.formatStack(s.stack||"")}return D?`
22
- `+l+`
23
- `:l}}function v(u){return u.replace(/`([^`]+)`/gm,(t,e)=>B.cyan(e)).replace(/\s+_([^_]+)_\s+/gm,(t,e)=>` ${B.underline(e)} `)}function WD(u="white"){return B[u]||B.white}function YD(u="bgWhite"){return B[`bg${u[0].toUpperCase()}${u.slice(1)}`]||B.bgWhite}function VD(u={}){let t=ZD();if(process.env.CONSOLA_LEVEL)t=Number.parseInt(process.env.CONSOLA_LEVEL)??t;return ED({level:t,defaults:{level:t},stdout:process.stdout,stderr:process.stderr,prompt:(...e)=>import("./chunk-45dw2f5f.js").then((F)=>F.prompt(...e)),reporters:u.reporters||[u.fancy??!(TD||Z)?new H:new w],...u})}function ZD(){if(SD)return n.debug;if(Z)return n.warn;return n.info}var uu=VD();
24
- export{HD as I,KD as J,QD as K,B as L,ND as M,PD as N,uu as O};