@lehnihon/bit-form 1.0.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/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/angular/index.cjs +2 -0
- package/dist/angular/index.cjs.map +1 -0
- package/dist/angular/index.d.cts +115 -0
- package/dist/angular/index.d.ts +115 -0
- package/dist/angular/index.js +2 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/bus-DAwKIiMY.d.cts +233 -0
- package/dist/bus-DAwKIiMY.d.ts +233 -0
- package/dist/chunk-32ZEDTLP.js +2 -0
- package/dist/chunk-32ZEDTLP.js.map +1 -0
- package/dist/chunk-FOPOA6NB.cjs +133 -0
- package/dist/chunk-FOPOA6NB.cjs.map +1 -0
- package/dist/chunk-XIDR3J47.cjs +2 -0
- package/dist/chunk-XIDR3J47.cjs.map +1 -0
- package/dist/chunk-ZI3XHI4I.js +133 -0
- package/dist/chunk-ZI3XHI4I.js.map +1 -0
- package/dist/cli/index.cjs +105 -0
- package/dist/devtools/bridge.cjs +2 -0
- package/dist/devtools/bridge.cjs.map +1 -0
- package/dist/devtools/bridge.d.cts +3 -0
- package/dist/devtools/bridge.d.ts +3 -0
- package/dist/devtools/bridge.js +2 -0
- package/dist/devtools/bridge.js.map +1 -0
- package/dist/devtools/index.cjs +2 -0
- package/dist/devtools/index.cjs.map +1 -0
- package/dist/devtools/index.d.cts +14 -0
- package/dist/devtools/index.d.ts +14 -0
- package/dist/devtools/index.js +2 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/index-CmwQH2V1.d.cts +108 -0
- package/dist/index-DRvn8318.d.ts +108 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +119 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +2 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +34 -0
- package/dist/react/index.d.ts +34 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react-native/index.cjs +2 -0
- package/dist/react-native/index.cjs.map +1 -0
- package/dist/react-native/index.d.cts +27 -0
- package/dist/react-native/index.d.ts +27 -0
- package/dist/react-native/index.js +2 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/resolvers/joi.cjs +2 -0
- package/dist/resolvers/joi.cjs.map +1 -0
- package/dist/resolvers/joi.d.cts +8 -0
- package/dist/resolvers/joi.d.ts +8 -0
- package/dist/resolvers/joi.js +2 -0
- package/dist/resolvers/joi.js.map +1 -0
- package/dist/resolvers/yup.cjs +2 -0
- package/dist/resolvers/yup.cjs.map +1 -0
- package/dist/resolvers/yup.d.cts +8 -0
- package/dist/resolvers/yup.d.ts +8 -0
- package/dist/resolvers/yup.js +2 -0
- package/dist/resolvers/yup.js.map +1 -0
- package/dist/resolvers/zod.cjs +2 -0
- package/dist/resolvers/zod.cjs.map +1 -0
- package/dist/resolvers/zod.d.cts +8 -0
- package/dist/resolvers/zod.d.ts +8 -0
- package/dist/resolvers/zod.js +2 -0
- package/dist/resolvers/zod.js.map +1 -0
- package/dist/use-bit-watch-BMCwKIYx.d.cts +99 -0
- package/dist/use-bit-watch-BujTdIMc.d.ts +99 -0
- package/dist/vue/index.cjs +2 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +122 -0
- package/dist/vue/index.d.ts +122 -0
- package/dist/vue/index.js +2 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +160 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/store/bus.ts","../src/core/utils.ts","../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/index.ts","../src/core/store/config.ts","../src/core/store/dependency-manager.ts","../src/core/store/history-manager.ts","../src/core/store/array-manager.ts","../src/core/store/computed-manager.ts","../src/core/store/validation-manager.ts","../src/core/store/lifecycle-manager.ts","../src/devtools/ui/styles.ts","../src/devtools/ui/index.ts","../src/devtools/adapters/local.ts","../src/devtools/adapters/remote.ts","../src/devtools/init-dev-tools.ts","../src/core/store/devtools-manager.ts","../src/core/store/index.ts","../src/devtools/bridge.ts"],"sourcesContent":["export type BitBusListener = (storeId: string, newState: any) => void;\n\ninterface BitFormGlobal {\n stores: Record<string, any>;\n listeners: Set<BitBusListener>;\n dispatch: (storeId: string, state: any) => void;\n subscribe: (fn: BitBusListener) => () => void;\n}\n\ndeclare global {\n var __BIT_FORM__: BitFormGlobal | undefined;\n}\n\nconst rootGlobal =\n typeof globalThis !== \"undefined\"\n ? globalThis\n : ((typeof global !== \"undefined\" ? global : window) as any);\n\nif (!rootGlobal.__BIT_FORM__) {\n rootGlobal.__BIT_FORM__ = {\n stores: {},\n listeners: new Set<BitBusListener>(),\n\n dispatch(id: string, state: any) {\n this.listeners.forEach((fn: BitBusListener) => fn(id, state));\n },\n\n subscribe(fn: BitBusListener) {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n },\n };\n}\n\nexport const bitBus = rootGlobal.__BIT_FORM__ as BitFormGlobal;\n","export function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any as T;\n }\n if (obj instanceof RegExp) {\n return new RegExp(obj.source, obj.flags) as any as T;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepClone(item)) as any as T;\n }\n\n const clone: any = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clone[key] = deepClone((obj as any)[key]);\n }\n }\n return clone as T;\n}\n\n/**\n * Fast equality for single values. Uses === for primitives, deepEqual for objects/arrays.\n * Prefer over deepEqual when comparing a single field value (e.g. isFieldDirty, getStepStatus).\n */\nexport function valueEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (\n a === null ||\n typeof a !== \"object\" ||\n b === null ||\n typeof b !== \"object\"\n ) {\n return false;\n }\n return deepEqual(a, b);\n}\n\nexport function deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (\n a === null ||\n typeof a !== \"object\" ||\n b === null ||\n typeof b !== \"object\"\n ) {\n return false;\n }\n\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (a instanceof RegExp && b instanceof RegExp)\n return a.toString() === b.toString();\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !deepEqual(a[key], b[key])\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Collects all paths where obj differs from initial. Used to rebuild dirtyPaths after full state replacement.\n */\nexport function collectDirtyPaths(\n obj: any,\n initial: any,\n prefix = \"\",\n result: Set<string> = new Set(),\n): Set<string> {\n if (valueEqual(obj, initial)) return result;\n if (\n obj === null ||\n typeof obj !== \"object\" ||\n initial === null ||\n typeof initial !== \"object\"\n ) {\n if (prefix) result.add(prefix);\n return result;\n }\n if (Array.isArray(obj) || Array.isArray(initial)) {\n if (!valueEqual(obj, initial) && prefix) result.add(prefix);\n return result;\n }\n const allKeys = new Set([\n ...Object.keys(obj || {}),\n ...Object.keys(initial || {}),\n ]);\n for (const k of allKeys) {\n const p = prefix ? `${prefix}.${k}` : k;\n collectDirtyPaths((obj as any)?.[k], (initial as any)?.[k], p, result);\n }\n return result;\n}\n\nconst pathCache = new Map<string, string[]>();\n\nexport function getDeepValue(obj: any, path: string): any {\n if (!path) return obj;\n\n const keys = pathCache.get(path) || path.split(\".\");\n if (!pathCache.has(path)) pathCache.set(path, keys);\n\n let current = obj;\n for (const key of keys) {\n if (current === null || current === undefined) return undefined;\n current = current[key];\n }\n return current;\n}\n\nexport function setDeepValue(obj: any, path: string, value: any): any {\n if (!path) return value;\n\n const keys = pathCache.get(path) || path.split(\".\");\n if (!pathCache.has(path)) pathCache.set(path, keys);\n\n const result = Array.isArray(obj) ? [...obj] : { ...obj };\n let current = result;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n const nextKey = keys[i + 1];\n\n const isNextNumeric = /^\\d+$/.test(nextKey);\n const currentValue = current[key];\n\n if (currentValue === null || currentValue === undefined) {\n current[key] = isNextNumeric ? [] : {};\n } else {\n current[key] = Array.isArray(currentValue)\n ? [...currentValue]\n : { ...currentValue };\n }\n\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return result;\n}\n\nexport function cleanPrefixedKeys(\n obj: Record<string, any>,\n prefix: string,\n): Record<string, any> {\n const newObj: Record<string, any> = {};\n const prefixWithDot = `${prefix}.`;\n\n for (const key in obj) {\n if (key !== prefix && !key.startsWith(prefixWithDot)) {\n newObj[key] = obj[key];\n }\n }\n return newObj;\n}\n\nexport const shiftKeys = (\n obj: Record<string, any>,\n path: string,\n removedIndex: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n if (currentIdx === removedIndex) return;\n\n if (currentIdx > removedIndex) {\n const newIdx = currentIdx - 1;\n const newKey = rest ? `${prefix}${newIdx}.${rest}` : `${prefix}${newIdx}`;\n newObj[newKey] = obj[key];\n } else {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n};\n\nexport const swapKeys = (\n obj: Record<string, any>,\n path: string,\n indexA: number,\n indexB: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n if (currentIdx === indexA) {\n const newKey = rest ? `${prefix}${indexB}.${rest}` : `${prefix}${indexB}`;\n newObj[newKey] = obj[key];\n } else if (currentIdx === indexB) {\n const newKey = rest ? `${prefix}${indexA}.${rest}` : `${prefix}${indexA}`;\n newObj[newKey] = obj[key];\n } else {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n};\n\nexport const moveKeys = (\n obj: Record<string, any>,\n path: string,\n from: number,\n to: number,\n) => {\n const newObj: Record<string, any> = {};\n const prefix = `${path}.`;\n\n Object.keys(obj).forEach((key) => {\n if (!key.startsWith(prefix)) {\n newObj[key] = obj[key];\n return;\n }\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = parseInt(parts[0], 10);\n const rest = parts.slice(1).join(\".\");\n\n let newIdx = currentIdx;\n if (currentIdx === from) {\n newIdx = to;\n } else if (from < to && currentIdx > from && currentIdx <= to) {\n newIdx = currentIdx - 1;\n } else if (from > to && currentIdx >= to && currentIdx < from) {\n newIdx = currentIdx + 1;\n }\n\n const newKey = rest ? `${prefix}${newIdx}.${rest}` : `${prefix}${newIdx}`;\n newObj[newKey] = obj[key];\n });\n return newObj;\n};\n\n/**\n * Checks if a value looks like a server validation error response.\n * Handles shapes like { email: \"Taken\" }, { errors: { email: [\"Taken\"] } }, etc.\n */\nexport function isValidationErrorShape(\n x: unknown,\n): x is Record<string, string | string[]> {\n if (typeof x !== \"object\" || x === null || Array.isArray(x)) return false;\n\n const obj = (x as Record<string, unknown>).errors ?? x;\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) return false;\n\n return Object.values(obj as Record<string, unknown>).every(\n (v) =>\n typeof v === \"string\" ||\n (Array.isArray(v) && v.every((i) => typeof i === \"string\")),\n );\n}\n\n/**\n * Extracts server errors in the format expected by setServerErrors.\n */\nexport function extractServerErrors(\n x: unknown,\n): Record<string, string | string[]> {\n if (!isValidationErrorShape(x)) return {};\n\n const obj = (x as Record<string, unknown>).errors ?? x;\n return obj as Record<string, string | string[]>;\n}\n","import {\n BitMask,\n CurrencyMaskConfig,\n DateMaskConfig,\n PatternMaskOptions,\n} from \"./types\";\n\ntype TokenMap = Record<string, RegExp>;\n\nconst tokens: TokenMap = {\n \"#\": /\\d/,\n A: /[a-zA-Z]/,\n X: /[a-zA-Z0-9]/,\n H: /[0-9a-fA-F]/,\n U: /[A-Z]/,\n L: /[a-z]/,\n \"*\": /./,\n};\n\nexport const unmask = (\n value: string | number | null | undefined,\n allowChars?: string,\n): string => {\n if (value === null || value === undefined || value === \"\") return \"\";\n const stringValue = String(value);\n const isNegative = stringValue.startsWith(\"-\");\n\n const escapedChars = allowChars\n ? allowChars.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n : \"\";\n const regex = new RegExp(`[^a-zA-Z0-9${escapedChars}]`, \"g\");\n\n const clean = stringValue.replace(regex, \"\");\n return isNegative && clean && !clean.startsWith(\"-\") ? `-${clean}` : clean;\n};\n\nexport const unmaskCurrency = (value: any, precision = 2): number => {\n if (typeof value === \"number\") return value;\n if (!value) return 0;\n\n const stringValue = String(value);\n const isNegative = stringValue.includes(\"-\");\n const digits = stringValue.replace(/\\D/g, \"\");\n\n if (!digits) return 0;\n\n const numberValue = parseInt(digits, 10) / Math.pow(10, precision);\n return isNegative ? -numberValue : numberValue;\n};\n\nexport const createPatternMask = (\n pattern: string | string[],\n options?: PatternMaskOptions,\n): BitMask => {\n const getRawLength = (p: string) =>\n p.split(\"\").filter((c) => tokens[c]).length;\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value, options?.allowChars);\n\n // Se não há valor e o guide não está ativo, retorna vazio logo de cara\n if (!stringVal && !options?.guide) return \"\";\n\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const p of sortedPatterns) {\n if (stringVal.length <= getRawLength(p)) {\n activePattern = p;\n break;\n }\n }\n\n let masked = \"\";\n let valueIndex = 0;\n\n // Variáveis do guide\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n // O loop agora corre o activePattern por inteiro se o guide for true\n for (let i = 0; i < activePattern.length; i++) {\n const patternChar = activePattern[i];\n const token = tokens[patternChar];\n\n if (valueIndex < stringVal.length) {\n // 1. Ainda temos texto do utilizador para processar\n let dataChar = stringVal[valueIndex];\n\n if (token) {\n if (patternChar === \"U\") dataChar = dataChar.toUpperCase();\n if (patternChar === \"L\") dataChar = dataChar.toLowerCase();\n\n if (token.test(dataChar)) {\n masked += dataChar;\n valueIndex++;\n } else {\n // Se o utilizador digitou um char inválido, ignora-o.\n // Se o guide estiver ativo, desenha o placeholder.\n if (showGuide) masked += placeholder;\n else break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else {\n // 2. Acabou o texto do utilizador!\n if (showGuide) {\n // Se for um token (ex: #), põe o placeholder (_). Se for literal (ex: -), põe o literal.\n masked += token ? placeholder : patternChar;\n } else {\n // Se não for para mostrar o guide, terminamos a máscara aqui.\n break;\n }\n }\n }\n\n // Evita mostrar o guide solto se o campo estiver 100% vazio e o dev não quiser\n // (Mas por padrão, se guide é true, até o campo vazio exibe a máscara inteira)\n return masked;\n },\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const mask = createPatternMask(pattern, options);\n const formatted = mask.format(value);\n\n if (options?.saveRaw) {\n if (options?.guide) {\n const placeholder = options.placeholderChar || \"_\";\n const escapedPlaceholder = placeholder.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n \"\\\\$&\",\n );\n const placeholderRegex = new RegExp(escapedPlaceholder, \"g\");\n\n return formatted.replace(placeholderRegex, \"\");\n }\n\n return formatted;\n }\n\n return unmask(formatted, options?.allowChars);\n },\n };\n};\n\nexport const createCurrencyMask = ({\n prefix = \"\",\n suffix = \"\",\n thousand,\n decimal,\n precision = 2,\n allowNegative = true,\n saveRaw = false,\n}: CurrencyMaskConfig): BitMask => {\n const formatFn = (value: any) => {\n if (value === undefined || value === null || value === \"\") return \"\";\n\n let stringValue = \"\";\n\n if (typeof value === \"number\") {\n stringValue = Math.abs(value).toFixed(precision).replace(/\\D/g, \"\");\n } else {\n stringValue = String(value).replace(/\\D/g, \"\");\n }\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = stringValue.slice(-precision);\n\n const formattedInteger = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n thousand,\n );\n\n const isNegative =\n typeof value === \"number\" ? value < 0 : String(value).includes(\"-\");\n const sign = isNegative && allowNegative ? \"-\" : \"\";\n\n return `${sign}${prefix}${formattedInteger}${decimal}${decimalPart}${suffix}`;\n };\n\n return {\n format: formatFn,\n parse: (value: string) => {\n const numericValue = unmaskCurrency(value, precision);\n const finalNumber = !allowNegative\n ? Math.abs(numericValue)\n : numericValue;\n if (saveRaw) return formatFn(finalNumber);\n return finalNumber;\n },\n };\n};\n\nexport const createCreditCardMask = (options?: PatternMaskOptions): BitMask => {\n // Função auxiliar para descobrir o padrão dinamicamente\n const getCardPattern = (rawValue: string) => {\n // Amex (American Express) começa com 34 ou 37 -> 15 dígitos\n if (/^3[47]/.test(rawValue)) {\n return \"#### ###### #####\";\n }\n // Diners Club começa com 300-305, 36 ou 38 -> 14 dígitos\n if (/^3(?:0[0-5]|[68])/.test(rawValue)) {\n return \"#### ###### ####\";\n }\n // Default: Visa, Mastercard, Discover, Elo, etc -> 16 dígitos\n return \"#### #### #### ####\";\n };\n\n return {\n format: (value: any) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n const mask = createPatternMask(pattern, options);\n return mask.format(value);\n },\n parse: (value: string) => {\n const stringVal = unmask(value, options?.allowChars);\n const pattern = getCardPattern(stringVal);\n\n const mask = createPatternMask(pattern, options);\n return mask.parse(value);\n },\n };\n};\n\nexport const createDateMask = (config?: DateMaskConfig): BitMask => {\n const formatType = config?.format || \"DD/MM/YYYY\";\n const isISO = formatType === \"YYYY-MM-DD\";\n\n // Criamos a máscara base consoante o formato escolhido\n const baseMask = createPatternMask(\n isISO ? \"####-##-##\" : \"##/##/####\",\n config,\n );\n\n return {\n format: (value: any) => {\n let stringVal = unmask(value);\n if (!stringVal) return \"\";\n\n let day = \"\";\n let month = \"\";\n let year = \"\";\n\n // Separamos os componentes consoante o que o utilizador já digitou\n if (isISO) {\n year = stringVal.substring(0, 4);\n month = stringVal.substring(4, 6);\n day = stringVal.substring(6, 8);\n } else {\n day = stringVal.substring(0, 2);\n month = stringVal.substring(2, 4);\n year = stringVal.substring(4, 8);\n }\n\n // Validação do Dia (01 a 31)\n if (day.length === 2) {\n const d = parseInt(day, 10);\n if (d > 31) day = \"31\";\n if (d === 0) day = \"01\";\n }\n\n // Validação do Mês (01 a 12)\n if (month.length === 2) {\n const m = parseInt(month, 10);\n if (m > 12) month = \"12\";\n if (m === 0) month = \"01\";\n }\n\n // Reconstruímos a string limpa e passamos para o pattern normal\n const safeString = isISO\n ? `${year}${month}${day}`\n : `${day}${month}${year}`;\n\n return baseMask.format(safeString);\n },\n parse: (value: string) => {\n // Usamos a funcionalidade completa da máscara base (incluindo o saveRaw e o unmasking)\n return baseMask.parse(value);\n },\n };\n};\n","import {\n createCreditCardMask,\n createCurrencyMask,\n createDateMask,\n createPatternMask,\n} from \"./creators\";\n\n// ==========================================\n// 💲 MOEDAS (Currencies)\n// ==========================================\n\n/** BRL - Real Brasileiro (R$ 1.000,00) */\nexport const maskBRL = createCurrencyMask({\n prefix: \"R$ \",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** USD - Dólar Americano ($1,000.00) */\nexport const maskUSD = createCurrencyMask({\n prefix: \"$\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** EUR - Euro Padrão (€ 1.000,00) - Sufixo comum na Europa */\nexport const maskEUR = createCurrencyMask({\n suffix: \" €\",\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** GBP - Libra Esterlina (£1,000.00) */\nexport const maskGBP = createCurrencyMask({\n prefix: \"£\",\n thousand: \",\",\n decimal: \".\",\n precision: 2,\n});\n\n/** JPY - Iene Japonês (¥1,000) - Geralmente sem decimais */\nexport const maskJPY = createCurrencyMask({\n prefix: \"¥\",\n thousand: \",\",\n decimal: \".\",\n precision: 0,\n});\n\n// ==========================================\n// 🔢 NÚMEROS E PERCENTUAIS\n// ==========================================\n\n/** Porcentagem PT-BR (10,5%) */\nexport const maskPercent = createCurrencyMask({\n suffix: \"%\",\n thousand: \".\",\n decimal: \",\",\n precision: 1, // Ex: 99,9%\n});\n\n/** Decimal Genérico PT-BR (1.000,00) - Sem símbolo */\nexport const maskDecimal = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 2,\n});\n\n/** Inteiro (1.000) - Apenas separador de milhar */\nexport const maskInteger = createCurrencyMask({\n thousand: \".\",\n decimal: \",\",\n precision: 0,\n});\n\n// ==========================================\n// 🇧🇷 PADRÕES BRASILEIROS (Brazil)\n// ==========================================\n\n/** CPF (000.000.000-00) */\nexport const maskCPF = createPatternMask(\"###.###.###-##\");\n\n/** CNPJ (00.000.000/0000-00) */\nexport const maskCNPJ = createPatternMask(\"##.###.###/####-##\");\n\nexport const maskPhone = createPatternMask([\n \"(##) ####-####\", // Fixo (10 dígitos)\n \"(##) #####-####\", // Celular (11 dígitos)\n]);\n\n/** Telefone Fixo BR (11) 0000-0000 */\nexport const maskLandline = createPatternMask(\"(##) ####-####\");\n\n/** CEP (00000-000) */\nexport const maskCEP = createPatternMask(\"#####-###\");\n\n/** Data PT/BR com correção automática de dia/mês */\nexport const maskDate = createDateMask({\n format: \"DD/MM/YYYY\",\n guide: true,\n customParse: (val) => {\n const cleanVal = val.replace(/_/g, \"\");\n const parts = cleanVal.split(\"/\");\n if (parts.length === 3 && parts[2].length === 4) {\n return `${parts[2]}-${parts[1]}-${parts[0]}`;\n }\n return cleanVal.replace(/\\D/g, \"\");\n },\n});\n\n/** Hora Curta (HH:MM) */\nexport const maskTime = createPatternMask(\"##:##\");\n\n/** CNH (Carteira de Motorista - 11 dígitos) */\nexport const maskCNH = createPatternMask(\"###########\");\n\n/** RG (00.000.000-X) - Suporta o 'X' como dígito verificador */\nexport const maskRG = createPatternMask(\"##.###.###-X\");\n\n// ==========================================\n// 🇺🇸 PADRÕES AMERICANOS (USA)\n// ==========================================\n\n/** US Phone ((000) 000-0000) */\nexport const maskUSPhone = createPatternMask(\"(###) ###-####\");\n\n/** ZIP Code (00000 or 00000-0000) */\nexport const maskZipCode = createPatternMask(\"#####-####\");\n\n/** Date US (MM/DD/YYYY) - Igual ao BR, mas semântica diferente */\nexport const maskDateUS = createPatternMask(\"##/##/####\");\n\n/** SSN (Social Security Number) */\nexport const maskSSN = createPatternMask(\"###-##-####\");\n\n// ==========================================\n// 🌐 PADRÕES GLOBAIS / TÉCNICOS\n// ==========================================\n\n/** Cartão de Crédito Inteligente (Detecta Visa/Master, Amex e Diners) */\nexport const maskCreditCard = createCreditCardMask();\n\n/** CVV (3 ou 4 dígitos) */\nexport const maskCVV = createPatternMask(\"####\");\n\n/** Data ISO (Ideal para base de dados: YYYY-MM-DD) */\nexport const maskDateISO = createDateMask({\n format: \"YYYY-MM-DD\",\n saveRaw: true,\n guide: true,\n});\n\n/** Endereço MAC (HH:HH:HH:HH:HH:HH) - Usa o token Hexadecimal */\nexport const maskMacAddress = createPatternMask(\"HH:HH:HH:HH:HH:HH\");\n\n/** Cor Hexadecimal (#HHHHHH) */\nexport const maskColorHex = createPatternMask(\"#HHHHHH\");\n\n/** IPv4 (000.000.000.000) - Formato de blocos fixos */\nexport const maskIPv4 = createPatternMask(\"###.###.###.###\");\n\n/** IPv6 (HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH) */\nexport const maskIPv6 = createPatternMask(\n \"HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH\",\n);\n\n/** * IBAN Internacional\n * Força as duas primeiras letras para maiúsculas e agrupa de 4 em 4.\n * O tamanho máximo cobre os 34 caracteres do padrão IBAN.\n */\nexport const maskIBAN = createPatternMask(\n \"UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX\",\n { allowChars: \" \" },\n);\n","export * from \"./types\";\nexport * from \"./creators\";\nexport * from \"./presets\";\n\nimport * as presets from \"./presets\";\n\nexport const bitMasks = {\n // Moedas\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n // Documentos BR\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n // Comunicação/Data\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n // Tech/Global\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n // Utilitários\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n};\n","import type {\n BitConfig,\n BitResolvedConfig,\n BitFieldDefinition,\n} from \"./types\";\nimport { deepClone } from \"../utils\";\nimport { bitMasks } from \"../mask\";\n\nfunction deriveFromFields<T extends object>(\n fields: Record<string, BitFieldDefinition<T>> | undefined,\n) {\n const computed: Record<string, (values: T) => any> = {};\n const transform: Partial<Record<string, (value: any, allValues: T) => any>> =\n {};\n const scopes: Record<string, string[]> = {};\n\n if (!fields) return { computed, transform, scopes };\n\n for (const [path, def] of Object.entries(fields)) {\n if (def?.computed) computed[path] = def.computed;\n if (def?.transform) transform[path] = def.transform;\n if (def?.scope) {\n if (!scopes[def.scope]) scopes[def.scope] = [];\n scopes[def.scope].push(path);\n }\n }\n\n return {\n computed: Object.keys(computed).length ? computed : undefined,\n transform: Object.keys(transform).length ? transform : undefined,\n scopes: Object.keys(scopes).length ? scopes : undefined,\n };\n}\n\n/**\n * Normalizes BitConfig into BitResolvedConfig for internal use.\n * Derives computed, transform, scopes from fields.\n */\nexport function normalizeConfig<T extends object>(\n config: BitConfig<T> = {},\n): BitResolvedConfig<T> {\n const rawInitial = config.initialValues || ({} as T);\n const validation = config.validation;\n const history = config.history;\n const { computed, transform, scopes } = deriveFromFields(config.fields);\n\n return {\n name: config.name,\n initialValues: deepClone(rawInitial),\n resolver: validation?.resolver,\n validationDelay: validation?.delay ?? 300,\n defaultRequiredMessage: validation?.defaultRequiredMessage,\n enableHistory: history?.enabled ?? false,\n historyLimit: history?.limit ?? 15,\n computed,\n transform,\n scopes,\n masks: bitMasks,\n fields: config.fields,\n devTools: config.devTools,\n } as BitResolvedConfig<T>;\n}\n","import { BitFieldDefinition } from \"./types\";\nimport { getDeepValue } from \"../utils\";\n\nexport class BitDependencyManager<T extends object = any> {\n public fieldConfigs: Map<string, BitFieldDefinition<T>> = new Map();\n public dependencies: Map<string, Set<string>> = new Map();\n public hiddenFields: Set<string> = new Set();\n\n register(path: string, config: BitFieldDefinition<T>, currentValues: T) {\n this.fieldConfigs.set(path, config);\n\n const dependsOn = config.conditional?.dependsOn;\n if (dependsOn) {\n dependsOn.forEach((dep) => {\n if (!this.dependencies.has(dep)) {\n this.dependencies.set(dep, new Set());\n }\n this.dependencies.get(dep)!.add(path);\n });\n }\n\n this.evaluateFieldCondition(path, currentValues);\n }\n\n isHidden(path: string): boolean {\n return this.hiddenFields.has(path);\n }\n\n isRequired(path: string, values: T): boolean {\n const config = this.fieldConfigs.get(path);\n if (!config || this.isHidden(path)) return false;\n return !!config.conditional?.requiredIf?.(values);\n }\n\n getRequiredErrors(\n values: T,\n defaultMessage = \"Este campo é obrigatório\",\n ): Record<string, string> {\n const errors: Record<string, string> = {};\n\n this.fieldConfigs.forEach((config, path) => {\n if (this.isRequired(path, values)) {\n const val = getDeepValue(values, path);\n if (this.isEmpty(val)) {\n errors[path] = config.validation?.requiredMessage ?? defaultMessage;\n }\n }\n });\n\n return errors;\n }\n\n evaluateAll(values: T) {\n this.fieldConfigs.forEach((_, path) => {\n this.evaluateFieldCondition(path, values);\n });\n }\n\n updateDependencies(changedPath: string, newValues: T): string[] {\n const toggledFields: string[] = [];\n const dependents = this.dependencies.get(changedPath);\n\n if (!dependents) return toggledFields;\n\n dependents.forEach((depPath) => {\n const wasHidden = this.isHidden(depPath);\n this.evaluateFieldCondition(depPath, newValues);\n const isHiddenNow = this.isHidden(depPath);\n\n if (wasHidden !== isHiddenNow) {\n toggledFields.push(depPath);\n }\n });\n\n return toggledFields;\n }\n\n unregister(path: string) {\n this.fieldConfigs.delete(path);\n this.hiddenFields.delete(path);\n this.dependencies.delete(path);\n\n this.dependencies.forEach((dependentsSet) => {\n dependentsSet.delete(path);\n });\n }\n\n unregisterPrefix(prefix: string) {\n const pathsToRemove: string[] = [];\n\n this.fieldConfigs.forEach((_, path) => {\n if (path.startsWith(prefix)) {\n pathsToRemove.push(path);\n }\n });\n\n pathsToRemove.forEach((path) => this.unregister(path));\n }\n\n private evaluateFieldCondition(path: string, values: T) {\n const config = this.fieldConfigs.get(path);\n const showIf = config?.conditional?.showIf;\n if (!showIf) return;\n\n if (showIf(values)) {\n this.hiddenFields.delete(path);\n } else {\n this.hiddenFields.add(path);\n }\n }\n\n private isEmpty(value: any): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === \"string\" && value.trim() === \"\") ||\n (Array.isArray(value) && value.length === 0)\n );\n }\n}\n","import { deepClone, deepEqual } from \"../utils\";\n\nexport class BitHistoryManager<T extends object = any> {\n private history: T[] = [];\n private historyIndex: number = -1;\n\n constructor(\n private enableHistory: boolean,\n private maxHistory: number = 15,\n ) {}\n\n saveSnapshot(values: T) {\n if (!this.enableHistory) return;\n\n const currentSnapshot = this.history[this.historyIndex];\n\n if (currentSnapshot && deepEqual(currentSnapshot, values)) {\n return;\n }\n\n if (this.historyIndex < this.history.length - 1) {\n this.history = this.history.slice(0, this.historyIndex + 1);\n }\n\n this.history.push(deepClone(values));\n\n if (this.history.length > this.maxHistory) {\n this.history.shift();\n } else {\n this.historyIndex++;\n }\n }\n\n get canUndo(): boolean {\n return this.enableHistory ? this.historyIndex > 0 : false;\n }\n\n get canRedo(): boolean {\n return this.enableHistory\n ? this.historyIndex < this.history.length - 1\n : false;\n }\n\n undo(): T | null {\n if (this.canUndo) {\n this.historyIndex--;\n return deepClone(this.history[this.historyIndex]);\n }\n return null;\n }\n\n redo(): T | null {\n if (this.canRedo) {\n this.historyIndex++;\n return deepClone(this.history[this.historyIndex]);\n }\n return null;\n }\n\n reset(initialValues: T) {\n this.history = [];\n this.historyIndex = -1;\n this.saveSnapshot(initialValues);\n }\n}\n","import { BitStoreAdapter } from \"./types\";\nimport { getDeepValue, setDeepValue, shiftKeys, swapKeys, moveKeys } from \"../utils\";\n\nexport class BitArrayManager<T extends object = any> {\n constructor(private store: BitStoreAdapter<T>) {}\n\n pushItem(path: string, value: any) {\n const arr = getDeepValue(this.store.getState().values, path) || [];\n this.store.setField(path, [...arr, value]);\n this.store.internalSaveSnapshot();\n }\n\n prependItem(path: string, value: any) {\n const arr = getDeepValue(this.store.getState().values, path) || [];\n this.store.setField(path, [value, ...arr]);\n this.store.internalSaveSnapshot();\n }\n\n insertItem(path: string, index: number, value: any) {\n const arr = [...(getDeepValue(this.store.getState().values, path) || [])];\n arr.splice(index, 0, value);\n this.store.setField(path, arr);\n this.store.internalSaveSnapshot();\n }\n\n removeItem(path: string, index: number) {\n const state = this.store.getState();\n const arr = getDeepValue(state.values, path);\n if (!Array.isArray(arr)) return;\n\n if (this.store.unregisterPrefix) {\n this.store.unregisterPrefix(`${path}.${index}.`);\n }\n\n const newArray = arr.filter((_, i) => i !== index);\n const newValues = setDeepValue(state.values, path, newArray);\n\n const isDirty = (this.store as any).updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: shiftKeys(state.errors, path, index),\n touched: shiftKeys(state.touched, path, index),\n isDirty,\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n swapItems(path: string, indexA: number, indexB: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n [arr[indexA], arr[indexB]] = [arr[indexB], arr[indexA]];\n\n const newValues = setDeepValue(state.values, path, arr);\n\n const isDirty = (this.store as any).updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: swapKeys(state.errors, path, indexA, indexB),\n touched: swapKeys(state.touched, path, indexA, indexB),\n isDirty,\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n moveItem(path: string, from: number, to: number) {\n const state = this.store.getState();\n const arr = [...(getDeepValue(state.values, path) || [])];\n const [item] = arr.splice(from, 1);\n arr.splice(to, 0, item);\n\n const newValues = setDeepValue(state.values, path, arr);\n\n const isDirty = (this.store as any).updateDirtyForPath(\n path,\n newValues,\n this.store.getConfig().initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: moveKeys(state.errors, path, from, to),\n touched: moveKeys(state.touched, path, from, to),\n isDirty,\n });\n\n this.store.internalSaveSnapshot();\n this.revalidate(path);\n }\n\n private revalidate(path: string) {\n const storeInternals = this.store as any;\n\n if (typeof storeInternals.triggerValidation === \"function\") {\n storeInternals.triggerValidation([path]);\n } else if (typeof this.store.validate === \"function\") {\n this.store.validate();\n }\n }\n}\n","import { getDeepValue, setDeepValue, deepEqual } from \"../utils\";\nimport type { BitResolvedConfig } from \"./types\";\n\nexport class BitComputedManager<T extends object> {\n constructor(private config: BitResolvedConfig<T>) {}\n\n apply(values: T): T {\n if (!this.config.computed) return values;\n\n let nextValues = values;\n const computedEntries = Object.entries(\n this.config.computed,\n ) as [string, (v: T) => unknown][];\n\n for (let i = 0; i < 2; i++) {\n let changedInThisPass = false;\n\n for (const [path, computeFn] of computedEntries) {\n const newValue = computeFn(nextValues);\n const currentValue = getDeepValue(nextValues, path);\n\n if (!deepEqual(currentValue, newValue)) {\n nextValues = setDeepValue(nextValues, path, newValue);\n changedInThisPass = true;\n }\n }\n\n if (!changedInThisPass) break;\n }\n\n return nextValues;\n }\n}\n","import { BitConfig, BitErrors, BitState, BitValidationAdapter } from \"./types\";\n\nexport class BitValidationManager<T extends object> {\n private validationTimeout?: any;\n private currentValidationId: number = 0;\n private asyncTimers: Record<string, ReturnType<typeof setTimeout>> = {};\n private asyncRequests: Record<string, number> = {};\n public asyncErrors: Record<string, string> = {};\n\n constructor(private store: BitValidationAdapter<T>) {}\n\n handleAsync(path: string, value: any) {\n const config =\n this.store.depsMg.fieldConfigs.get(path) ||\n this.store.config.fields?.[path];\n const asyncValidate = config?.validation?.asyncValidate;\n if (!asyncValidate) return;\n\n if (this.asyncTimers[path]) clearTimeout(this.asyncTimers[path]);\n\n const delay = config.validation?.asyncValidateDelay ?? 500;\n\n this.asyncTimers[path] = setTimeout(async () => {\n const currentRequestId = (this.asyncRequests[path] || 0) + 1;\n this.asyncRequests[path] = currentRequestId;\n\n this.store.internalUpdateState({\n isValidating: { ...this.store.getState().isValidating, [path]: true },\n });\n\n try {\n const errorMessage = await asyncValidate(\n value,\n this.store.getState().values,\n );\n\n if (this.asyncRequests[path] !== currentRequestId) return;\n\n if (errorMessage) {\n this.asyncErrors[path] = errorMessage;\n this.store.setError(path, errorMessage);\n } else {\n delete this.asyncErrors[path];\n const newErrors = { ...this.store.getState().errors };\n delete newErrors[path as keyof BitErrors<T>];\n\n this.store.internalUpdateState({\n errors: newErrors,\n isValid: Object.keys(newErrors).length === 0,\n });\n }\n } finally {\n if (this.asyncRequests[path] === currentRequestId) {\n this.store.internalUpdateState({\n isValidating: {\n ...this.store.getState().isValidating,\n [path]: false,\n },\n });\n }\n }\n }, delay);\n }\n\n trigger(scopeFields?: string[]) {\n if (this.validationTimeout) clearTimeout(this.validationTimeout);\n\n const delay = this.store.config.validationDelay ?? 300;\n\n if (delay > 0) {\n this.validationTimeout = setTimeout(() => {\n this.validate({ scopeFields });\n }, delay);\n } else {\n this.validate({ scopeFields });\n }\n }\n\n async validate(options?: {\n scope?: string;\n scopeFields?: string[];\n }): Promise<boolean> {\n const validationId = ++this.currentValidationId;\n const currentState = this.store.getState();\n\n let targetFields: string[] | undefined = options?.scopeFields;\n\n if (options?.scope && this.store.config.scopes?.[options.scope]) {\n targetFields = this.store.config.scopes[options.scope];\n }\n\n let allErrors: Record<string, any> = this.store.config.resolver\n ? await this.store.config.resolver(currentState.values, {\n scopeFields: targetFields,\n })\n : {};\n\n const dynamicRequiredErrors = this.store.depsMg.getRequiredErrors(\n currentState.values,\n this.store.config.defaultRequiredMessage,\n );\n allErrors = { ...allErrors, ...dynamicRequiredErrors };\n\n this.store.depsMg.hiddenFields.forEach((hiddenPath: string) => {\n delete allErrors[hiddenPath];\n delete this.asyncErrors[hiddenPath];\n });\n\n if (validationId !== this.currentValidationId) return currentState.isValid;\n\n if (targetFields) {\n const newErrors = { ...currentState.errors };\n\n targetFields.forEach((field) => {\n if (allErrors[field]) {\n newErrors[field as keyof BitErrors<T>] = allErrors[field];\n } else if (this.asyncErrors[field]) {\n newErrors[field as keyof BitErrors<T>] = this.asyncErrors[\n field\n ] as any;\n } else {\n delete newErrors[field as keyof BitErrors<T>];\n }\n });\n\n const isValid = Object.keys(newErrors).length === 0;\n this.store.internalUpdateState({ errors: newErrors, isValid });\n\n return targetFields.every((f) => !allErrors[f] && !this.asyncErrors[f]);\n }\n\n allErrors = { ...this.asyncErrors, ...allErrors };\n const isValid = Object.keys(allErrors).length === 0;\n\n this.store.internalUpdateState({\n errors: allErrors as BitErrors<T>,\n isValid,\n });\n\n return isValid;\n }\n\n clear(path: string) {\n if (this.asyncTimers[path]) clearTimeout(this.asyncTimers[path]);\n delete this.asyncErrors[path];\n }\n\n cancelAll() {\n if (this.validationTimeout) clearTimeout(this.validationTimeout);\n Object.values(this.asyncTimers).forEach((t) => clearTimeout(t));\n }\n}\n","import { BitErrors, BitLifecycleAdapter } from \"./types\";\nimport { deepClone, getDeepValue, setDeepValue } from \"../utils\";\n\nexport class BitLifecycleManager<T extends object> {\n constructor(private store: BitLifecycleAdapter<T>) {}\n\n updateField(path: string, value: any) {\n const state = this.store.getState();\n const newValues = setDeepValue(state.values, path, value);\n const newErrors = { ...state.errors };\n\n delete newErrors[path as keyof BitErrors<T>];\n this.store.validatorMg.clear(path);\n\n const toggledFields = this.store.depsMg.updateDependencies(path, newValues);\n\n toggledFields.forEach((depPath) => {\n if (this.store.depsMg.isHidden(depPath)) {\n delete newErrors[depPath as keyof BitErrors<T>];\n this.store.validatorMg.clear(depPath);\n }\n });\n\n const isDirty = (this.store as any).updateDirtyForPath(\n path,\n newValues,\n this.store.config.initialValues,\n );\n\n this.store.internalUpdateState({\n values: newValues,\n errors: newErrors,\n isValid: Object.keys(newErrors).length === 0,\n isDirty,\n });\n\n if (this.store.config.resolver) {\n this.store.validatorMg.trigger([path]);\n }\n\n this.store.validatorMg.handleAsync(path, value);\n\n return { visibilitiesChanged: toggledFields.length > 0 };\n }\n\n updateAll(newValues: T) {\n const clonedValues = deepClone(newValues);\n\n this.store.config.initialValues = deepClone(clonedValues);\n\n this.store.validatorMg.cancelAll();\n this.store.depsMg.evaluateAll(clonedValues);\n\n (this.store as any).clearDirtyPaths();\n\n this.store.internalUpdateState({\n values: clonedValues,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n\n this.store.internalSaveSnapshot();\n this.store.validatorMg.validate();\n }\n\n async submit(onSuccess: (values: T) => void | Promise<void>) {\n const currentState = this.store.getState();\n\n if (currentState.isSubmitting) return;\n\n this.store.validatorMg.cancelAll();\n\n this.store.internalUpdateState({ isSubmitting: true });\n\n const isValid = await this.store.validatorMg.validate();\n\n if (isValid) {\n try {\n let valuesToSubmit = deepClone(this.store.getState().values);\n\n this.store.depsMg.hiddenFields.forEach((hiddenPath) => {\n valuesToSubmit = setDeepValue(valuesToSubmit, hiddenPath, undefined);\n });\n\n if (this.store.config.transform) {\n for (const path in this.store.config.transform) {\n const transformer = this.store.config.transform[path];\n if (transformer) {\n const currentVal = getDeepValue(valuesToSubmit, path);\n valuesToSubmit = setDeepValue(\n valuesToSubmit,\n path,\n transformer(currentVal, this.store.getState().values),\n );\n }\n }\n }\n\n await onSuccess(valuesToSubmit);\n } catch (error) {\n console.error(error);\n }\n } else {\n const currentErrors = this.store.getState().errors;\n const newTouched = { ...this.store.getState().touched };\n\n Object.keys(currentErrors).forEach((path) => {\n newTouched[path as keyof typeof newTouched] = true;\n });\n\n this.store.internalUpdateState({ touched: newTouched });\n }\n\n this.store.internalUpdateState({ isSubmitting: false });\n }\n\n reset() {\n this.store.validatorMg.cancelAll();\n\n const initialCloned = deepClone(this.store.config.initialValues);\n\n this.store.depsMg.evaluateAll(initialCloned);\n\n (this.store as any).clearDirtyPaths();\n\n this.store.internalUpdateState({\n values: initialCloned,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isDirty: false,\n isSubmitting: false,\n });\n\n this.store.historyMg.reset(initialCloned);\n }\n}\n","export function getDevToolsCSS(): string {\n return `\n .bit-devtools-container {\n position: fixed;\n bottom: 20px;\n right: 20px;\n z-index: 9999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n .bit-devtools-trigger {\n background: #10b981;\n color: #fff;\n border: none;\n border-radius: 50%;\n width: 48px;\n height: 48px;\n cursor: pointer;\n box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: transform 0.2s;\n font-size: 16px;\n margin-top: 16px;\n }\n .bit-devtools-trigger:hover { transform: scale(1.05); }\n\n .bit-devtools-panel {\n width: 450px;\n max-height: 80vh;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 8px;\n padding: 16px;\n overflow-y: auto;\n box-shadow: 0 20px 25px -5px rgba(0,0,0,0.5), 0 8px 10px -6px rgba(0,0,0,0.5);\n border: 1px solid #334155;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .bit-devtools-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 12px;\n border-bottom: 1px solid #1e293b;\n }\n .bit-devtools-header h2 { margin: 0; font-size: 16px; display: flex; align-items: center; gap: 8px; }\n\n .bit-store-block {\n background: #1e293b;\n border-radius: 6px;\n padding: 12px;\n border: 1px solid #334155;\n }\n\n .bit-store-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n }\n .bit-store-title { margin: 0; color: #38bdf8; font-size: 14px; font-weight: bold; }\n\n .bit-badge-group { display: flex; gap: 6px; flex-wrap: wrap; }\n .bit-badge { font-size: 10px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; font-weight: bold; }\n .badge-success { background: rgba(16, 185, 129, 0.2); color: #34d399; border: 1px solid rgba(16, 185, 129, 0.2); }\n .badge-error { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.2); }\n .badge-warn { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.2); }\n .badge-info { background: rgba(56, 189, 248, 0.2); color: #7dd3fc; border: 1px solid rgba(56, 189, 248, 0.2); }\n\n .bit-section-title { font-size: 11px; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; margin: 12px 0 4px 0; display: block; }\n\n .bit-controls { display: flex; gap: 6px; margin-bottom: 12px; background: #0f172a; padding: 8px; border-radius: 6px; }\n .bit-action-btn { flex: 1; background: #334155; color: #e2e8f0; border: 1px solid #475569; padding: 6px 0; border-radius: 4px; cursor: pointer; font-size: 11px; display: flex; align-items: center; justify-content: center; gap: 4px; transition: all 0.2s; }\n .bit-action-btn:hover:not(:disabled) { background: #475569; }\n .bit-action-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n .bit-btn-reset { color: #fca5a5; border-color: rgba(239,68,68,0.3); }\n .bit-btn-reset:hover { background: rgba(239,68,68,0.1) !important; }\n\n pre.bit-pre { background: #020617; padding: 10px; border-radius: 4px; font-size: 11px; overflow-x: auto; border: 1px solid #1e293b; margin: 0; color: #e2e8f0; }\n pre.bit-error-box { background: rgba(239, 68, 68, 0.05); padding: 10px; border-radius: 4px; font-size: 11px; border: 1px dashed #ef4444; color: #fca5a5; margin: 0; overflow-x: auto; }\n `;\n}\n","import { getDevToolsCSS } from \"./styles\";\nimport type { DevToolsActions } from \"../types\";\n\nexport type { DevToolsActions };\n\nexport class BitFormDevToolsUI {\n private container: HTMLElement;\n private actions: DevToolsActions;\n private rootElement: HTMLDivElement;\n private currentStoresState: Record<string, any> = {};\n private isOpen: boolean = false;\n\n constructor(container: HTMLElement, actions: DevToolsActions) {\n this.container = container;\n this.actions = actions;\n\n if (!document.getElementById(\"bit-devtools-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"bit-devtools-styles\";\n style.textContent = getDevToolsCSS();\n document.head.appendChild(style);\n }\n\n this.rootElement = document.createElement(\"div\");\n this.rootElement.className = \"bit-devtools-container\";\n this.container.appendChild(this.rootElement);\n\n this.rootElement.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement;\n\n // Evento do botão flutuante\n if (target.closest(\".bit-devtools-trigger\")) {\n this.isOpen = !this.isOpen;\n this.render();\n return;\n }\n\n // Eventos dos botões de ação\n const btn = target.closest(\".bit-action-btn\");\n if (btn && !btn.hasAttribute(\"disabled\")) {\n const action = btn.getAttribute(\"data-action\");\n const storeId = btn.getAttribute(\"data-store\");\n\n if (action && storeId) {\n if (action === \"undo\") this.actions.onUndo(storeId);\n if (action === \"redo\") this.actions.onRedo(storeId);\n if (action === \"reset\") this.actions.onReset(storeId);\n }\n }\n });\n }\n\n public updateState(storesState: Record<string, any>) {\n this.currentStoresState = storesState;\n this.render();\n }\n\n private render() {\n const storeEntries = Object.entries(this.currentStoresState);\n if (storeEntries.length === 0) {\n this.rootElement.innerHTML = \"\";\n return;\n }\n\n let panelHtml = \"\";\n\n if (this.isOpen) {\n panelHtml = `\n <div class=\"bit-devtools-panel\">\n <div class=\"bit-devtools-header\">\n <h2><span style=\"font-size: 20px;\">🛠</span> Bit-Form DevTools</h2>\n <span style=\"font-size: 11px; color: #64748b;\">v1.0.0</span>\n </div>\n `;\n\n for (const [id, state] of storeEntries) {\n const hasErrors = Object.keys(state.errors || {}).length > 0;\n\n // Lemos os metadados do histórico que o adaptador injetou\n const meta = state._meta || {\n totalSteps: 0,\n currentIndex: -1,\n canUndo: false,\n canRedo: false,\n };\n const currentStep = meta.currentIndex + 1;\n const totalSteps = meta.totalSteps;\n\n panelHtml += `\n <div class=\"bit-store-block\">\n <div class=\"bit-store-header\">\n <h3 class=\"bit-store-title\">${id}</h3>\n <div class=\"bit-badge-group\">\n <span class=\"bit-badge ${state.isValid ? \"badge-success\" : \"badge-error\"}\">\n ${state.isValid ? \"✓ Valid\" : \"✕ Invalid\"}\n </span>\n ${state.isDirty ? `<span class=\"bit-badge badge-warn\">Dirty</span>` : \"\"}\n ${state.isSubmitting ? `<span class=\"bit-badge badge-info\">⏳ Submitting</span>` : \"\"}\n </div>\n </div>\n\n <span class=\"bit-section-title\">Time Travel (${currentStep}/${totalSteps})</span>\n \n <div class=\"bit-controls\">\n <button class=\"bit-action-btn\" data-action=\"undo\" data-store=\"${id}\" ${meta.canUndo ? \"\" : \"disabled\"}>\n <span>↺</span> Undo\n </button>\n <button class=\"bit-action-btn\" data-action=\"redo\" data-store=\"${id}\" ${meta.canRedo ? \"\" : \"disabled\"}>\n <span>↻</span> Redo\n </button>\n <button class=\"bit-action-btn bit-btn-reset\" data-action=\"reset\" data-store=\"${id}\">\n <span>🗑</span> Reset\n </button>\n </div>\n `;\n\n if (hasErrors) {\n panelHtml += `\n <span class=\"bit-section-title\" style=\"color: #f87171;\">⚠️ Validations Failing</span>\n <pre class=\"bit-error-box\">${JSON.stringify(state.errors, null, 2)}</pre>\n `;\n }\n\n panelHtml += `\n <span class=\"bit-section-title\">Values</span>\n <pre class=\"bit-pre\">${JSON.stringify(state.values, null, 2)}</pre>\n </div>\n `;\n }\n\n panelHtml += `</div>`;\n }\n\n // Botão Flutuante (sempre renderizado)\n const triggerHtml = `\n <button class=\"bit-devtools-trigger\" style=\"transform: ${this.isOpen ? \"scale(0.9)\" : \"scale(1)\"};\" title=\"Abrir DevTools\">\n ${this.isOpen ? \"✖\" : \"Bit\"}\n </button>\n `;\n\n this.rootElement.innerHTML = panelHtml + triggerHtml;\n }\n}\n","import { bitBus, BitStore } from \"../../core\";\nimport { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupLocalDevTools(container: HTMLElement) {\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => (bitBus.stores[id] as BitStore<any>)?.undo(),\n onRedo: (id) => (bitBus.stores[id] as BitStore<any>)?.redo(),\n onReset: (id) => (bitBus.stores[id] as BitStore<any>)?.reset(),\n });\n\n const getFullSnapshot = () => {\n const states: Record<string, any> = {};\n\n for (const [id, instance] of Object.entries(bitBus.stores)) {\n const storeInstance = instance as any;\n const state = storeInstance.getState();\n\n const historyManager = storeInstance?.historyMg;\n const historyArray = historyManager?.history || [];\n const currentIndex = historyManager?.historyIndex ?? -1;\n\n states[id] = {\n ...state,\n _meta: {\n canUndo: storeInstance?.canUndo,\n canRedo: storeInstance?.canRedo,\n totalSteps: historyArray.length,\n currentIndex: currentIndex,\n },\n };\n }\n return states;\n };\n\n ui.updateState(getFullSnapshot());\n\n const unsubscribe = bitBus.subscribe(() => {\n ui.updateState(getFullSnapshot());\n });\n\n return {\n ui,\n destroy: () => {\n unsubscribe();\n container.innerHTML = \"\";\n },\n };\n}\n","import { BitFormDevToolsUI } from \"../ui\";\n\nexport function setupRemoteDevTools(\n container: HTMLElement,\n url: string = \"ws://localhost:3000\",\n) {\n const socket = new WebSocket(url);\n\n const ui = new BitFormDevToolsUI(container, {\n onUndo: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"undo\" }),\n onRedo: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"redo\" }),\n onReset: (id) => sendMessage(\"ACTION\", { storeId: id, action: \"reset\" }),\n });\n\n const sendMessage = (type: string, payload: any) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type, payload }));\n } else {\n console.warn(\n \"[bit-form] Tentativa de envio falhou. WebSocket não está aberto.\",\n );\n }\n };\n\n socket.addEventListener(\"open\", () => {\n console.log(`[bit-form] Conectado ao DevTools remoto em ${url}`);\n });\n\n socket.addEventListener(\"message\", (msg: MessageEvent) => {\n try {\n const data = JSON.parse(msg.data);\n if (data.type === \"STATE_UPDATE\") {\n ui.updateState(data.payload);\n }\n } catch (e) {\n console.error(\"[bit-form] Erro ao processar mensagem do WebSocket:\", e);\n }\n });\n\n socket.addEventListener(\"error\", (err) => {\n console.error(\"[bit-form] Erro na conexão do DevTools remoto:\", err);\n });\n\n return ui;\n}\n","import { setupLocalDevTools } from \"./adapters/local\";\nimport { setupRemoteDevTools } from \"./adapters/remote\";\nimport type { BitDevToolsOptions } from \"./types\";\n\nexport type { BitDevToolsOptions };\n\nexport function initDevTools(options: BitDevToolsOptions = {}) {\n const { mode = \"local\", url } = options;\n let containerEl: HTMLElement;\n\n let isAutoCreated = false;\n\n if (typeof options.container === \"string\") {\n const el = document.querySelector<HTMLElement>(options.container);\n if (!el)\n throw new Error(\n `[bit-form] Container '${options.container}' não encontrado na página.`,\n );\n containerEl = el;\n } else if (options.container instanceof HTMLElement) {\n containerEl = options.container;\n } else {\n containerEl = document.createElement(\"div\");\n containerEl.id = \"bit-form-devtools-root\";\n containerEl.style.position = \"fixed\";\n containerEl.style.bottom = \"20px\";\n containerEl.style.right = \"20px\";\n containerEl.style.zIndex = \"9999\";\n containerEl.style.maxHeight = \"80vh\";\n containerEl.style.overflowY = \"auto\";\n containerEl.style.boxShadow = \"0 10px 25px rgba(0,0,0,0.1)\";\n document.body.appendChild(containerEl);\n isAutoCreated = true;\n }\n\n let adapterInstance: any;\n\n if (mode === \"local\") {\n console.log(\"[bit-form] DevTools iniciado em modo Local.\");\n adapterInstance = setupLocalDevTools(containerEl);\n } else if (mode === \"remote\") {\n console.log(\"[bit-form] DevTools iniciado em modo Remote.\");\n adapterInstance = setupRemoteDevTools(containerEl, url);\n } else {\n throw new Error(`[bit-form] Modo DevTools inválido: ${mode}`);\n }\n\n return {\n ...adapterInstance,\n destroy: () => {\n if (adapterInstance && typeof adapterInstance.destroy === \"function\") {\n adapterInstance.destroy();\n }\n\n if (isAutoCreated && containerEl.parentNode) {\n containerEl.parentNode.removeChild(containerEl);\n } else {\n containerEl.innerHTML = \"\";\n }\n },\n };\n}\n","import { BitStore } from \"./index\";\nimport { setupRemoteBridge } from \"../../devtools/bridge\";\nimport { initDevTools } from \"../../devtools\";\n\nexport class BitDevtoolsManager<T extends object> {\n private store: BitStore<T>;\n private cleanupFn: (() => void) | null = null;\n\n constructor(store: BitStore<T>) {\n this.store = store;\n this.setup();\n }\n\n private setup() {\n const devTools = (this.store.config as any).devTools;\n if (!devTools) return;\n\n const options =\n typeof devTools === \"boolean\"\n ? { enabled: devTools, mode: \"local\" }\n : { enabled: true, ...devTools };\n\n if (!options.enabled) return;\n\n if (options.mode === \"remote\") {\n const url = options.url || \"ws://localhost:3000\";\n this.cleanupFn = setupRemoteBridge(url);\n } else {\n const instance = initDevTools();\n\n if (instance && typeof instance.destroy === \"function\") {\n this.cleanupFn = instance.destroy;\n }\n }\n }\n\n public destroy() {\n if (this.cleanupFn) {\n this.cleanupFn();\n }\n }\n}\n","import { bitBus } from \"./bus\";\nimport { BitMask } from \"../mask/types\";\nimport {\n BitConfig,\n BitErrors,\n BitState,\n BitFieldDefinition,\n BitResolvedConfig,\n BitStoreAdapter,\n BitValidationAdapter,\n BitLifecycleAdapter,\n BitPath,\n BitPathValue,\n BitArrayPath,\n BitArrayItem,\n} from \"./types\";\nimport {\n collectDirtyPaths,\n deepClone,\n deepEqual,\n getDeepValue,\n valueEqual,\n} from \"../utils\";\nimport { normalizeConfig } from \"./config\";\nimport { BitDependencyManager } from \"./dependency-manager\";\nimport { BitHistoryManager } from \"./history-manager\";\nimport { BitArrayManager } from \"./array-manager\";\nimport { BitComputedManager } from \"./computed-manager\";\nimport { BitValidationManager } from \"./validation-manager\";\nimport { BitLifecycleManager } from \"./lifecycle-manager\";\nimport { BitDevtoolsManager } from \"./devtools-manager\";\n\nexport class BitStore<T extends object = any>\n implements BitStoreAdapter<T>, BitValidationAdapter<T>, BitLifecycleAdapter<T>\n{\n private state: BitState<T>;\n private listeners: Set<() => void> = new Set();\n\n public config: BitResolvedConfig<T>;\n public depsMg: BitDependencyManager<T>;\n public historyMg: BitHistoryManager<T>;\n public validatorMg: BitValidationManager<T>;\n public computedMg: BitComputedManager<T>;\n public lifecycleMg: BitLifecycleManager<T>;\n public arraysMg: BitArrayManager<T>;\n public devtoolsMg: BitDevtoolsManager<T>;\n public storeId: string;\n\n private dirtyPaths: Set<string> = new Set();\n\n constructor(config: BitConfig<T> = {}) {\n this.config = normalizeConfig(config);\n\n this.depsMg = new BitDependencyManager<T>();\n this.historyMg = new BitHistoryManager<T>(\n !!this.config.enableHistory,\n this.config.historyLimit ?? 15,\n );\n this.computedMg = new BitComputedManager<T>(this.config);\n this.validatorMg = new BitValidationManager<T>(this);\n this.arraysMg = new BitArrayManager<T>(this);\n this.lifecycleMg = new BitLifecycleManager<T>(this);\n this.devtoolsMg = new BitDevtoolsManager<T>(this);\n\n const initialValues = deepClone(this.config.initialValues);\n const valuesWithComputeds = this.computedMg.apply(initialValues);\n\n this.state = {\n values: valuesWithComputeds,\n errors: {},\n touched: {},\n isValidating: {},\n isValid: true,\n isSubmitting: false,\n isDirty: false,\n };\n\n if (this.config.fields) {\n Object.entries(this.config.fields).forEach(([path, fieldConfig]) => {\n this.depsMg.register(\n path,\n fieldConfig as BitFieldDefinition<T>,\n initialValues,\n );\n });\n }\n\n this.internalSaveSnapshot();\n\n this.storeId =\n this.config.name || `bit-form-${Math.random().toString(36).substring(2, 9)}`;\n bitBus.stores[this.storeId] = this;\n }\n\n getConfig() {\n return this.config;\n }\n\n getState(): BitState<T> {\n return this.state;\n }\n\n get isValid(): boolean {\n return this.state.isValid;\n }\n\n get isSubmitting(): boolean {\n return this.state.isSubmitting;\n }\n\n get isDirty(): boolean {\n return this.state.isDirty;\n }\n\n unregisterField<P extends BitPath<T>>(path: P) {\n this.depsMg.unregister(path);\n\n const newErrors = { ...this.state.errors };\n const newTouched = { ...this.state.touched };\n let stateChanged = false;\n\n if (newErrors[path as keyof BitErrors<T>]) {\n delete newErrors[path as keyof BitErrors<T>];\n stateChanged = true;\n }\n\n if (newTouched[path as keyof typeof newTouched]) {\n delete newTouched[path as keyof typeof newTouched];\n stateChanged = true;\n }\n\n if (stateChanged) {\n this.internalUpdateState({\n errors: newErrors,\n touched: newTouched,\n });\n }\n }\n\n unregisterPrefix(prefix: string) {\n this.depsMg.unregisterPrefix(prefix);\n }\n\n registerField(path: string, config: BitFieldDefinition<T>) {\n this.depsMg.register(path, config, this.state.values);\n if (this.depsMg.isHidden(path)) {\n this.notify();\n }\n }\n\n isHidden<P extends BitPath<T>>(path: P): boolean {\n return this.depsMg.isHidden(path);\n }\n\n isRequired<P extends BitPath<T>>(path: P): boolean {\n return this.depsMg.isRequired(path, this.state.values);\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n watch<P extends BitPath<T>>(\n path: P,\n callback: (value: BitPathValue<T, P>) => void,\n ) {\n let lastValue = deepClone(getDeepValue(this.state.values, path));\n return this.subscribe(() => {\n const newValue = getDeepValue(this.state.values, path);\n if (!deepEqual(newValue, lastValue)) {\n lastValue = deepClone(newValue);\n callback(newValue);\n }\n });\n }\n\n setField<P extends BitPath<T>>(path: P, value: BitPathValue<T, P>) {\n const { visibilitiesChanged } = this.lifecycleMg.updateField(path, value);\n\n if (!this.config.resolver || visibilitiesChanged) {\n this.notify();\n }\n }\n\n blurField<P extends BitPath<T>>(path: P) {\n this.internalSaveSnapshot();\n\n if (!this.state.touched[path as keyof typeof this.state.touched]) {\n this.internalUpdateState({\n touched: { ...this.state.touched, [path]: true },\n });\n }\n\n this.validatorMg.trigger([path]);\n }\n\n setValues(newValues: T) {\n this.lifecycleMg.updateAll(newValues);\n }\n\n setError(path: string, message: string | undefined) {\n const newErrors = { ...this.state.errors, [path]: message };\n if (!message) delete (newErrors as any)[path];\n\n this.internalUpdateState({ errors: newErrors });\n }\n\n setErrors(errors: BitErrors<T>) {\n this.internalUpdateState({\n errors: { ...this.state.errors, ...errors },\n });\n }\n\n setServerErrors(serverErrors: Record<string, string[] | string>) {\n const formattedErrors: BitErrors<T> = {};\n\n for (const [key, value] of Object.entries(serverErrors)) {\n formattedErrors[key as keyof BitErrors<T>] = Array.isArray(value)\n ? value[0]\n : (value as any);\n }\n\n this.setErrors(formattedErrors);\n }\n\n reset() {\n this.lifecycleMg.reset();\n }\n\n registerMask(name: string, mask: BitMask) {\n this.config.masks![name] = mask;\n }\n\n pushItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.pushItem(path, value);\n }\n prependItem<P extends BitArrayPath<T>>(\n path: P,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.prependItem(path, value);\n }\n insertItem<P extends BitArrayPath<T>>(\n path: P,\n index: number,\n value: BitArrayItem<BitPathValue<T, P>>,\n ) {\n this.arraysMg.insertItem(path, index, value);\n }\n removeItem<P extends BitArrayPath<T>>(path: P, index: number) {\n this.arraysMg.removeItem(path, index);\n }\n swapItems<P extends BitArrayPath<T>>(\n path: P,\n indexA: number,\n indexB: number,\n ) {\n this.arraysMg.swapItems(path, indexA, indexB);\n }\n moveItem<P extends BitArrayPath<T>>(path: P, from: number, to: number) {\n this.arraysMg.moveItem(path, from, to);\n }\n\n get canUndo(): boolean {\n return this.historyMg.canUndo;\n }\n get canRedo(): boolean {\n return this.historyMg.canRedo;\n }\n\n undo() {\n const prevState = this.historyMg.undo();\n if (prevState) {\n const isDirty = this.rebuildDirtyPaths(\n prevState,\n this.config.initialValues,\n );\n this.internalUpdateState({ values: prevState, isDirty });\n this.validatorMg.validate();\n }\n }\n\n redo() {\n const nextState = this.historyMg.redo();\n if (nextState) {\n const isDirty = this.rebuildDirtyPaths(\n nextState,\n this.config.initialValues,\n );\n this.internalUpdateState({ values: nextState, isDirty });\n this.validatorMg.validate();\n }\n }\n\n validate(options?: {\n scope?: string;\n scopeFields?: string[];\n }): Promise<boolean> {\n return this.validatorMg.validate(options);\n }\n\n getStepStatus(scopeName: string) {\n const fields = this.config.scopes?.[scopeName] || [];\n const hasErrors = fields.some(\n (f) => !!this.state.errors[f as keyof BitErrors<T>],\n );\n const isDirty = fields.some((f) => {\n const current = getDeepValue(this.state.values, f);\n const initial = getDeepValue(this.config.initialValues, f);\n return !valueEqual(current, initial);\n });\n const errors = this.getStepErrors(scopeName);\n\n return { hasErrors, isDirty, errors };\n }\n\n getStepErrors(scopeName: string): Record<string, string> {\n const fields = this.config.scopes?.[scopeName] || [];\n const result: Record<string, string> = {};\n\n for (const field of fields) {\n const error = this.state.errors[field as keyof BitErrors<T>];\n if (error) {\n result[field] = error;\n }\n }\n\n return result;\n }\n\n isFieldDirty(path: string): boolean {\n const currentValue = getDeepValue(this.state.values, path);\n const initialValue = getDeepValue(this.config.initialValues, path);\n\n return !valueEqual(currentValue, initialValue);\n }\n\n isFieldValidating(path: string): boolean {\n return !!this.getState().isValidating[path];\n }\n\n async submit(onSuccess: (values: T) => void | Promise<void>) {\n return this.lifecycleMg.submit(onSuccess);\n }\n\n internalUpdateState(partialState: Partial<BitState<T>>) {\n let nextState = { ...this.state, ...partialState };\n\n if (partialState.values) {\n nextState.values = this.computedMg.apply(partialState.values);\n }\n\n if (partialState.errors) {\n nextState.isValid = Object.keys(nextState.errors).length === 0;\n }\n\n this.state = nextState;\n this.notify();\n\n bitBus.dispatch(this.storeId, this.state);\n }\n\n internalSaveSnapshot() {\n this.historyMg.saveSnapshot(this.state.values);\n }\n\n /** Updates dirtyPaths for a single path change. Returns new isDirty. */\n updateDirtyForPath(path: string, values: T, initialValues: T): boolean {\n for (const p of this.dirtyPaths) {\n if (p.startsWith(path + \".\")) this.dirtyPaths.delete(p);\n }\n const current = getDeepValue(values, path);\n const initial = getDeepValue(initialValues, path);\n if (valueEqual(current, initial)) {\n this.dirtyPaths.delete(path);\n } else {\n this.dirtyPaths.add(path);\n }\n return this.dirtyPaths.size > 0;\n }\n\n clearDirtyPaths(): void {\n this.dirtyPaths.clear();\n }\n\n /** Rebuilds dirtyPaths from full values (used for undo/redo/updateAll). */\n rebuildDirtyPaths(values: T, initialValues: T): boolean {\n this.dirtyPaths = collectDirtyPaths(values, initialValues);\n return this.dirtyPaths.size > 0;\n }\n\n cleanup() {\n this.listeners.clear();\n this.validatorMg.cancelAll();\n\n delete bitBus.stores[this.storeId];\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener());\n }\n}\n","import { bitBus } from \"bit-form/core\";\n\nconst formatStoreState = (instance: any) => {\n const cleanState =\n typeof instance.getState === \"function\" ? instance.getState() : instance;\n\n return {\n ...cleanState,\n _meta: {\n canUndo: instance.canUndo,\n canRedo: instance.canRedo,\n totalSteps: instance.historyMg?.history?.length || 0,\n currentIndex: instance.historyMg?.historyIndex ?? -1,\n },\n };\n};\n\nlet activeBridgeCleanup: (() => void) | null = null;\n\nexport function setupRemoteBridge(url: string) {\n if (activeBridgeCleanup) {\n console.warn(\n \"[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado).\",\n );\n activeBridgeCleanup();\n }\n\n let socket: WebSocket | null = null;\n let unsubscribeBus: (() => void) | null = null;\n let heartbeatInterval: ReturnType<typeof setInterval>;\n let isIntentionalDisconnect = false;\n\n const connect = () => {\n isIntentionalDisconnect = false;\n socket = new WebSocket(url);\n\n socket.onopen = () => {\n console.log(\"[bit-form] 🔌 Conectado ao CLI DevTools via WebSocket.\");\n\n const storesEntries = Object.entries(bitBus.stores);\n if (storesEntries.length > 0) {\n const initialState = storesEntries.reduce(\n (acc, [id, store]) => {\n acc[id] = formatStoreState(store);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n socket?.send(\n JSON.stringify({ type: \"STATE_UPDATE\", payload: initialState }),\n );\n }\n\n unsubscribeBus = bitBus.subscribe((storeId, _newState) => {\n if (socket?.readyState === WebSocket.OPEN) {\n const storeInstance = bitBus.stores[storeId];\n if (storeInstance) {\n socket.send(\n JSON.stringify({\n type: \"STATE_UPDATE\",\n payload: { [storeId]: formatStoreState(storeInstance) },\n }),\n );\n }\n }\n });\n\n heartbeatInterval = setInterval(() => {\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({ type: \"PING\" }));\n }\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const { type, payload } = JSON.parse(event.data);\n\n if (type === \"ACTION\") {\n const { storeId, action } = payload;\n const store = bitBus.stores[storeId];\n\n if (store && typeof store[action] === \"function\") {\n store[action]();\n }\n }\n } catch (e) {\n console.warn(\"[bit-form] Erro ao processar comando do CLI:\", e);\n }\n };\n\n socket.onclose = () => {\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n setTimeout(connect, 3000);\n } else {\n console.log(\"[bit-form] Ponte antiga encerrada com sucesso.\");\n }\n };\n };\n\n connect();\n\n const cleanup = () => {\n isIntentionalDisconnect = true;\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (\n socket &&\n (socket.readyState === WebSocket.OPEN ||\n socket.readyState === WebSocket.CONNECTING)\n ) {\n socket.close();\n }\n activeBridgeCleanup = null;\n };\n\n activeBridgeCleanup = cleanup;\n\n return cleanup;\n}\n"],"mappings":"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","names":["rootGlobal","id","state","fn","bitBus","deepClone","obj","item","clone","key","valueEqual","a","b","deepEqual","keysA","keysB","collectDirtyPaths","initial","prefix","result","allKeys","k","p","pathCache","getDeepValue","path","keys","current","setDeepValue","value","i","nextKey","isNextNumeric","currentValue","cleanPrefixedKeys","newObj","prefixWithDot","shiftKeys","removedIndex","parts","currentIdx","rest","newIdx","newKey","swapKeys","indexA","indexB","moveKeys","from","to","isValidationErrorShape","x","v","extractServerErrors","tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","stringVal","sortedPatterns","a","b","activePattern","masked","valueIndex","showGuide","placeholder","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","integerPart","decimalPart","formattedInteger","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","m","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskCPF","maskCNPJ","maskRG","maskCEP","maskCNH","maskPhone","maskLandline","maskDate","maskTime","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskCreditCard","maskCVV","maskPercent","maskDecimal","maskInteger","deriveFromFields","fields","computed","transform","scopes","path","def","normalizeConfig","config","rawInitial","validation","history","deepClone","bitMasks","BitDependencyManager","path","config","currentValues","dependsOn","dep","values","defaultMessage","errors","val","getDeepValue","_","changedPath","newValues","toggledFields","dependents","depPath","wasHidden","isHiddenNow","dependentsSet","prefix","pathsToRemove","showIf","value","BitHistoryManager","enableHistory","maxHistory","values","currentSnapshot","deepEqual","deepClone","initialValues","BitArrayManager","store","path","value","arr","getDeepValue","index","state","newArray","_","i","newValues","setDeepValue","isDirty","shiftKeys","indexA","indexB","swapKeys","from","to","item","moveKeys","storeInternals","BitComputedManager","config","values","nextValues","computedEntries","i","changedInThisPass","path","computeFn","newValue","currentValue","getDeepValue","deepEqual","setDeepValue","BitValidationManager","store","path","value","config","asyncValidate","delay","currentRequestId","errorMessage","newErrors","scopeFields","options","validationId","currentState","targetFields","allErrors","dynamicRequiredErrors","hiddenPath","field","isValid","f","BitLifecycleManager","store","path","value","state","newValues","setDeepValue","newErrors","toggledFields","depPath","isDirty","clonedValues","deepClone","onSuccess","valuesToSubmit","hiddenPath","transformer","currentVal","getDeepValue","error","currentErrors","newTouched","initialCloned","getDevToolsCSS","BitFormDevToolsUI","container","actions","style","getDevToolsCSS","e","target","btn","action","storeId","storesState","storeEntries","panelHtml","id","state","hasErrors","meta","currentStep","totalSteps","triggerHtml","setupLocalDevTools","container","ui","BitFormDevToolsUI","id","bitBus","getFullSnapshot","states","instance","storeInstance","state","historyManager","historyArray","currentIndex","unsubscribe","setupRemoteDevTools","container","url","socket","ui","BitFormDevToolsUI","id","sendMessage","type","payload","msg","data","e","err","initDevTools","options","mode","url","containerEl","isAutoCreated","el","adapterInstance","setupLocalDevTools","setupRemoteDevTools","BitDevtoolsManager","store","devTools","options","url","setupRemoteBridge","instance","initDevTools","BitStore","config","normalizeConfig","BitDependencyManager","BitHistoryManager","BitComputedManager","BitValidationManager","BitArrayManager","BitLifecycleManager","BitDevtoolsManager","initialValues","deepClone","valuesWithComputeds","path","fieldConfig","bitBus","newErrors","newTouched","stateChanged","prefix","listener","callback","lastValue","getDeepValue","newValue","deepEqual","value","visibilitiesChanged","newValues","message","errors","serverErrors","formattedErrors","key","name","mask","index","indexA","indexB","from","to","prevState","isDirty","nextState","options","scopeName","fields","hasErrors","f","current","initial","valueEqual","result","field","error","currentValue","initialValue","onSuccess","partialState","values","p","collectDirtyPaths","formatStoreState","instance","activeBridgeCleanup","setupRemoteBridge","url","socket","unsubscribeBus","heartbeatInterval","isIntentionalDisconnect","connect","storesEntries","bitBus","initialState","acc","id","store","storeId","_newState","storeInstance","event","type","payload","action","e","cleanup"]}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";var Qt=Object.create;var Ve=Object.defineProperty;var er=Object.getOwnPropertyDescriptor;var tr=Object.getOwnPropertyNames;var rr=Object.getPrototypeOf,sr=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ir=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of tr(e))!sr.call(t,s)&&s!==r&&Ve(t,s,{get:()=>e[s],enumerable:!(i=er(e,s))||i.enumerable});return t};var L=(t,e,r)=>(r=t!=null?Qt(rr(t)):{},ir(e||!t||!t.__esModule?Ve(r,"default",{value:t,enumerable:!0}):r,t));var O=x((Ps,Ye)=>{"use strict";var ze=["nodebuffer","arraybuffer","fragments"],He=typeof Blob<"u";He&&ze.push("blob");Ye.exports={BINARY_TYPES:ze,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:He,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Y=x((Bs,se)=>{"use strict";var{EMPTY_BUFFER:nr}=O(),ye=Buffer[Symbol.species];function or(t,e){if(t.length===0)return nr;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),i=0;for(let s=0;s<t.length;s++){let n=t[s];r.set(n,i),i+=n.length}return i<e?new ye(r.buffer,r.byteOffset,i):r}function Ke(t,e,r,i,s){for(let n=0;n<s;n++)r[i+n]=t[n]^e[n&3]}function Xe(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3]}function ar(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function xe(t){if(xe.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new ye(t):ArrayBuffer.isView(t)?e=new ye(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),xe.readOnly=!1),e}se.exports={concat:or,mask:Ke,toArrayBuffer:ar,toBuffer:xe,unmask:Xe};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=require("bufferutil");se.exports.mask=function(e,r,i,s,n){n<48?Ke(e,r,i,s,n):t.mask(e,r,i,s,n)},se.exports.unmask=function(e,r){e.length<32?Xe(e,r):t.unmask(e,r)}}catch{}});var Qe=x((Is,Je)=>{"use strict";var Ze=Symbol("kDone"),Se=Symbol("kRun"),Ee=class{constructor(e){this[Ze]=()=>{this.pending--,this[Se]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[Se]()}[Se](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[Ze])}}};Je.exports=Ee});var X=x((Rs,st)=>{"use strict";var K=require("zlib"),et=Y(),lr=Qe(),{kStatusCode:tt}=O(),fr=Buffer[Symbol.species],hr=Buffer.from([0,0,255,255]),ne=Symbol("permessage-deflate"),T=Symbol("total-length"),W=Symbol("callback"),N=Symbol("buffers"),F=Symbol("error"),ie,ve=class{constructor(e,r,i){if(this._maxPayload=i|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!r,this._deflate=null,this._inflate=null,this.params=null,!ie){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ie=new lr(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[W];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let r=this._options,i=e.find(s=>!(r.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>s.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!i)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(i.server_no_context_takeover=!0),r.clientNoContextTakeover&&(i.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(i.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?i.client_max_window_bits=r.clientMaxWindowBits:(i.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete i.client_max_window_bits,i}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(i=>{let s=r[i];if(s.length>1)throw new Error(`Parameter "${i}" must have only a single value`);if(s=s[0],i==="client_max_window_bits"){if(s!==!0){let n=+s;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${i}": ${s}`);s=n}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${i}": ${s}`)}else if(i==="server_max_window_bits"){let n=+s;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${i}": ${s}`);s=n}else if(i==="client_no_context_takeover"||i==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${i}": ${s}`)}else throw new Error(`Unknown parameter "${i}"`);r[i]=s})}),e}decompress(e,r,i){ie.add(s=>{this._decompress(e,r,(n,o)=>{s(),i(n,o)})})}compress(e,r,i){ie.add(s=>{this._compress(e,r,(n,o)=>{s(),i(n,o)})})}_decompress(e,r,i){let s=this._isServer?"client":"server";if(!this._inflate){let n=`${s}_max_window_bits`,o=typeof this.params[n]!="number"?K.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=K.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[ne]=this,this._inflate[T]=0,this._inflate[N]=[],this._inflate.on("error",ur),this._inflate.on("data",rt)}this._inflate[W]=i,this._inflate.write(e),r&&this._inflate.write(hr),this._inflate.flush(()=>{let n=this._inflate[F];if(n){this._inflate.close(),this._inflate=null,i(n);return}let o=et.concat(this._inflate[N],this._inflate[T]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[T]=0,this._inflate[N]=[],r&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),i(null,o)})}_compress(e,r,i){let s=this._isServer?"server":"client";if(!this._deflate){let n=`${s}_max_window_bits`,o=typeof this.params[n]!="number"?K.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=K.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[T]=0,this._deflate[N]=[],this._deflate.on("data",cr)}this._deflate[W]=i,this._deflate.write(e),this._deflate.flush(K.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=et.concat(this._deflate[N],this._deflate[T]);r&&(n=new fr(n.buffer,n.byteOffset,n.length-4)),this._deflate[W]=null,this._deflate[T]=0,this._deflate[N]=[],r&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),i(null,n)})}};st.exports=ve;function cr(t){this[N].push(t),this[T]+=t.length}function rt(t){if(this[T]+=t.length,this[ne]._maxPayload<1||this[T]<=this[ne]._maxPayload){this[N].push(t);return}this[F]=new RangeError("Max payload size exceeded"),this[F].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[F][tt]=1009,this.removeListener("data",rt),this.reset()}function ur(t){if(this[ne]._inflate=null,this[F]){this[W](this[F]);return}t[tt]=1007,this[W](t)}});var q=x((Us,oe)=>{"use strict";var{isUtf8:it}=require("buffer"),{hasBlob:dr}=O(),_r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function pr(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function be(t){let e=t.length,r=0;for(;r<e;)if((t[r]&128)===0)r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return!1;r+=2}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return!1;r+=3}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return!1;r+=4}else return!1;return!0}function mr(t){return dr&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}oe.exports={isBlob:mr,isValidStatusCode:pr,isValidUTF8:be,tokenChars:_r};if(it)oe.exports.isValidUTF8=function(t){return t.length<24?be(t):it(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=require("utf-8-validate");oe.exports.isValidUTF8=function(e){return e.length<32?be(e):t(e)}}catch{}});var Ce=x((Ds,ct)=>{"use strict";var{Writable:gr}=require("stream"),nt=X(),{BINARY_TYPES:yr,EMPTY_BUFFER:ot,kStatusCode:xr,kWebSocket:Sr}=O(),{concat:we,toArrayBuffer:Er,unmask:vr}=Y(),{isValidStatusCode:br,isValidUTF8:at}=q(),ae=Buffer[Symbol.species],E=0,lt=1,ft=2,ht=3,Oe=4,Te=5,le=6,ke=class extends gr{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||yr[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Sr]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=E}_write(e,r,i){if(this._opcode===8&&this._state==E)return i();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(i)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let i=this._buffers[0];return this._buffers[0]=new ae(i.buffer,i.byteOffset+e,i.length-e),new ae(i.buffer,i.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let i=this._buffers[0],s=r.length-e;e>=i.length?r.set(this._buffers.shift(),s):(r.set(new Uint8Array(i.buffer,i.byteOffset,e),s),this._buffers[0]=new ae(i.buffer,i.byteOffset+e,i.length-e)),e-=i.length}while(e>0);return r}startLoop(e){this._loop=!0;do switch(this._state){case E:this.getInfo(e);break;case lt:this.getPayloadLength16(e);break;case ft:this.getPayloadLength64(e);break;case ht:this.getMask();break;case Oe:this.getData(e);break;case Te:case le:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if((r[0]&48)!==0){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let i=(r[0]&64)===64;if(i&&!this._extensions[nt.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(i){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=i}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(i){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=lt:this._payloadLength===127?this._state=ft:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),i=r.readUInt32BE(0);if(i>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=i*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=ht:this._state=Oe}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Oe}getData(e){let r=ot;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&vr(r,this._mask)}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=Te,this.decompress(r,e);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(e)}decompress(e,r){this._extensions[nt.extensionName].decompress(e,this._fin,(s,n)=>{if(s)return r(s);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(o);return}this._fragments.push(n)}this.dataMessage(r),this._state===E&&this.startLoop(r)})}dataMessage(e){if(!this._fin){this._state=E;return}let r=this._messageLength,i=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=we(i,r):this._binaryType==="arraybuffer"?s=Er(we(i,r)):this._binaryType==="blob"?s=new Blob(i):s=i,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=E):(this._state=le,setImmediate(()=>{this.emit("message",s,!0),this._state=E,this.startLoop(e)}))}else{let s=we(i,r);if(!this._skipUTF8Validation&&!at(s)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(n);return}this._state===Te||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=E):(this._state=le,setImmediate(()=>{this.emit("message",s,!1),this._state=E,this.startLoop(e)}))}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,ot),this.end();else{let i=e.readUInt16BE(0);if(!br(i)){let n=this.createError(RangeError,`invalid status code ${i}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(n);return}let s=new ae(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!at(s)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(n);return}this._loop=!1,this.emit("conclude",i,s),this.end()}this._state=E;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=E):(this._state=le,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=E,this.startLoop(r)}))}createError(e,r,i,s,n){this._loop=!1,this._errored=!0;let o=new e(i?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=n,o[xr]=s,o}};ct.exports=ke});var Pe=x((As,_t)=>{"use strict";var{Duplex:Ms}=require("stream"),{randomFillSync:wr}=require("crypto"),ut=X(),{EMPTY_BUFFER:Or,kWebSocket:Tr,NOOP:kr}=O(),{isBlob:G,isValidStatusCode:Cr}=q(),{mask:dt,toBuffer:B}=Y(),v=Symbol("kByteLength"),Lr=Buffer.alloc(4),fe=8*1024,I,j=fe,b=0,Nr=1,Pr=2,Le=class t{constructor(e,r,i){this._extensions=r||{},i&&(this._generateMask=i,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=b,this.onerror=kr,this[Tr]=void 0}static frame(e,r){let i,s=!1,n=2,o=!1;r.mask&&(i=r.maskBuffer||Lr,r.generateMask?r.generateMask(i):(j===fe&&(I===void 0&&(I=Buffer.alloc(fe)),wr(I,0,fe),j=0),i[0]=I[j++],i[1]=I[j++],i[2]=I[j++],i[3]=I[j++]),o=(i[0]|i[1]|i[2]|i[3])===0,n=6);let l;typeof e=="string"?(!r.mask||o)&&r[v]!==void 0?l=r[v]:(e=Buffer.from(e),l=e.length):(l=e.length,s=r.mask&&r.readOnly&&!o);let f=l;l>=65536?(n+=8,f=127):l>125&&(n+=2,f=126);let a=Buffer.allocUnsafe(s?l+n:n);return a[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(a[0]|=64),a[1]=f,f===126?a.writeUInt16BE(l,2):f===127&&(a[2]=a[3]=0,a.writeUIntBE(l,4,6)),r.mask?(a[1]|=128,a[n-4]=i[0],a[n-3]=i[1],a[n-2]=i[2],a[n-1]=i[3],o?[a,e]:s?(dt(e,i,a,n,l),[a]):(dt(e,i,e,0,l),[a,e])):[a,e]}close(e,r,i,s){let n;if(e===void 0)n=Or;else{if(typeof e!="number"||!Cr(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0);else{let l=Buffer.byteLength(r);if(l>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+l),n.writeUInt16BE(e,0),typeof r=="string"?n.write(r,2):n.set(r,2)}}let o={[v]:n.length,fin:!0,generateMask:this._generateMask,mask:i,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==b?this.enqueue([this.dispatch,n,!1,o,s]):this.sendFrame(t.frame(n,o),s)}ping(e,r,i){let s,n;if(typeof e=="string"?(s=Buffer.byteLength(e),n=!1):G(e)?(s=e.size,n=!1):(e=B(e),s=e.length,n=B.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[v]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};G(e)?this._state!==b?this.enqueue([this.getBlobData,e,!1,o,i]):this.getBlobData(e,!1,o,i):this._state!==b?this.enqueue([this.dispatch,e,!1,o,i]):this.sendFrame(t.frame(e,o),i)}pong(e,r,i){let s,n;if(typeof e=="string"?(s=Buffer.byteLength(e),n=!1):G(e)?(s=e.size,n=!1):(e=B(e),s=e.length,n=B.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[v]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};G(e)?this._state!==b?this.enqueue([this.getBlobData,e,!1,o,i]):this.getBlobData(e,!1,o,i):this._state!==b?this.enqueue([this.dispatch,e,!1,o,i]):this.sendFrame(t.frame(e,o),i)}send(e,r,i){let s=this._extensions[ut.extensionName],n=r.binary?2:1,o=r.compress,l,f;typeof e=="string"?(l=Buffer.byteLength(e),f=!1):G(e)?(l=e.size,f=!1):(e=B(e),l=e.length,f=B.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=l>=s._threshold),this._compress=o):(o=!1,n=0),r.fin&&(this._firstFragment=!0);let a={[v]:l,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:f,rsv1:o};G(e)?this._state!==b?this.enqueue([this.getBlobData,e,this._compress,a,i]):this.getBlobData(e,this._compress,a,i):this._state!==b?this.enqueue([this.dispatch,e,this._compress,a,i]):this.dispatch(e,this._compress,a,i)}getBlobData(e,r,i,s){this._bufferedBytes+=i[v],this._state=Pr,e.arrayBuffer().then(n=>{if(this._socket.destroyed){let l=new Error("The socket was closed while the blob was being read");process.nextTick(Ne,this,l,s);return}this._bufferedBytes-=i[v];let o=B(n);r?this.dispatch(o,r,i,s):(this._state=b,this.sendFrame(t.frame(o,i),s),this.dequeue())}).catch(n=>{process.nextTick(Br,this,n,s)})}dispatch(e,r,i,s){if(!r){this.sendFrame(t.frame(e,i),s);return}let n=this._extensions[ut.extensionName];this._bufferedBytes+=i[v],this._state=Nr,n.compress(e,i.fin,(o,l)=>{if(this._socket.destroyed){let f=new Error("The socket was closed while data was being compressed");Ne(this,f,s);return}this._bufferedBytes-=i[v],this._state=b,i.readOnly=!1,this.sendFrame(t.frame(l,i),s),this.dequeue()})}dequeue(){for(;this._state===b&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][v],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][v],this._queue.push(e)}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r)}};_t.exports=Le;function Ne(t,e,r){typeof r=="function"&&r(e);for(let i=0;i<t._queue.length;i++){let s=t._queue[i],n=s[s.length-1];typeof n=="function"&&n(e)}}function Br(t,e,r){Ne(t,e,r),t.onerror(e)}});var bt=x((Ws,vt)=>{"use strict";var{kForOnEventAttribute:Z,kListener:Be}=O(),pt=Symbol("kCode"),mt=Symbol("kData"),gt=Symbol("kError"),yt=Symbol("kMessage"),xt=Symbol("kReason"),$=Symbol("kTarget"),St=Symbol("kType"),Et=Symbol("kWasClean"),k=class{constructor(e){this[$]=null,this[St]=e}get target(){return this[$]}get type(){return this[St]}};Object.defineProperty(k.prototype,"target",{enumerable:!0});Object.defineProperty(k.prototype,"type",{enumerable:!0});var R=class extends k{constructor(e,r={}){super(e),this[pt]=r.code===void 0?0:r.code,this[xt]=r.reason===void 0?"":r.reason,this[Et]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[pt]}get reason(){return this[xt]}get wasClean(){return this[Et]}};Object.defineProperty(R.prototype,"code",{enumerable:!0});Object.defineProperty(R.prototype,"reason",{enumerable:!0});Object.defineProperty(R.prototype,"wasClean",{enumerable:!0});var V=class extends k{constructor(e,r={}){super(e),this[gt]=r.error===void 0?null:r.error,this[yt]=r.message===void 0?"":r.message}get error(){return this[gt]}get message(){return this[yt]}};Object.defineProperty(V.prototype,"error",{enumerable:!0});Object.defineProperty(V.prototype,"message",{enumerable:!0});var J=class extends k{constructor(e,r={}){super(e),this[mt]=r.data===void 0?null:r.data}get data(){return this[mt]}};Object.defineProperty(J.prototype,"data",{enumerable:!0});var Ir={addEventListener(t,e,r={}){for(let s of this.listeners(t))if(!r[Z]&&s[Be]===e&&!s[Z])return;let i;if(t==="message")i=function(n,o){let l=new J("message",{data:o?n:n.toString()});l[$]=this,he(e,this,l)};else if(t==="close")i=function(n,o){let l=new R("close",{code:n,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});l[$]=this,he(e,this,l)};else if(t==="error")i=function(n){let o=new V("error",{error:n,message:n.message});o[$]=this,he(e,this,o)};else if(t==="open")i=function(){let n=new k("open");n[$]=this,he(e,this,n)};else return;i[Z]=!!r[Z],i[Be]=e,r.once?this.once(t,i):this.on(t,i)},removeEventListener(t,e){for(let r of this.listeners(t))if(r[Be]===e&&!r[Z]){this.removeListener(t,r);break}}};vt.exports={CloseEvent:R,ErrorEvent:V,Event:k,EventTarget:Ir,MessageEvent:J};function he(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r)}});var Ie=x((Fs,wt)=>{"use strict";var{tokenChars:Q}=q();function w(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Rr(t){let e=Object.create(null),r=Object.create(null),i=!1,s=!1,n=!1,o,l,f=-1,a=-1,h=-1,c=0;for(;c<t.length;c++)if(a=t.charCodeAt(c),o===void 0)if(h===-1&&Q[a]===1)f===-1&&(f=c);else if(c!==0&&(a===32||a===9))h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let m=t.slice(f,h);a===44?(w(e,m,r),r=Object.create(null)):o=m,f=h=-1}else throw new SyntaxError(`Unexpected character at index ${c}`);else if(l===void 0)if(h===-1&&Q[a]===1)f===-1&&(f=c);else if(a===32||a===9)h===-1&&f!==-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c),w(r,t.slice(f,h),!0),a===44&&(w(e,o,r),r=Object.create(null),o=void 0),f=h=-1}else if(a===61&&f!==-1&&h===-1)l=t.slice(f,c),f=h=-1;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(s){if(Q[a]!==1)throw new SyntaxError(`Unexpected character at index ${c}`);f===-1?f=c:i||(i=!0),s=!1}else if(n)if(Q[a]===1)f===-1&&(f=c);else if(a===34&&f!==-1)n=!1,h=c;else if(a===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(a===34&&t.charCodeAt(c-1)===61)n=!0;else if(h===-1&&Q[a]===1)f===-1&&(f=c);else if(f!==-1&&(a===32||a===9))h===-1&&(h=c);else if(a===59||a===44){if(f===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let m=t.slice(f,h);i&&(m=m.replace(/\\/g,""),i=!1),w(r,l,m),a===44&&(w(e,o,r),r=Object.create(null),o=void 0),l=void 0,f=h=-1}else throw new SyntaxError(`Unexpected character at index ${c}`);if(f===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");h===-1&&(h=c);let _=t.slice(f,h);return o===void 0?w(e,_,r):(l===void 0?w(r,_,!0):i?w(r,l,_.replace(/\\/g,"")):w(r,l,_),w(e,o,r)),e}function Ur(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.map(i=>[e].concat(Object.keys(i).map(s=>{let n=i[s];return Array.isArray(n)||(n=[n]),n.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}wt.exports={format:Ur,parse:Rr}});var _e=x((js,Dt)=>{"use strict";var Dr=require("events"),Mr=require("https"),Ar=require("http"),kt=require("net"),Wr=require("tls"),{randomBytes:Fr,createHash:qr}=require("crypto"),{Duplex:qs,Readable:Gs}=require("stream"),{URL:Re}=require("url"),P=X(),Gr=Ce(),jr=Pe(),{isBlob:$r}=q(),{BINARY_TYPES:Ot,CLOSE_TIMEOUT:Vr,EMPTY_BUFFER:ce,GUID:zr,kForOnEventAttribute:Ue,kListener:Hr,kStatusCode:Yr,kWebSocket:g,NOOP:Ct}=O(),{EventTarget:{addEventListener:Kr,removeEventListener:Xr}}=bt(),{format:Zr,parse:Jr}=Ie(),{toBuffer:Qr}=Y(),Lt=Symbol("kAborted"),De=[8,13],C=["CONNECTING","OPEN","CLOSING","CLOSED"],es=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,d=class t extends Dr{constructor(e,r,i){super(),this._binaryType=Ot[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ce,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(i=r,r=[]):r=[r]),Nt(this,e,r,i)):(this._autoPong=i.autoPong,this._closeTimeout=i.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Ot.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,i){let s=new Gr({allowSynchronousEvents:i.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation}),n=new jr(e,this._extensions,i.generateMask);this._receiver=s,this._sender=n,this._socket=e,s[g]=this,n[g]=this,e[g]=this,s.on("conclude",ss),s.on("drain",is),s.on("error",ns),s.on("message",os),s.on("ping",as),s.on("pong",ls),n.onerror=fs,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",It),e.on("data",de),e.on("end",Rt),e.on("error",Ut),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[P.extensionName]&&this._extensions[P.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){S(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,i=>{i||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Bt(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(i=e,e=r=void 0):typeof r=="function"&&(i=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,i);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||ce,r,i)}pong(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(i=e,e=r=void 0):typeof r=="function"&&(i=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,i);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||ce,r,i)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(i=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,i);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[P.extensionName]||(s.compress=!1),this._sender.send(e||ce,s,i)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){S(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(d,"CONNECTING",{enumerable:!0,value:C.indexOf("CONNECTING")});Object.defineProperty(d.prototype,"CONNECTING",{enumerable:!0,value:C.indexOf("CONNECTING")});Object.defineProperty(d,"OPEN",{enumerable:!0,value:C.indexOf("OPEN")});Object.defineProperty(d.prototype,"OPEN",{enumerable:!0,value:C.indexOf("OPEN")});Object.defineProperty(d,"CLOSING",{enumerable:!0,value:C.indexOf("CLOSING")});Object.defineProperty(d.prototype,"CLOSING",{enumerable:!0,value:C.indexOf("CLOSING")});Object.defineProperty(d,"CLOSED",{enumerable:!0,value:C.indexOf("CLOSED")});Object.defineProperty(d.prototype,"CLOSED",{enumerable:!0,value:C.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(d.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(d.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Ue])return e[Hr];return null},set(e){for(let r of this.listeners(t))if(r[Ue]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[Ue]:!0})}})});d.prototype.addEventListener=Kr;d.prototype.removeEventListener=Xr;Dt.exports=d;function Nt(t,e,r,i){let s={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:Vr,protocolVersion:De[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,t._closeTimeout=s.closeTimeout,!De.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${De.join(", ")})`);let n;if(e instanceof Re)n=e;else try{n=new Re(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),t._url=n.href;let o=n.protocol==="wss:",l=n.protocol==="ws+unix:",f;if(n.protocol!=="ws:"&&!o&&!l?f=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:l&&!n.pathname?f="The URL's pathname is empty":n.hash&&(f="The URL contains a fragment identifier"),f){let u=new SyntaxError(f);if(t._redirects===0)throw u;ue(t,u);return}let a=o?443:80,h=Fr(16).toString("base64"),c=o?Mr.request:Ar.request,_=new Set,m;if(s.createConnection=s.createConnection||(o?rs:ts),s.defaultPort=s.defaultPort||a,s.port=n.port||a,s.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket"},s.path=n.pathname+n.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(m=new P(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=Zr({[P.extensionName]:m.offer()})),r.length){for(let u of r){if(typeof u!="string"||!es.test(u)||_.has(u))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(u)}s.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(n.username||n.password)&&(s.auth=`${n.username}:${n.password}`),l){let u=s.path.split(":");s.socketPath=u[0],s.path=u[1]}let p;if(s.followRedirects){if(t._redirects===0){t._originalIpc=l,t._originalSecure=o,t._originalHostOrSocketPath=l?s.socketPath:n.host;let u=i&&i.headers;if(i={...i,headers:{}},u)for(let[y,M]of Object.entries(u))i.headers[y.toLowerCase()]=M}else if(t.listenerCount("redirect")===0){let u=l?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:n.host===t._originalHostOrSocketPath;(!u||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,u||delete s.headers.host,s.auth=void 0)}s.auth&&!i.headers.authorization&&(i.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),p=t._req=c(s),t._redirects&&t.emit("redirect",t.url,p)}else p=t._req=c(s);s.timeout&&p.on("timeout",()=>{S(t,p,"Opening handshake has timed out")}),p.on("error",u=>{p===null||p[Lt]||(p=t._req=null,ue(t,u))}),p.on("response",u=>{let y=u.headers.location,M=u.statusCode;if(y&&s.followRedirects&&M>=300&&M<400){if(++t._redirects>s.maxRedirects){S(t,p,"Maximum redirects exceeded");return}p.abort();let z;try{z=new Re(y,e)}catch{let A=new SyntaxError(`Invalid URL: ${y}`);ue(t,A);return}Nt(t,z,r,i)}else t.emit("unexpected-response",p,u)||S(t,p,`Unexpected server response: ${u.statusCode}`)}),p.on("upgrade",(u,y,M)=>{if(t.emit("upgrade",u),t.readyState!==d.CONNECTING)return;p=t._req=null;let z=u.headers.upgrade;if(z===void 0||z.toLowerCase()!=="websocket"){S(t,y,"Invalid Upgrade header");return}let Ge=qr("sha1").update(h+zr).digest("base64");if(u.headers["sec-websocket-accept"]!==Ge){S(t,y,"Invalid Sec-WebSocket-Accept header");return}let A=u.headers["sec-websocket-protocol"],H;if(A!==void 0?_.size?_.has(A)||(H="Server sent an invalid subprotocol"):H="Server sent a subprotocol but none was requested":_.size&&(H="Server sent no subprotocol"),H){S(t,y,H);return}A&&(t._protocol=A);let je=u.headers["sec-websocket-extensions"];if(je!==void 0){if(!m){S(t,y,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let me;try{me=Jr(je)}catch{S(t,y,"Invalid Sec-WebSocket-Extensions header");return}let $e=Object.keys(me);if($e.length!==1||$e[0]!==P.extensionName){S(t,y,"Server indicated an extension that was not requested");return}try{m.accept(me[P.extensionName])}catch{S(t,y,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[P.extensionName]=m}t.setSocket(y,M,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(p,t):p.end()}function ue(t,e){t._readyState=d.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function ts(t){return t.path=t.socketPath,kt.connect(t)}function rs(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=kt.isIP(t.host)?"":t.host),Wr.connect(t)}function S(t,e,r){t._readyState=d.CLOSING;let i=new Error(r);Error.captureStackTrace(i,S),e.setHeader?(e[Lt]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(ue,t,i)):(e.destroy(i),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Me(t,e,r){if(e){let i=$r(e)?e.size:Qr(e).length;t._socket?t._sender._bufferedBytes+=i:t._bufferedAmount+=i}if(r){let i=new Error(`WebSocket is not open: readyState ${t.readyState} (${C[t.readyState]})`);process.nextTick(r,i)}}function ss(t,e){let r=this[g];r._closeFrameReceived=!0,r._closeMessage=e,r._closeCode=t,r._socket[g]!==void 0&&(r._socket.removeListener("data",de),process.nextTick(Pt,r._socket),t===1005?r.close():r.close(t,e))}function is(){let t=this[g];t.isPaused||t._socket.resume()}function ns(t){let e=this[g];e._socket[g]!==void 0&&(e._socket.removeListener("data",de),process.nextTick(Pt,e._socket),e.close(t[Yr])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function Tt(){this[g].emitClose()}function os(t,e){this[g].emit("message",t,e)}function as(t){let e=this[g];e._autoPong&&e.pong(t,!this._isServer,Ct),e.emit("ping",t)}function ls(t){this[g].emit("pong",t)}function Pt(t){t.resume()}function fs(t){let e=this[g];e.readyState!==d.CLOSED&&(e.readyState===d.OPEN&&(e._readyState=d.CLOSING,Bt(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Bt(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),t._closeTimeout)}function It(){let t=this[g];if(this.removeListener("close",It),this.removeListener("data",de),this.removeListener("end",Rt),t._readyState=d.CLOSING,!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&this._readableState.length!==0){let e=this.read(this._readableState.length);t._receiver.write(e)}t._receiver.end(),this[g]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Tt),t._receiver.on("finish",Tt))}function de(t){this[g]._receiver.write(t)||this.pause()}function Rt(){let t=this[g];t._readyState=d.CLOSING,t._receiver.end(),this.end()}function Ut(){let t=this[g];this.removeListener("error",Ut),this.on("error",Ct),t&&(t._readyState=d.CLOSING,this.destroy())}});var Ft=x((Vs,Wt)=>{"use strict";var $s=_e(),{Duplex:hs}=require("stream");function Mt(t){t.emit("close")}function cs(){!this.destroyed&&this._writableState.finished&&this.destroy()}function At(t){this.removeListener("error",At),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function us(t,e){let r=!0,i=new hs({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(n,o){let l=!o&&i._readableState.objectMode?n.toString():n;i.push(l)||t.pause()}),t.once("error",function(n){i.destroyed||(r=!1,i.destroy(n))}),t.once("close",function(){i.destroyed||i.push(null)}),i._destroy=function(s,n){if(t.readyState===t.CLOSED){n(s),process.nextTick(Mt,i);return}let o=!1;t.once("error",function(f){o=!0,n(f)}),t.once("close",function(){o||n(s),process.nextTick(Mt,i)}),r&&t.terminate()},i._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){i._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),i._readableState.endEmitted&&i.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},i._read=function(){t.isPaused&&t.resume()},i._write=function(s,n,o){if(t.readyState===t.CONNECTING){t.once("open",function(){i._write(s,n,o)});return}t.send(s,o)},i.on("end",cs),i.on("error",At),i}Wt.exports=us});var Gt=x((zs,qt)=>{"use strict";var{tokenChars:ds}=q();function _s(t){let e=new Set,r=-1,i=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(i===-1&&ds[o]===1)r===-1&&(r=s);else if(s!==0&&(o===32||o===9))i===-1&&r!==-1&&(i=s);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${s}`);i===-1&&(i=s);let l=t.slice(r,i);if(e.has(l))throw new SyntaxError(`The "${l}" subprotocol is duplicated`);e.add(l),r=i=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(r===-1||i!==-1)throw new SyntaxError("Unexpected end of input");let n=t.slice(r,s);if(e.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return e.add(n),e}qt.exports={parse:_s}});var Kt=x((Ys,Yt)=>{"use strict";var ps=require("events"),pe=require("http"),{Duplex:Hs}=require("stream"),{createHash:ms}=require("crypto"),jt=Ie(),U=X(),gs=Gt(),ys=_e(),{CLOSE_TIMEOUT:xs,GUID:Ss,kWebSocket:Es}=O(),vs=/^[+/0-9A-Za-z]{22}==$/,$t=0,Vt=1,Ht=2,Ae=class extends ps{constructor(e,r){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:xs,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ys,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=pe.createServer((i,s)=>{let n=pe.STATUS_CODES[426];s.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),s.end(n)}),this._server.listen(e.port,e.host,e.backlog,r)):e.server&&(this._server=e.server),this._server){let i=this.emit.bind(this,"connection");this._removeListeners=bs(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,n,o)=>{this.handleUpgrade(s,n,o,i)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=$t}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Ht){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(ee,this);return}if(e&&this.once("close",e),this._state!==Vt)if(this._state=Vt,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(ee,this):process.nextTick(ee,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{ee(this)})}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,r,i,s){r.on("error",zt);let n=e.headers["sec-websocket-key"],o=e.headers.upgrade,l=+e.headers["sec-websocket-version"];if(e.method!=="GET"){D(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){D(this,e,r,400,"Invalid Upgrade header");return}if(n===void 0||!vs.test(n)){D(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(l!==13&&l!==8){D(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(e)){te(r,400);return}let f=e.headers["sec-websocket-protocol"],a=new Set;if(f!==void 0)try{a=gs.parse(f)}catch{D(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let h=e.headers["sec-websocket-extensions"],c={};if(this.options.perMessageDeflate&&h!==void 0){let _=new U(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let m=jt.parse(h);m[U.extensionName]&&(_.accept(m[U.extensionName]),c[U.extensionName]=_)}catch{D(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:e.headers[`${l===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(m,p,u,y)=>{if(!m)return te(r,p||401,u,y);this.completeUpgrade(c,n,a,e,r,i,s)});return}if(!this.options.verifyClient(_))return te(r,401)}this.completeUpgrade(c,n,a,e,r,i,s)}completeUpgrade(e,r,i,s,n,o,l){if(!n.readable||!n.writable)return n.destroy();if(n[Es])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>$t)return te(n,503);let a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ms("sha1").update(r+Ss).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(i.size){let c=this.options.handleProtocols?this.options.handleProtocols(i,s):i.values().next().value;c&&(a.push(`Sec-WebSocket-Protocol: ${c}`),h._protocol=c)}if(e[U.extensionName]){let c=e[U.extensionName].params,_=jt.format({[U.extensionName]:[c]});a.push(`Sec-WebSocket-Extensions: ${_}`),h._extensions=e}this.emit("headers",a,s),n.write(a.concat(`\r
|
|
3
|
+
`).join(`\r
|
|
4
|
+
`)),n.removeListener("error",zt),h.setSocket(n,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(ee,this)})),l(h,s)}};Yt.exports=Ae;function bs(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let i of Object.keys(e))t.removeListener(i,e[i])}}function ee(t){t._state=Ht,t.emit("close")}function zt(){this.destroy()}function te(t,e,r,i){r=r||pe.STATUS_CODES[e],i={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...i},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${pe.STATUS_CODES[e]}\r
|
|
5
|
+
`+Object.keys(i).map(s=>`${s}: ${i[s]}`).join(`\r
|
|
6
|
+
`)+`\r
|
|
7
|
+
\r
|
|
8
|
+
`+r)}function D(t,e,r,i,s,n){if(t.listenerCount("wsClientError")){let o=new Error(s);Error.captureStackTrace(o,D),t.emit("wsClientError",o,r,e)}else te(r,i,s,n)}});var Xt=L(require("http"),1),Fe=L(require("fs"),1),qe=L(require("path"),1);var ws=L(Ft(),1),Os=L(Ce(),1),Ts=L(Pe(),1),ks=L(_e(),1),We=L(Kt(),1);function Zt(t=3e3){let e=Xt.default.createServer((i,s)=>{if(i.url==="/"||i.url==="/index.html"){s.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),s.end(Cs(t));return}if(i.url?.startsWith("/dist/")){let n=i.url.replace("/dist/",""),o=qe.default.resolve(__dirname,"..","..","dist",n);try{if(Fe.default.existsSync(o)){let l=Fe.default.readFileSync(o),f=qe.default.extname(o),a={".js":"application/javascript",".css":"text/css"};s.writeHead(200,{"Content-Type":a[f]||"text/plain"}),s.end(l)}else s.writeHead(404),s.end("Not Found")}catch{s.writeHead(500),s.end("Internal Error")}return}s.writeHead(404),s.end("Not Found")}),r=new We.default({server:e});r.on("connection",i=>{i.on("message",s=>{let n=s.toString();try{if(JSON.parse(n).type==="PING")return}catch{}r.clients.forEach(o=>{o!==i&&o.readyState===1&&o.send(n)})})}),e.listen(t,()=>{console.log(`\u{1F680} BitForm DevServer rodando em http://localhost:${t}`)})}function Cs(t){return`
|
|
9
|
+
<!DOCTYPE html>
|
|
10
|
+
<html lang="pt-BR">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="UTF-8">
|
|
13
|
+
<title>\u{1F6E0} Bit-Form Remote Inspector</title>
|
|
14
|
+
<style>
|
|
15
|
+
*, *::before, *::after {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
html, body {
|
|
20
|
+
background: #0f172a;
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
overflow-x: hidden;
|
|
26
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.status-container {
|
|
30
|
+
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
|
31
|
+
text-align: center; color: #64748b; z-index: 1;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
body.has-panel .bit-devtools-panel {
|
|
35
|
+
display: flex !important;
|
|
36
|
+
flex-direction: column !important;
|
|
37
|
+
position: fixed !important;
|
|
38
|
+
inset: 0 !important;
|
|
39
|
+
width: 100% !important;
|
|
40
|
+
height: 100% !important;
|
|
41
|
+
max-width: 100% !important;
|
|
42
|
+
max-height: 100% !important;
|
|
43
|
+
margin: 0 !important;
|
|
44
|
+
border-radius: 0 !important;
|
|
45
|
+
border: none !important;
|
|
46
|
+
box-shadow: none !important;
|
|
47
|
+
background: #0f172a !important;
|
|
48
|
+
z-index: 9999 !important;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
body.has-panel .bit-store-block {
|
|
52
|
+
border-bottom: 1px solid #1e293b !important;
|
|
53
|
+
padding: 20px !important;
|
|
54
|
+
width: 100%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.bit-devtools-trigger {
|
|
58
|
+
display: none !important;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
body.has-panel .status-container { opacity: 0; visibility: hidden; }
|
|
62
|
+
</style>
|
|
63
|
+
</head>
|
|
64
|
+
<body>
|
|
65
|
+
<div class="status-container">
|
|
66
|
+
<div style="font-size: 3rem; margin-bottom: 10px;">\u{1F4E1}</div>
|
|
67
|
+
<div id="status">Aguardando dados do projeto <strong>bit-form</strong>...</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<script type="module">
|
|
71
|
+
import { initDevTools } from "/dist/devtools/index.js";
|
|
72
|
+
|
|
73
|
+
document.body.classList.add('connected');
|
|
74
|
+
|
|
75
|
+
initDevTools({
|
|
76
|
+
mode: "remote",
|
|
77
|
+
url: "ws://localhost:${t}",
|
|
78
|
+
container: document.body
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const observer = new MutationObserver(() => {
|
|
82
|
+
const panel = document.querySelector('.bit-devtools-panel');
|
|
83
|
+
const btn = document.querySelector('.bit-devtools-trigger');
|
|
84
|
+
|
|
85
|
+
if (btn && !panel) {
|
|
86
|
+
btn.click();
|
|
87
|
+
document.body.classList.add('has-panel');
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
92
|
+
</script>
|
|
93
|
+
</body>
|
|
94
|
+
</html>`}var re=process.argv.slice(2),Ls=re[0];if(Ls==="devtools"){let t=re.indexOf("-p")!==-1?re.indexOf("-p"):re.indexOf("--port"),e=t!==-1?Number(re[t+1]):3e3;Zt(e)}else console.log(`
|
|
95
|
+
\u{1F6E0} Bit-Form CLI
|
|
96
|
+
|
|
97
|
+
Uso:
|
|
98
|
+
bit-form <comando> [op\xE7\xF5es]
|
|
99
|
+
|
|
100
|
+
Comandos dispon\xEDveis:
|
|
101
|
+
devtools Inicia o servidor local do Remote Inspector
|
|
102
|
+
|
|
103
|
+
Op\xE7\xF5es do devtools:
|
|
104
|
+
-p, --port Define a porta do servidor (padr\xE3o: 3000)
|
|
105
|
+
`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/leandrocarol/Projetos/bit-form/dist/devtools/bridge.cjs"],"names":[],"mappings":"AAAA,kIAAyC,gDAA+B","file":"/Users/leandrocarol/Projetos/bit-form/dist/devtools/bridge.cjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/leandrocarol/Projetos/bit-form/dist/devtools/index.cjs"],"names":[],"mappings":"AAAA,kIAAyC,2CAA0B","file":"/Users/leandrocarol/Projetos/bit-form/dist/devtools/index.cjs"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface BitDevToolsOptions {
|
|
2
|
+
container?: HTMLElement | string;
|
|
3
|
+
mode?: "local" | "remote";
|
|
4
|
+
url?: string;
|
|
5
|
+
}
|
|
6
|
+
interface DevToolsActions {
|
|
7
|
+
onUndo: (storeId: string) => void;
|
|
8
|
+
onRedo: (storeId: string) => void;
|
|
9
|
+
onReset: (storeId: string) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare function initDevTools(options?: BitDevToolsOptions): any;
|
|
13
|
+
|
|
14
|
+
export { type BitDevToolsOptions, type DevToolsActions, initDevTools };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface BitDevToolsOptions {
|
|
2
|
+
container?: HTMLElement | string;
|
|
3
|
+
mode?: "local" | "remote";
|
|
4
|
+
url?: string;
|
|
5
|
+
}
|
|
6
|
+
interface DevToolsActions {
|
|
7
|
+
onUndo: (storeId: string) => void;
|
|
8
|
+
onRedo: (storeId: string) => void;
|
|
9
|
+
onReset: (storeId: string) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare function initDevTools(options?: BitDevToolsOptions): any;
|
|
13
|
+
|
|
14
|
+
export { type BitDevToolsOptions, type DevToolsActions, initDevTools };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|