@lehnihon/bit-form 2.2.19 → 2.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -13
- package/dist/angular/index.cjs +1 -1
- package/dist/angular/index.cjs.map +1 -1
- package/dist/angular/index.d.cts +7 -6
- package/dist/angular/index.d.ts +7 -6
- package/dist/angular/index.js +1 -1
- package/dist/angular/index.js.map +1 -1
- package/dist/chunk-27LJCW56.cjs.map +1 -1
- package/dist/chunk-3SEB4YRQ.cjs +2 -0
- package/dist/chunk-3SEB4YRQ.cjs.map +1 -0
- package/dist/chunk-4WPLTOBT.cjs.map +1 -1
- package/dist/chunk-5ILGCBKG.cjs.map +1 -1
- package/dist/chunk-725CMNAV.cjs.map +1 -1
- package/dist/{chunk-7IO2KLSJ.cjs → chunk-7LCFS2JM.cjs} +2 -2
- package/dist/chunk-7LCFS2JM.cjs.map +1 -0
- package/dist/{chunk-EPBSLPRL.cjs → chunk-AOMXTUA4.cjs} +2 -2
- package/dist/chunk-AOMXTUA4.cjs.map +1 -0
- package/dist/chunk-BSGJ3T5S.cjs.map +1 -1
- package/dist/chunk-CATA7YEV.js +2 -0
- package/dist/chunk-CATA7YEV.js.map +1 -0
- package/dist/chunk-DNHPYPJA.js +2 -0
- package/dist/chunk-DNHPYPJA.js.map +1 -0
- package/dist/chunk-H3RTOA6X.cjs +2 -0
- package/dist/chunk-H3RTOA6X.cjs.map +1 -0
- package/dist/chunk-H6HGYVRV.cjs +2 -0
- package/dist/chunk-H6HGYVRV.cjs.map +1 -0
- package/dist/chunk-JVRTPL7W.js +2 -0
- package/dist/chunk-JVRTPL7W.js.map +1 -0
- package/dist/chunk-K2JSAJAF.cjs.map +1 -1
- package/dist/chunk-L57KMBXS.js +2 -0
- package/dist/chunk-L57KMBXS.js.map +1 -0
- package/dist/chunk-LY67POOF.js +2 -0
- package/dist/chunk-LY67POOF.js.map +1 -0
- package/dist/chunk-MBEQLBJB.js +2 -0
- package/dist/chunk-MBEQLBJB.js.map +1 -0
- package/dist/chunk-MFSDDSVG.cjs.map +1 -1
- package/dist/chunk-PDFT5E2E.cjs +2 -0
- package/dist/chunk-PDFT5E2E.cjs.map +1 -0
- package/dist/chunk-PRMNTQD5.js +2 -0
- package/dist/chunk-PRMNTQD5.js.map +1 -0
- package/dist/chunk-QKGTVKBU.cjs.map +1 -1
- package/dist/chunk-RHMJPKNV.cjs.map +1 -1
- package/dist/chunk-SMCFLQIA.cjs +2 -0
- package/dist/chunk-SMCFLQIA.cjs.map +1 -0
- package/dist/chunk-T36GFQHU.cjs +2 -0
- package/dist/chunk-T36GFQHU.cjs.map +1 -0
- package/dist/chunk-W5CLDRRE.cjs.map +1 -1
- package/dist/chunk-X3DGA5UC.cjs +2 -0
- package/dist/chunk-X3DGA5UC.cjs.map +1 -0
- package/dist/{chunk-AJUX7LYB.js → chunk-X3OFU2UH.js} +2 -2
- package/dist/chunk-XPY6TCOO.js +2 -0
- package/dist/{chunk-3WNZPBME.js.map → chunk-XPY6TCOO.js.map} +1 -1
- package/dist/cli/index.cjs +18 -17
- package/dist/{config-types-bTt2lcw9.d.ts → config-types-DB6FaTiZ.d.ts} +3 -3
- package/dist/{config-types-Dbyt7t3D.d.cts → config-types-mZFlp2Bi.d.cts} +3 -3
- package/dist/core/bindings.cjs +1 -1
- package/dist/core/bindings.cjs.map +1 -1
- package/dist/core/bindings.d.cts +4 -4
- package/dist/core/bindings.d.ts +4 -4
- package/dist/core/bindings.js +1 -1
- package/dist/core/status.cjs.map +1 -1
- package/dist/core/status.d.cts +3 -3
- package/dist/core/status.d.ts +3 -3
- package/dist/core/store.cjs +1 -1
- package/dist/core/store.cjs.map +1 -1
- package/dist/core/store.d.cts +5 -5
- package/dist/core/store.d.ts +5 -5
- package/dist/core/store.js +1 -1
- package/dist/core/utils.cjs +1 -1
- package/dist/core/utils.cjs.map +1 -1
- package/dist/core/utils.js +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +4 -4
- package/dist/core.d.ts +4 -4
- package/dist/core.js +1 -1
- package/dist/devtools/bridge.cjs +1 -1
- package/dist/devtools/bridge.cjs.map +1 -1
- package/dist/devtools/bridge.js +1 -1
- package/dist/devtools/index.cjs +17 -17
- package/dist/devtools/index.cjs.map +1 -1
- package/dist/devtools/index.d.cts +2 -2
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.js +17 -17
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/protocol.cjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/mask.cjs +1 -1
- package/dist/mask.cjs.map +1 -1
- package/dist/mask.d.cts +1 -1
- package/dist/mask.d.ts +1 -1
- package/dist/mask.js +1 -1
- package/dist/{meta-types-BC1VLABk.d.cts → meta-types-1Xcht8hj.d.cts} +1 -1
- package/dist/{meta-types-BC1VLABk.d.ts → meta-types-1Xcht8hj.d.ts} +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +6 -6
- package/dist/react/index.d.ts +6 -6
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-native/index.cjs +1 -1
- package/dist/react-native/index.cjs.map +1 -1
- package/dist/react-native/index.d.cts +5 -5
- package/dist/react-native/index.d.ts +5 -5
- package/dist/react-native/index.js +1 -1
- package/dist/resolvers/index.cjs.map +1 -1
- package/dist/resolvers/joi.cjs.map +1 -1
- package/dist/resolvers/types.cjs.map +1 -1
- package/dist/resolvers/yup.cjs.map +1 -1
- package/dist/resolvers/zod.cjs.map +1 -1
- package/dist/{runtime-types-D1SRZr-n.d.cts → runtime-types-BLCkMgcy.d.cts} +1 -1
- package/dist/{runtime-types-D1SRZr-n.d.ts → runtime-types-BLCkMgcy.d.ts} +1 -1
- package/dist/{store-api-types-i-zmM25p.d.ts → store-api-types-CgRVo2DA.d.ts} +4 -4
- package/dist/{store-api-types-BPD27biP.d.cts → store-api-types-D7i0KWbr.d.cts} +4 -4
- package/dist/{use-bit-persist-BGH2Bazx.d.ts → use-bit-persist-CFcuAzwp.d.ts} +5 -5
- package/dist/{use-bit-persist-DiwICsEm.d.cts → use-bit-persist-Dsr69hme.d.cts} +5 -5
- package/dist/utils.cjs +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +5 -5
- package/dist/vue/index.d.ts +5 -5
- package/dist/vue/index.js +1 -1
- package/dist/vue/index.js.map +1 -1
- package/package.json +64 -11
- package/dist/chunk-23DHXQOC.js +0 -2
- package/dist/chunk-23DHXQOC.js.map +0 -1
- package/dist/chunk-32RH5MSM.js +0 -2
- package/dist/chunk-32RH5MSM.js.map +0 -1
- package/dist/chunk-33TGLA5D.cjs +0 -2
- package/dist/chunk-33TGLA5D.cjs.map +0 -1
- package/dist/chunk-3CPIJF3Z.cjs +0 -2
- package/dist/chunk-3CPIJF3Z.cjs.map +0 -1
- package/dist/chunk-3KI3GEU3.cjs +0 -2
- package/dist/chunk-3KI3GEU3.cjs.map +0 -1
- package/dist/chunk-3WNZPBME.js +0 -2
- package/dist/chunk-7IO2KLSJ.cjs.map +0 -1
- package/dist/chunk-B45EMB4Q.js +0 -2
- package/dist/chunk-B45EMB4Q.js.map +0 -1
- package/dist/chunk-CIS3YZSK.cjs +0 -2
- package/dist/chunk-CIS3YZSK.cjs.map +0 -1
- package/dist/chunk-EPBSLPRL.cjs.map +0 -1
- package/dist/chunk-ICYXODTQ.js +0 -2
- package/dist/chunk-ICYXODTQ.js.map +0 -1
- package/dist/chunk-JUDBIEZK.js +0 -2
- package/dist/chunk-JUDBIEZK.js.map +0 -1
- package/dist/chunk-K65TKDQ2.cjs +0 -2
- package/dist/chunk-K65TKDQ2.cjs.map +0 -1
- package/dist/chunk-S5A65JVL.cjs +0 -2
- package/dist/chunk-S5A65JVL.cjs.map +0 -1
- package/dist/chunk-T7TOEIOH.js +0 -2
- package/dist/chunk-T7TOEIOH.js.map +0 -1
- package/dist/chunk-TLUCO2ZN.cjs +0 -2
- package/dist/chunk-TLUCO2ZN.cjs.map +0 -1
- package/dist/chunk-Y34N5TWV.js +0 -2
- package/dist/chunk-Y34N5TWV.js.map +0 -1
- /package/dist/{chunk-AJUX7LYB.js.map → chunk-X3OFU2UH.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-7LCFS2JM.cjs","../src/core/utils/field-state-snapshot.ts"],"names":["createFieldStateSnapshot","nextState","lastSnapshot","areFieldSnapshotsEqual","snapshotA","snapshotB","deepEqual","areFieldStatesEqual"],"mappings":"AAAA,iIAAwC,SCqCxBA,CAAAA,CACdC,CAAAA,CASAC,CAAAA,CAC0B,CAE1B,OAAIA,CAAAA,EAEAA,CAAAA,CAAa,KAAA,GAAUD,CAAAA,CAAU,KAAA,EACjCC,CAAAA,CAAa,KAAA,GAAUD,CAAAA,CAAU,KAAA,EACjCC,CAAAA,CAAa,OAAA,GAAYD,CAAAA,CAAU,OAAA,EACnCC,CAAAA,CAAa,QAAA,GAAaD,CAAAA,CAAU,QAAA,EACpCC,CAAAA,CAAa,UAAA,GAAeD,CAAAA,CAAU,UAAA,EACtCC,CAAAA,CAAa,OAAA,GAAYD,CAAAA,CAAU,OAAA,EACnCC,CAAAA,CAAa,YAAA,GAAiBD,CAAAA,CAAU,YAAA,CAGjCC,CAAAA,CAIJ,CACL,KAAA,CAAOD,CAAAA,CAAU,KAAA,CACjB,KAAA,CAAOA,CAAAA,CAAU,KAAA,CACjB,OAAA,CAASA,CAAAA,CAAU,OAAA,CACnB,QAAA,CAAUA,CAAAA,CAAU,QAAA,CACpB,UAAA,CAAYA,CAAAA,CAAU,UAAA,CACtB,OAAA,CAASA,CAAAA,CAAU,OAAA,CACnB,YAAA,CAAcA,CAAAA,CAAU,YAC1B,CACF,CAUO,SAASE,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACS,CACT,OAAID,CAAAA,GAAcC,CAAAA,CAAkB,CAAA,CAAA,CAChC,CAACD,CAAAA,EAAa,CAACC,CAAAA,CAAkB,CAAA,CAAA,CAGnCC,iCAAAA,CAAUF,CAAU,KAAA,CAAOC,CAAAA,CAAU,KAAK,CAAA,EAC1CD,CAAAA,CAAU,KAAA,GAAUC,CAAAA,CAAU,KAAA,EAC9BD,CAAAA,CAAU,OAAA,GAAYC,CAAAA,CAAU,OAAA,EAChCD,CAAAA,CAAU,QAAA,GAAaC,CAAAA,CAAU,QAAA,EACjCD,CAAAA,CAAU,UAAA,GAAeC,CAAAA,CAAU,UAAA,EACnCD,CAAAA,CAAU,OAAA,GAAYC,CAAAA,CAAU,OAAA,EAChCD,CAAAA,CAAU,YAAA,GAAiBC,CAAAA,CAAU,YAEzC,CAEO,IAAME,CAAAA,CAAsBJ,CAAAA,CAAAA,4CAAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-7LCFS2JM.cjs","sourcesContent":[null,"/**\n * Field State Snapshot Utilities\n *\n * Shared utilities for creating and managing field state snapshots across frameworks\n * (React, Vue, Angular). Reduces code duplication while maintaining type safety.\n */\n\nimport type { BitFieldState } from \"../store/contracts/types\";\nimport { deepEqual } from \"../utils\";\n\n/**\n * Represents a stable snapshot of field state that can be compared for equality.\n */\nexport type BitFieldSnapshot<TValue = unknown> = BitFieldState<\n Record<string, unknown>,\n TValue\n>;\n\n/**\n * Creates or reuses a field state snapshot with shallow equality checking.\n *\n * This function prevents unnecessary re-renders in frameworks like React by\n * returning the same object reference when field state hasn't changed.\n *\n * @param nextState - The new field state from the store\n * @param lastSnapshot - The previous snapshot (can be null on first call)\n * @returns A stable snapshot object that can be used for equality comparison\n *\n * @example\n * ```typescript\n * const snapshot = createFieldStateSnapshot(store.getFieldState(\"email\"), lastSnapshot);\n * if (snapshot !== lastSnapshot) {\n * // Field state changed, update component\n * render(snapshot);\n * }\n * ```\n */\nexport function createFieldStateSnapshot<TValue = unknown>(\n nextState: {\n value: TValue;\n error: string | undefined;\n touched: boolean;\n isHidden: boolean;\n isRequired: boolean;\n isDirty: boolean;\n isValidating: boolean;\n },\n lastSnapshot: BitFieldSnapshot<TValue> | null,\n): BitFieldSnapshot<TValue> {\n // Use shallow equality: return cached if all fields are equal by reference\n if (lastSnapshot) {\n const shallowEqual =\n lastSnapshot.value === nextState.value &&\n lastSnapshot.error === nextState.error &&\n lastSnapshot.touched === nextState.touched &&\n lastSnapshot.isHidden === nextState.isHidden &&\n lastSnapshot.isRequired === nextState.isRequired &&\n lastSnapshot.isDirty === nextState.isDirty &&\n lastSnapshot.isValidating === nextState.isValidating;\n\n if (shallowEqual) {\n return lastSnapshot;\n }\n }\n\n return {\n value: nextState.value,\n error: nextState.error,\n touched: nextState.touched,\n isHidden: nextState.isHidden,\n isRequired: nextState.isRequired,\n isDirty: nextState.isDirty,\n isValidating: nextState.isValidating,\n };\n}\n\n/**\n * Deep comparison utility for field state snapshots.\n * Useful for scenarios where shallow comparison isn't sufficient (e.g., object/array values).\n *\n * @param snapshotA - First snapshot\n * @param snapshotB - Second snapshot\n * @returns true if snapshots are deeply equal\n */\nexport function areFieldSnapshotsEqual(\n snapshotA: BitFieldSnapshot | null | undefined,\n snapshotB: BitFieldSnapshot | null | undefined,\n): boolean {\n if (snapshotA === snapshotB) return true;\n if (!snapshotA || !snapshotB) return false;\n\n return (\n deepEqual(snapshotA.value, snapshotB.value) &&\n snapshotA.error === snapshotB.error &&\n snapshotA.touched === snapshotB.touched &&\n snapshotA.isHidden === snapshotB.isHidden &&\n snapshotA.isRequired === snapshotB.isRequired &&\n snapshotA.isDirty === snapshotB.isDirty &&\n snapshotA.isValidating === snapshotB.isValidating\n );\n}\n\nexport const areFieldStatesEqual = areFieldSnapshotsEqual;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk3SEB4YRQcjs = require('./chunk-3SEB4YRQ.cjs');var _chunk725CMNAVcjs = require('./chunk-725CMNAV.cjs');function m(e){let t=e.read.getState();return{isValid:t.isValid,isDirty:t.isDirty,isSubmitting:t.isSubmitting}}function f(e,t){return e.observe.subscribeFormMeta(()=>t())}function g(e,t){return t(m(e)),f(e,()=>{t(m(e))})}function B(e){return e.read.getPersistMetadata()}function v(e,t){return e.observe.subscribePersistMeta(()=>t())}function x(e,t){return t(B(e)),e.observe.subscribePersistMeta(o=>{t(o)})}function w(e,t){let o=!1,a=r=>Array.isArray(r)?r:r==null?[]:((!(typeof process<"u")||process.env.NODE_ENV!=="production")&&!o&&(o=!0,console.warn(`[bit-form] createArrayBinding expected an array at path "${String(t)}" but received ${typeof r}. Returning an empty array.`)),[]),p=r=>e.feature.getArrayItemIds(t,r);return{readItems(){let r=_chunk3SEB4YRQcjs.f.call(void 0, e.read.getState().values,t);return a(r)},getFields(r){let i=p(r.length);return r.map((n,s)=>({key:i[s]||`temp-${s}`,value:n,index:s}))},append(r){e.feature.pushItem(t,r)},prepend(r){e.feature.prependItem(t,r)},insert(r,i){e.feature.insertItem(t,r,i)},remove(r){e.feature.removeItem(t,r)},move(r,i){e.feature.moveItem(t,r,i)},swap(r,i){e.feature.swapItems(t,r,i)},replace(r){e.feature.replaceItems(t,r)},clear(){e.feature.clearItems(t)}}}function b(e,t,o){return{setValue:i=>{let n=o();e.setField(t,_chunk725CMNAVcjs.c.call(void 0, i,n))},setBlur:()=>e.blurField(t),displayValue:i=>_chunk725CMNAVcjs.b.call(void 0, i,o())}}function M(e,t){return{fieldController:b({setField(a,p){e.write.setField(a,p)},blurField(a){e.write.blurField(a)}},t,()=>e.feature.resolveMask(t))}}function F(e,t){_optionalChain([e, 'optionalAccess', _ => _.preventDefault, 'optionalCall', _2 => _2()]),_optionalChain([t, 'optionalAccess', _3 => _3.stopPropagation])&&_optionalChain([e, 'optionalAccess', _4 => _4.stopPropagation, 'optionalCall', _5 => _5()])}function y(e,t,o){return{submit:i=>async n=>{F(n,o),await e.submit(i)},onSubmit:i=>async n=>{F(n,o),t.setSubmissionError(null);let s,d=await e.submit(async(P,S)=>{s=await i(P,S)});if(d.status==="submitted"){t.setSubmissionResult(s),t.setSubmissionError(null);return}d.status==="failed"&&t.setSubmissionError(d.error instanceof Error?d.error:new Error(String(d.error)))},reset:()=>{e.reset(),t.clearSubmissionState()},getValues:()=>e.getState().values,getErrors:()=>e.getState().errors,getTouched:()=>e.getState().touched,getDirtyValues:()=>e.getDirtyValues()}}function T(e,t,o){let a={getState:e.read.getState.bind(e.read),getDirtyValues:e.read.getDirtyValues.bind(e.read),submit:e.write.submit.bind(e.write),reset:e.write.reset.bind(e.write),setServerErrors:e.write.setServerErrors.bind(e.write)};return{controller:y(a,t,o),actions:{setField:e.write.setField.bind(e.write),blurField:e.write.blurField.bind(e.write),setValues:e.write.setValues.bind(e.write),setError:e.write.setError.bind(e.write),setErrors:e.write.setErrors.bind(e.write),setServerErrors:e.write.setServerErrors.bind(e.write),validate:e.feature.validate.bind(e.feature),transaction:e.write.transaction.bind(e.write)}}}function A(e,t){_optionalChain([e, 'access', _6 => _6.feature, 'optionalAccess', _7 => _7.unregisterField, 'optionalCall', _8 => _8(t)])}function k(e,t){_optionalChain([e, 'access', _9 => _9.feature, 'optionalAccess', _10 => _10.unregisterPrefix, 'optionalCall', _11 => _11(t)])}exports.a = m; exports.b = f; exports.c = g; exports.d = B; exports.e = v; exports.f = x; exports.g = w; exports.h = M; exports.i = T; exports.j = A; exports.k = k;
|
|
2
|
+
//# sourceMappingURL=chunk-AOMXTUA4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-AOMXTUA4.cjs","../src/core/bindings/form-meta.ts","../src/core/bindings/persist-meta.ts","../src/core/bindings/array-controller.ts"],"names":["readFormMetaSnapshot","store","state","subscribeFormMetaSnapshot","listener","observeFormMetaSnapshot","readPersistMetaSnapshot","subscribePersistMetaSnapshot","observePersistMetaSnapshot","meta","createArrayBinding","path","warnedTypeMismatch","normalizeItems","value","getIds","length","getDeepValue","items","ids","item","index"],"mappings":"AAAA,qoBAAwC,wDAAgD,SCGxEA,CAAAA,CACdC,CAAAA,CACa,CACb,IAAMC,CAAAA,CAAQD,CAAAA,CAAM,IAAA,CAAK,QAAA,CAAS,CAAA,CAClC,MAAO,CACL,OAAA,CAASC,CAAAA,CAAM,OAAA,CACf,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,YAAA,CAAcA,CAAAA,CAAM,YACtB,CACF,CAEO,SAASC,CAAAA,CACdF,CAAAA,CACAG,CAAAA,CACY,CACZ,OAAOH,CAAAA,CAAM,OAAA,CAAQ,iBAAA,CAAkB,CAAA,CAAA,EAAMG,CAAAA,CAAS,CAAC,CACzD,CAEO,SAASC,CAAAA,CACdJ,CAAAA,CACAG,CAAAA,CACY,CACZ,OAAAA,CAAAA,CAASJ,CAAAA,CAAqBC,CAAK,CAAC,CAAA,CAE7BE,CAAAA,CAA0BF,CAAAA,CAAO,CAAA,CAAA,EAAM,CAC5CG,CAAAA,CAASJ,CAAAA,CAAqBC,CAAK,CAAC,CACtC,CAAC,CACH,CCjBO,SAASK,CAAAA,CAAwBL,CAAAA,CAIjB,CACrB,OAAOA,CAAAA,CAAM,IAAA,CAAK,kBAAA,CAAmB,CACvC,CAEO,SAASM,CAAAA,CACdN,CAAAA,CACAG,CAAAA,CACY,CACZ,OAAOH,CAAAA,CAAM,OAAA,CAAQ,oBAAA,CAAqB,CAAA,CAAA,EAAMG,CAAAA,CAAS,CAAC,CAC5D,CAEO,SAASI,CAAAA,CACdP,CAAAA,CACAG,CAAAA,CACY,CACZ,OAAAA,CAAAA,CAASE,CAAAA,CAAwBL,CAAK,CAAC,CAAA,CAEhCA,CAAAA,CAAM,OAAA,CAAQ,oBAAA,CAAsBQ,CAAAA,EAAS,CAClDL,CAAAA,CAASK,CAAI,CACf,CAAC,CACH,CC1BO,SAASC,CAAAA,CAGdT,CAAAA,CAA2BU,CAAAA,CAAoC,CAG/D,IAAIC,CAAAA,CAAqB,CAAA,CAAA,CAEnBC,CAAAA,CAAkBC,CAAAA,EAClB,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CACdA,CAAAA,CAGLA,CAAAA,EAAS,IAAA,CACJ,CAAC,CAAA,CAAA,CAAA,CAIR,CAAA,CAAA,OAAO,OAAA,CAAY,GAAA,CAAA,EACf,OAAA,CAAQ,GAAA,CAAI,QAAA,GAAa,YAAA,CAAA,EAGlB,CAACF,CAAAA,EAAAA,CACZA,CAAAA,CAAqB,CAAA,CAAA,CACrB,OAAA,CAAQ,IAAA,CACN,CAAA,yDAAA,EAA4D,MAAA,CAC1DD,CACF,CAAC,CAAA,eAAA,EAAkB,OAAOG,CAAK,CAAA,2BAAA,CACjC,CAAA,CAAA,CAGK,CAAC,CAAA,CAAA,CAGJC,CAAAA,CAAUC,CAAAA,EACdf,CAAAA,CAAM,OAAA,CAAQ,eAAA,CAAgBU,CAAAA,CAAMK,CAAM,CAAA,CAE5C,MAAO,CACL,SAAA,CAAA,CAAY,CACV,IAAMF,CAAAA,CAAQG,iCAAAA,CACZhB,CAAM,IAAA,CAAK,QAAA,CAAS,CAAA,CAAE,MAAA,CACtBU,CACF,CAAA,CACA,OAAOE,CAAAA,CAAeC,CAAK,CAC7B,CAAA,CAEA,SAAA,CAAUI,CAAAA,CAAO,CACf,IAAMC,CAAAA,CAAMJ,CAAAA,CAAOG,CAAAA,CAAM,MAAM,CAAA,CAC/B,OAAOA,CAAAA,CAAM,GAAA,CAAI,CAACE,CAAAA,CAAMC,CAAAA,CAAAA,EAAAA,CAAW,CACjC,GAAA,CAAKF,CAAAA,CAAIE,CAAK,CAAA,EAAK,CAAA,KAAA,EAAQA,CAAK,CAAA,CAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-AOMXTUA4.cjs","sourcesContent":[null,"import type { BitFormMeta } from \"../store/contracts/public/meta-types\";\nimport type { BitStoreApi } from \"../store/contracts/public/store-api-types\";\n\nexport function readFormMetaSnapshot<T extends object>(\n store: BitStoreApi<T>,\n): BitFormMeta {\n const state = store.read.getState();\n return {\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n };\n}\n\nexport function subscribeFormMetaSnapshot<T extends object>(\n store: BitStoreApi<T>,\n listener: () => void,\n): () => void {\n return store.observe.subscribeFormMeta(() => listener());\n}\n\nexport function observeFormMetaSnapshot<T extends object>(\n store: BitStoreApi<T>,\n listener: (meta: BitFormMeta) => void,\n): () => void {\n listener(readFormMetaSnapshot(store));\n\n return subscribeFormMetaSnapshot(store, () => {\n listener(readFormMetaSnapshot(store));\n });\n}\n","import type { BitPersistMetadata } from \"../store/contracts/types\";\n\ntype BitPersistMetaReadableStore = {\n read: {\n getPersistMetadata(): BitPersistMetadata;\n };\n observe: {\n subscribePersistMeta(\n listener: (meta: BitPersistMetadata) => void,\n ): () => void;\n };\n};\n\nexport function readPersistMetaSnapshot(store: {\n read: {\n getPersistMetadata(): BitPersistMetadata;\n };\n}): BitPersistMetadata {\n return store.read.getPersistMetadata();\n}\n\nexport function subscribePersistMetaSnapshot(\n store: BitPersistMetaReadableStore,\n listener: () => void,\n): () => void {\n return store.observe.subscribePersistMeta(() => listener());\n}\n\nexport function observePersistMetaSnapshot(\n store: BitPersistMetaReadableStore,\n listener: (meta: BitPersistMetadata) => void,\n): () => void {\n listener(readPersistMetaSnapshot(store));\n\n return store.observe.subscribePersistMeta((meta) => {\n listener(meta);\n });\n}\n","import type { BitStoreApi } from \"../store/contracts/public/store-api-types\";\nimport type {\n BitArrayItem,\n BitArrayPath,\n BitPathValue,\n} from \"../store/contracts/types\";\nimport type { BitArrayBinding, BitArrayBindingField } from \"../types/bindings\";\nimport { getDeepValue } from \"../utils\";\n\nexport type { BitArrayBinding, BitArrayBindingField };\n\nexport function createArrayBinding<\n TForm extends object,\n P extends BitArrayPath<TForm>,\n>(store: BitStoreApi<TForm>, path: P): BitArrayBinding<TForm, P> {\n type Item = BitArrayItem<BitPathValue<TForm, P>>;\n\n let warnedTypeMismatch = false;\n\n const normalizeItems = (value: unknown): Item[] => {\n if (Array.isArray(value)) {\n return value as Item[];\n }\n\n if (value == null) {\n return [];\n }\n\n const isDev =\n typeof process !== \"undefined\"\n ? process.env.NODE_ENV !== \"production\"\n : true;\n\n if (isDev && !warnedTypeMismatch) {\n warnedTypeMismatch = true;\n console.warn(\n `[bit-form] createArrayBinding expected an array at path \"${String(\n path,\n )}\" but received ${typeof value}. Returning an empty array.`,\n );\n }\n\n return [];\n };\n\n const getIds = (length: number) =>\n store.feature.getArrayItemIds(path, length);\n\n return {\n readItems() {\n const value = getDeepValue(\n store.read.getState().values,\n path as string,\n ) as BitPathValue<TForm, P> | undefined;\n return normalizeItems(value);\n },\n\n getFields(items) {\n const ids = getIds(items.length);\n return items.map((item, index) => ({\n key: ids[index] || `temp-${index}`,\n value: item,\n index,\n }));\n },\n\n append(value) {\n store.feature.pushItem(path, value);\n },\n\n prepend(value) {\n store.feature.prependItem(path, value);\n },\n\n insert(index, value) {\n store.feature.insertItem(path, index, value);\n },\n\n remove(index) {\n store.feature.removeItem(path, index);\n },\n\n move(from, to) {\n store.feature.moveItem(path, from, to);\n },\n\n swap(indexA, indexB) {\n store.feature.swapItems(path, indexA, indexB);\n },\n\n replace(items) {\n store.feature.replaceItems(path, items);\n },\n\n clear() {\n store.feature.clearItems(path);\n },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/scope-status.ts"],"names":["observeScopeStatusSnapshot","store","scopeName","listener"],"mappings":"AAOO,kFAASA,CAAAA,CACdC,CAAAA,CAWAC,CAAAA,CACAC,CAAAA,CACY,CACZ,OAAAA,CAAAA,CAASF,CAAAA,CAAM,IAAA,CAAK,cAAA,CAAeC,CAAS,CAAC,CAAA,CAEtCD,CAAAA,CAAM,OAAA,CAAQ,oBAAA,CAAqBC,CAAAA,CAAWC,CAAQ,CAC/D,CAAA,cAAA","file":"/
|
|
1
|
+
{"version":3,"sources":["../src/core/scope-status.ts"],"names":["observeScopeStatusSnapshot","store","scopeName","listener"],"mappings":"AAOO,kFAASA,CAAAA,CACdC,CAAAA,CAWAC,CAAAA,CACAC,CAAAA,CACY,CACZ,OAAAA,CAAAA,CAASF,CAAAA,CAAM,IAAA,CAAK,cAAA,CAAeC,CAAS,CAAC,CAAA,CAEtCD,CAAAA,CAAM,OAAA,CAAQ,oBAAA,CAAqBC,CAAAA,CAAWC,CAAQ,CAC/D,CAAA,cAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-BSGJ3T5S.cjs","sourcesContent":["import type { ScopeStatus } from \"./store/contracts/types\";\nexport {\n areScopeErrorsEqual,\n isScopeStatusEqual,\n getScopeSubscriptionPaths,\n} from \"./store/shared/scope-status\";\n\nexport function observeScopeStatusSnapshot(\n store: {\n read: {\n getScopeStatus(scopeName: string): ScopeStatus;\n };\n observe: {\n subscribeScopeStatus(\n scopeName: string,\n listener: (status: ScopeStatus) => void,\n ): () => void;\n };\n },\n scopeName: string,\n listener: (status: ScopeStatus) => void,\n): () => void {\n listener(store.read.getScopeStatus(scopeName));\n\n return store.observe.subscribeScopeStatus(scopeName, listener);\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(t,a){try{t()}catch(e){a?a(e):console.error("BitForm upload: state callback failed without error handler \u2014 provide onCallbackError to route to observability",e)}}function p(t,a,e,u){let o=u??{current:0},r=e.onCallbackError;return async i=>{if(!i)return;let d=++o.current;n(()=>e.setLoading(!0),r),n(()=>e.setError(t,void 0),r);try{let l=await a(i);if(d!==o.current)return;n(()=>e.setValue(l.url),r),n(()=>e.setUploadKey(l.key),r),n(()=>e.setError(t,void 0),r)}catch(l){if(d!==o.current)return;let s=l instanceof Error?l.message:"Upload failed";n(()=>e.setError(t,s),r)}finally{d===o.current&&n(()=>e.setLoading(!1),r)}}}function f(t,a,e,u){let o=e.onCallbackError;return async()=>{u&&++u.current;let r=e.getUploadKey();if(r&&a){try{await a(r)}catch(i){let d=i instanceof Error?i.message:"Delete failed";n(()=>e.setError(t,d),o);return}if(e.getUploadKey()!==r)return}n(()=>e.setValue(null),o),n(()=>e.setUploadKey(null),o),n(()=>e.setError(t,void 0),o)}}export{p as a,f as b};
|
|
2
|
+
//# sourceMappingURL=chunk-CATA7YEV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/adapters/upload-kernel.ts"],"sourcesContent":["/**\n * Framework-agnostic upload kernel.\n *\n * Encapsulates the side-effect logic for uploading/removing files so that\n * React, Vue, and Angular adapters share a single implementation and only\n * differ in how they wire reactive state.\n */\n\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../types/upload\";\n\nexport interface UploadKernelCallbacks {\n /** Called with `true` when upload starts and `false` when it finishes. */\n setLoading: (loading: boolean) => void;\n /** Set or clear a field-level error message. */\n setError: (path: string, message: string | undefined) => void;\n /** Set the stored file URL after a successful upload (or `null` on remove). */\n setValue: (value: string | null) => void;\n /** Return the key of the last uploaded file (used when deleting). */\n getUploadKey: () => string | null;\n /** Persist the upload key returned by the upload function. */\n setUploadKey: (key: string | null) => void;\n /**\n * Called when a state-update callback (setValue, setLoading, etc.) throws.\n * Defaults to a no-op if not provided, but callers should route this to the\n * store's `onUnhandledError` to surface issues in observability tools.\n */\n onCallbackError?: (error: unknown) => void;\n}\n\n/**\n * Creates a type-safe `upload` handler for a field.\n *\n * @example\n * ```ts\n * const upload = createUploadHandler(\"avatar\", myUploadFn, {\n * setLoading: (v) => (isUploading.value = v),\n * setError: (p, m) => store.setError(p, m),\n * setValue: (v) => field.setValue(v),\n * getUploadKey: () => uploadKey,\n * setUploadKey: (k) => (uploadKey = k),\n * onCallbackError: (e) => store.config.onUnhandledError(e, \"upload\"),\n * });\n * ```\n */\nfunction safeCallbackExecution(fn: () => void, onError?: (e: unknown) => void): void {\n try {\n fn();\n } catch (error) {\n if (onError) {\n onError(error);\n } else {\n console.error(\n \"BitForm upload: state callback failed without error handler — provide onCallbackError to route to observability\",\n error,\n );\n }\n }\n}\n\nexport function createUploadHandler<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n callbacks: UploadKernelCallbacks,\n sharedGeneration?: { current: number },\n): (file: File | null | undefined) => Promise<void> {\n const generation = sharedGeneration ?? { current: 0 };\n const onError = callbacks.onCallbackError;\n\n return async (file) => {\n if (!file) return;\n\n const myGeneration = ++generation.current;\n safeCallbackExecution(() => callbacks.setLoading(true), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n\n try {\n const result = await uploadFn(file);\n\n if (myGeneration !== generation.current) return;\n safeCallbackExecution(() => callbacks.setValue(result.url), onError);\n safeCallbackExecution(() => callbacks.setUploadKey(result.key), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n } catch (error) {\n if (myGeneration !== generation.current) return;\n const message = error instanceof Error ? error.message : \"Upload failed\";\n safeCallbackExecution(() => callbacks.setError(fieldPath, message), onError);\n } finally {\n if (myGeneration === generation.current) {\n safeCallbackExecution(() => callbacks.setLoading(false), onError);\n }\n }\n };\n}\n\n/**\n * Creates a type-safe `remove` handler for a field.\n */\nexport function createRemoveHandler(\n fieldPath: string,\n deleteFile: BitDeleteUploadFn | undefined,\n callbacks: UploadKernelCallbacks,\n sharedGeneration?: { current: number },\n): () => Promise<void> {\n const onError = callbacks.onCallbackError;\n\n return async () => {\n if (sharedGeneration) {\n ++sharedGeneration.current;\n }\n const uploadKey = callbacks.getUploadKey();\n\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n // Use safeCallbackExecution to mirror createUploadHandler: if the adapter\n // throws inside setError (e.g. component already unmounted), the error is\n // routed to onCallbackError instead of escaping the promise unhandled.\n safeCallbackExecution(() => callbacks.setError(fieldPath, message), onError);\n return;\n }\n\n if (callbacks.getUploadKey() !== uploadKey) {\n return;\n }\n }\n\n safeCallbackExecution(() => callbacks.setValue(null), onError);\n safeCallbackExecution(() => callbacks.setUploadKey(null), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n };\n}\n"],"mappings":"AA4CA,SAASA,EAAsBC,EAAgBC,EAAsC,CACnF,GAAI,CACFD,EAAG,CACL,OAASE,EAAO,CACVD,EACFA,EAAQC,CAAK,EAEb,QAAQ,MACN,uHACAA,CACF,CAEJ,CACF,CAEO,SAASC,EAGdC,EACAC,EACAC,EACAC,EACkD,CAClD,IAAMC,EAAaD,GAAoB,CAAE,QAAS,CAAE,EAC9CN,EAAUK,EAAU,gBAE1B,MAAO,OAAOG,GAAS,CACrB,GAAI,CAACA,EAAM,OAEX,IAAMC,EAAe,EAAEF,EAAW,QAClCT,EAAsB,IAAMO,EAAU,WAAW,EAAI,EAAGL,CAAO,EAC/DF,EAAsB,IAAMO,EAAU,SAASF,EAAW,MAAS,EAAGH,CAAO,EAE7E,GAAI,CACF,IAAMU,EAAS,MAAMN,EAASI,CAAI,EAElC,GAAIC,IAAiBF,EAAW,QAAS,OACzCT,EAAsB,IAAMO,EAAU,SAASK,EAAO,GAAG,EAAGV,CAAO,EACnEF,EAAsB,IAAMO,EAAU,aAAaK,EAAO,GAAG,EAAGV,CAAO,EACvEF,EAAsB,IAAMO,EAAU,SAASF,EAAW,MAAS,EAAGH,CAAO,CAC/E,OAASC,EAAO,CACd,GAAIQ,IAAiBF,EAAW,QAAS,OACzC,IAAMI,EAAUV,aAAiB,MAAQA,EAAM,QAAU,gBACzDH,EAAsB,IAAMO,EAAU,SAASF,EAAWQ,CAAO,EAAGX,CAAO,CAC7E,QAAE,CACIS,IAAiBF,EAAW,SAC9BT,EAAsB,IAAMO,EAAU,WAAW,EAAK,EAAGL,CAAO,CAEpE,CACF,CACF,CAKO,SAASY,EACdT,EACAU,EACAR,EACAC,EACqB,CACrB,IAAMN,EAAUK,EAAU,gBAE1B,MAAO,UAAY,CACbC,GACF,EAAEA,EAAiB,QAErB,IAAMQ,EAAYT,EAAU,aAAa,EAEzC,GAAIS,GAAaD,EAAY,CAC3B,GAAI,CACF,MAAMA,EAAWC,CAAS,CAC5B,OAASb,EAAO,CACd,IAAMU,EACJV,aAAiB,MAAQA,EAAM,QAAU,gBAI3CH,EAAsB,IAAMO,EAAU,SAASF,EAAWQ,CAAO,EAAGX,CAAO,EAC3E,MACF,CAEA,GAAIK,EAAU,aAAa,IAAMS,EAC/B,MAEJ,CAEAhB,EAAsB,IAAMO,EAAU,SAAS,IAAI,EAAGL,CAAO,EAC7DF,EAAsB,IAAMO,EAAU,aAAa,IAAI,EAAGL,CAAO,EACjEF,EAAsB,IAAMO,EAAU,SAASF,EAAW,MAAS,EAAGH,CAAO,CAC/E,CACF","names":["safeCallbackExecution","fn","onError","error","createUploadHandler","fieldPath","uploadFn","callbacks","sharedGeneration","generation","file","myGeneration","result","message","createRemoveHandler","deleteFile","uploadKey"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as C}from"./chunk-PRMNTQD5.js";import{a as D,b as j,d as U,e as I,g as q,i as L,j as W,k as O}from"./chunk-XPY6TCOO.js";import{b as x}from"./chunk-UIKO6GGW.js";import{a as A}from"./chunk-X3OFU2UH.js";import{c as R,f as k}from"./chunk-JVRTPL7W.js";import{createContext as J,useContext as K,useEffect as Q,useMemo as X}from"react";import{jsx as Y}from"react/jsx-runtime";var _=J(null),yt=({store:t,children:e})=>{let r=X(()=>C(t),[t]);return Q(()=>()=>{r.feature?.cleanup?.()},[r]),Y(_.Provider,{value:r,children:e})},p=()=>{let t=K(_);if(!t)throw new Error("BitForm hooks devem ser usados dentro de um BitFormProvider");return t};import{useCallback as d,useMemo as V,useRef as Z,useState as $,useSyncExternalStore as N}from"react";function Tt(){let t=p(),[e,r]=$(null),[i,s]=$(null),o=Z(null),u=d(S=>j(t,S),[t]),a=d(()=>{let S=D(t);return o.current&&o.current.isValid===S.isValid&&o.current.isDirty===S.isDirty&&o.current.isSubmitting===S.isSubmitting?o.current:(o.current=S,S)},[t]),n=N(u,a,a),c=V(()=>L(t,{clearSubmissionState:()=>{r(null),s(null)},setSubmissionResult:S=>{s(S)},setSubmissionError:S=>{r(S)}}),[t]),{controller:l,actions:P}=c,g=d(l.submit,[l]),y=d(l.onSubmit,[l]),F=d(l.reset,[l]),m=d(l.getValues,[l]),f=d(l.getErrors,[l]),b=d(l.getTouched,[l]),h=d(l.getDirtyValues,[l]),w=V(()=>({...n,submitError:e,lastResponse:i}),[n,e,i]);return V(()=>({meta:w,getValues:m,getErrors:f,getTouched:b,getDirtyValues:h,submit:g,onSubmit:y,reset:F,...P}),[w,m,f,b,h,g,y,F,P])}import{useCallback as z,useEffect as tt,useMemo as M,useRef as et,useSyncExternalStore as rt}from"react";function At(t){let e=p(),r=M(()=>q(e,t),[e,t]),i=et(null),s=z(()=>{let n=r.readItems();return i.current&&R(i.current,n)?i.current:(i.current=n,n)},[r]),o=z(n=>e.observe.subscribePath(t,()=>n()),[e,t]),u=rt(o,s,s),a=M(()=>r.getFields(u),[r,u]);return tt(()=>()=>{O(e,`${t}.`)},[e,t]),M(()=>({fields:a,length:u.length,append:r.append,prepend:r.prepend,insert:r.insert,remove:r.remove,move:r.move,swap:r.swap,replace:r.replace,clear:r.clear}),[a,u.length,r])}import{useCallback as T,useMemo as st,useRef as ot,useSyncExternalStore as nt}from"react";function It(t){let e=p(),r=ot(null),i=T(()=>{let n=e.read.getScopeStatus(t);return r.current&&x(r.current,n)?r.current:(r.current=n,n)},[e,t]),s=T(n=>e.observe.subscribeScopeStatus(t,()=>n()),[e,t]),o=nt(s,i,i),u=T(async()=>{let n=await e.feature.validate({scope:t}),c=e.read.getScopeErrors(t);return{valid:n,errors:c}},[e,t]),a=T(()=>e.read.getScopeErrors(t),[e,t]);return st(()=>({scopeName:t,status:o,errors:o.errors,validate:u,getErrors:a,isValid:!o.hasErrors,isDirty:o.isDirty}),[t,o,u,a])}import{useCallback as B,useMemo as it,useRef as at,useState as ut,useSyncExternalStore as ct}from"react";function _t(t){if(t.length===0)throw new Error("useBitSteps: scopeNames must not be empty");let e=p(),[r,i]=ut(0),s=t[r]??"",o=at(null),u=B(()=>{let m=e.read.getScopeStatus(s);return o.current&&x(o.current,m)?o.current:(o.current=m,m)},[e,s]),a=ct(B(m=>e.observe.subscribeScopeStatus(s,()=>m()),[e,s]),u,u),n=B(async()=>{let m=await e.feature.validate({scope:s}),f=e.read.getScopeErrors(s);return{valid:m,errors:f}},[e,s]),c=B(()=>e.read.getScopeErrors(s),[e,s]),l=B(async()=>{let m=e.read.getScopeFields(s);if(e.feature.hasValidationsInProgress(m))return!1;let f=await e.feature.validate({scope:s});if(f)i(b=>Math.min(b+1,t.length-1));else{let b=e.read.getScopeErrors(s),h=Object.keys(b);h.length>0&&e.write.markFieldsTouched(h)}return f},[e,s,t.length]),P=B(()=>{i(m=>Math.max(m-1,0))},[]),g=B(m=>{i(Math.max(0,Math.min(m-1,t.length-1)))},[t.length]),y=r===0,F=r>=t.length-1;return it(()=>({step:r+1,stepIndex:r,scope:s,next:l,prev:P,goTo:g,isFirst:y,isLast:F,status:a,errors:a.errors,isValid:!a.hasErrors,isDirty:a.isDirty,validate:n,getErrors:c}),[r,s,l,P,g,y,F,a,n,c])}import{useCallback as G,useSyncExternalStore as lt,useRef as mt}from"react";function Qt(t){let e=p(),r=mt(null),i=G(()=>{let o=k(e.read.getState().values,t);return r.current!==null&&R(r.current,o)?r.current:(r.current=o,o)},[e,t]),s=G(o=>e.observe.subscribePath(t,()=>o()),[e,t]);return lt(s,i,i)}import{useCallback as v,useMemo as H,useSyncExternalStore as pt,useRef as St}from"react";function te(){let t=p(),e=v(c=>I(t,c),[t]),r=St(null),i=v(()=>{let c=U(t);return r.current&&r.current.isSaving===c.isSaving&&r.current.isRestoring===c.isRestoring&&r.current.error===c.error?r.current:(r.current=c,c)},[t]),s=pt(e,i,i),o=v(async()=>t.feature.restorePersisted(),[t]),u=v(async()=>{await t.feature.forceSave()},[t]),a=v(async()=>{await t.feature.clearPersisted()},[t]),n=H(()=>({isSaving:s.isSaving,isRestoring:s.isRestoring,error:s.error}),[s]);return H(()=>({restore:o,save:u,clear:a,meta:n}),[o,u,a,n])}import{useCallback as E,useEffect as dt,useRef as ft,useSyncExternalStore as Bt}from"react";function ue(t){let e=p(),r=ft(null);dt(()=>()=>W(e,t),[e,t]);let i=E(()=>{let n=e.read.getFieldState(t),c=A(n,r.current);return r.current=c,c},[e,t]),s=E(n=>e.observe.subscribeFieldState(t,()=>n()),[e,t]),o=Bt(s,i,i),u=E(n=>e.write.setField(t,n),[e,t]),a=E(()=>e.write.blurField(t),[e,t]);return{fieldState:o,setValue:u,setBlur:a,store:e}}export{yt as a,p as b,Tt as c,ue as d,At as e,It as f,_t as g,Qt as h,te as i};
|
|
2
|
+
//# sourceMappingURL=chunk-DNHPYPJA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/context.tsx","../src/react/use-bit-form.ts","../src/react/use-bit-array.ts","../src/react/use-bit-scope.ts","../src/react/use-bit-steps.ts","../src/react/use-bit-watch.ts","../src/react/use-bit-persist.ts","../src/react/use-bit-field-base.ts"],"sourcesContent":["import React, { createContext, useContext, useEffect, useMemo } from \"react\";\nimport type { BitFrameworkStoreApi, BitStoreApi } from \"../core\";\nimport { createFrameworkStoreAdapter } from \"../core\";\n\nconst BitContext = createContext<BitFrameworkStoreApi<any> | null>(null);\n\ninterface BitFormProviderProps<T extends object> {\n store: BitFrameworkStoreApi<T> | BitStoreApi<T>;\n children: React.ReactNode;\n}\n\ninterface BitFormProviderRuntimeProps {\n store: unknown;\n children: React.ReactNode;\n}\n\ntype BitFormProviderComponent = {\n <T extends object>(props: BitFormProviderProps<T>): React.ReactElement;\n (props: BitFormProviderRuntimeProps): React.ReactElement;\n};\n\nexport const BitFormProvider: BitFormProviderComponent = ({\n store,\n children,\n}: BitFormProviderRuntimeProps) => {\n const adapted = useMemo(() => createFrameworkStoreAdapter(store), [store]);\n\n useEffect(() => {\n return () => {\n (adapted as any).feature?.cleanup?.();\n };\n }, [adapted]);\n\n return (\n <BitContext.Provider value={adapted}>\n {children}\n </BitContext.Provider>\n );\n};\n\nexport const useBitStore = <T extends object>() => {\n const store = useContext(BitContext);\n if (!store)\n throw new Error(\n \"BitForm hooks devem ser usados dentro de um BitFormProvider\",\n );\n return store as BitFrameworkStoreApi<T>;\n};\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport {\n createFrameworkFormBinding,\n readFormMetaSnapshot,\n subscribeFormMetaSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitFormResult } from \"./types\";\n\nexport function useBitForm<T extends object>(): UseBitFormResult<T> {\n const store = useBitStore<T>();\n\n const [submitError, setSubmitError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<unknown>(null);\n const lastMeta = useRef<ReturnType<typeof readFormMetaSnapshot<T>> | null>(\n null,\n );\n\n const subscribeMeta = useCallback(\n (cb: () => void) => subscribeFormMetaSnapshot(store, cb),\n [store],\n );\n const getMetaSnapshot = useCallback(() => {\n const nextMeta = readFormMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.isValid === nextMeta.isValid &&\n lastMeta.current.isDirty === nextMeta.isDirty &&\n lastMeta.current.isSubmitting === nextMeta.isSubmitting\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const metaState = useSyncExternalStore(\n subscribeMeta,\n getMetaSnapshot,\n getMetaSnapshot,\n );\n\n const binding = useMemo(\n () =>\n createFrameworkFormBinding(store, {\n clearSubmissionState: () => {\n setSubmitError(null);\n setLastResponse(null);\n },\n setSubmissionResult: (result) => {\n setLastResponse(result);\n },\n setSubmissionError: (error) => {\n setSubmitError(error);\n },\n }),\n [store],\n );\n\n const { controller, actions } = binding;\n\n const submit = useCallback(controller.submit, [controller]);\n const onSubmit = useCallback(controller.onSubmit, [controller]);\n const reset = useCallback(controller.reset, [controller]);\n\n const getValues = useCallback(controller.getValues, [controller]);\n const getErrors = useCallback(controller.getErrors, [controller]);\n const getTouched = useCallback(controller.getTouched, [controller]);\n const getDirtyValues = useCallback(controller.getDirtyValues, [controller]);\n\n const meta = useMemo(\n () => ({\n ...metaState,\n submitError,\n lastResponse,\n }),\n [metaState, submitError, lastResponse],\n );\n\n return useMemo(\n () => ({\n // Metadata (grouped)\n meta,\n // Getters\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n // Main actions (frequent use - flat)\n submit,\n onSubmit,\n reset,\n ...actions,\n }),\n [\n meta,\n getValues,\n getErrors,\n getTouched,\n getDirtyValues,\n submit,\n onSubmit,\n reset,\n actions,\n ],\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport {\n BitArrayPath,\n cleanupRegisteredPrefix,\n createArrayBinding,\n valueEqual,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport function useBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const controller = useMemo(\n () => createArrayBinding<TForm, P>(store, path),\n [store, path],\n );\n type ArraySnapshot = ReturnType<typeof controller.readItems>;\n const lastSnapshotRef = useRef<ArraySnapshot | null>(null);\n\n const getSnapshot = useCallback(() => {\n const next = controller.readItems();\n\n if (lastSnapshotRef.current && valueEqual(lastSnapshotRef.current, next)) {\n return lastSnapshotRef.current;\n }\n\n lastSnapshotRef.current = next;\n return next;\n }, [controller]);\n\n const subscribeArray = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n const data = useSyncExternalStore(subscribeArray, getSnapshot, getSnapshot);\n\n const fields = useMemo(() => controller.getFields(data), [controller, data]);\n\n useEffect(() => {\n return () => {\n cleanupRegisteredPrefix(store, `${path as string}.`);\n };\n }, [store, path]);\n\n return useMemo(\n () => ({\n fields,\n length: data.length,\n append: controller.append,\n prepend: controller.prepend,\n insert: controller.insert,\n remove: controller.remove,\n move: controller.move,\n swap: controller.swap,\n replace: controller.replace,\n clear: controller.clear,\n }),\n [fields, data.length, controller],\n );\n}\n","import { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nexport function useBitScope(scopeName: string) {\n const store = useBitStore();\n\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.read.getScopeStatus(scopeName);\n\n if (\n lastStatus.current &&\n isScopeStatusEqual(lastStatus.current, nextStatus)\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scopeName]);\n\n // Assina apenas os slices de estado relevantes para o escopo (errors e\n // isDirty), evitando execuções desnecessárias do getStatusSnapshot em\n // mudanças não relacionadas (isSubmitting, isValidating de outros campos…)\n const subscribe = useCallback(\n (cb: () => void) =>\n store.observe.subscribeScopeStatus(scopeName, () => cb()),\n [store, scopeName],\n );\n\n const status = useSyncExternalStore(\n subscribe,\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.validate({ scope: scopeName });\n const errors = store.read.getScopeErrors(scopeName);\n return { valid, errors };\n }, [store, scopeName]);\n\n const getErrors = useCallback(() => {\n return store.read.getScopeErrors(scopeName);\n }, [store, scopeName]);\n\n return useMemo(\n () => ({\n scopeName,\n status,\n errors: status.errors,\n validate,\n getErrors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n }),\n [scopeName, status, validate, getErrors],\n );\n}\n","import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { isScopeStatusEqual } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitStepsResult } from \"./types\";\n\nexport function useBitSteps(scopeNames: string[]): UseBitStepsResult {\n if (scopeNames.length === 0) {\n throw new Error(\"useBitSteps: scopeNames must not be empty\");\n }\n const store = useBitStore();\n const [stepIndex, setStepIndex] = useState(0);\n\n const scope = scopeNames[stepIndex] ?? \"\";\n const lastStatus = useRef<ScopeStatus | null>(null);\n\n const getStatusSnapshot = useCallback(() => {\n const nextStatus = store.read.getScopeStatus(scope);\n\n if (\n lastStatus.current &&\n isScopeStatusEqual(lastStatus.current, nextStatus)\n ) {\n return lastStatus.current;\n }\n\n lastStatus.current = nextStatus;\n return nextStatus;\n }, [store, scope]);\n\n const status = useSyncExternalStore(\n useCallback(\n (cb: () => void) => store.observe.subscribeScopeStatus(scope, () => cb()),\n [store, scope],\n ),\n getStatusSnapshot,\n getStatusSnapshot,\n );\n\n const validate = useCallback(async (): Promise<ValidateScopeResult> => {\n const valid = await store.feature.validate({ scope });\n const errors = store.read.getScopeErrors(scope);\n return { valid, errors };\n }, [store, scope]);\n\n const getErrors = useCallback(() => {\n return store.read.getScopeErrors(scope);\n }, [store, scope]);\n\n const next = useCallback(async (): Promise<boolean> => {\n const scopeFields = store.read.getScopeFields(scope);\n\n if (store.feature.hasValidationsInProgress(scopeFields)) {\n return false;\n }\n\n const valid = await store.feature.validate({ scope });\n if (valid) {\n setStepIndex((s) => Math.min(s + 1, scopeNames.length - 1));\n } else {\n const errors = store.read.getScopeErrors(scope);\n const pathsWithErrors = Object.keys(errors);\n if (pathsWithErrors.length > 0) {\n store.write.markFieldsTouched(pathsWithErrors);\n }\n }\n return valid;\n }, [store, scope, scopeNames.length]);\n\n const prev = useCallback(() => {\n setStepIndex((s) => Math.max(s - 1, 0));\n }, []);\n\n const goTo = useCallback(\n (targetStep: number) => {\n setStepIndex(\n Math.max(0, Math.min(targetStep - 1, scopeNames.length - 1)),\n );\n },\n [scopeNames.length],\n );\n\n const isFirst = stepIndex === 0;\n const isLast = stepIndex >= scopeNames.length - 1;\n\n return useMemo(\n () => ({\n step: stepIndex + 1,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors: status.errors,\n isValid: !status.hasErrors,\n isDirty: status.isDirty,\n validate,\n getErrors,\n }),\n [\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n validate,\n getErrors,\n ],\n );\n}\n","import { useCallback, useSyncExternalStore, useRef } from \"react\";\nimport { useBitStore } from \"./context\";\nimport { getDeepValue, valueEqual, BitPath, BitPathValue } from \"../core\";\n\nexport function useBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): BitPathValue<TForm, P> {\n const store = useBitStore<TForm>();\n const lastValue = useRef<BitPathValue<TForm, P> | null>(null);\n\n const getSnapshot = useCallback(() => {\n const value = getDeepValue(\n store.read.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n\n if (lastValue.current !== null && valueEqual(lastValue.current, value)) {\n return lastValue.current;\n }\n\n lastValue.current = value;\n return value;\n }, [store, path]);\n\n // Assina apenas o path monitorado → evita executar getSnapshot em toda\n // mudança de estado do store (blur, validation, outros campos, etc.)\n const subscribe = useCallback(\n (cb: () => void) => store.observe.subscribePath(path, () => cb()),\n [store, path],\n );\n\n return useSyncExternalStore(\n subscribe,\n getSnapshot,\n getSnapshot,\n ) as BitPathValue<TForm, P>;\n}\n","import { useCallback, useMemo, useSyncExternalStore, useRef } from \"react\";\nimport { readPersistMetaSnapshot, subscribePersistMetaSnapshot } from \"../core\";\nimport { useBitStore } from \"./context\";\nimport type { UseBitPersistResult } from \"./types\";\n\nexport function useBitPersist(): UseBitPersistResult {\n const store = useBitStore<any>();\n\n const subscribePersistMeta = useCallback(\n (cb: () => void) => subscribePersistMetaSnapshot(store, cb),\n [store],\n );\n\n const lastMeta = useRef<ReturnType<typeof readPersistMetaSnapshot> | null>(null);\n\n const getSnapshot = useCallback(() => {\n const nextMeta = readPersistMetaSnapshot(store);\n\n if (\n lastMeta.current &&\n lastMeta.current.isSaving === nextMeta.isSaving &&\n lastMeta.current.isRestoring === nextMeta.isRestoring &&\n lastMeta.current.error === nextMeta.error\n ) {\n return lastMeta.current;\n }\n\n lastMeta.current = nextMeta;\n return nextMeta;\n }, [store]);\n\n const persistMeta = useSyncExternalStore(\n subscribePersistMeta,\n getSnapshot,\n getSnapshot,\n );\n\n const restore = useCallback(async () => {\n return store.feature.restorePersisted();\n }, [store]);\n\n const save = useCallback(async () => {\n await store.feature.forceSave();\n }, [store]);\n\n const clear = useCallback(async () => {\n await store.feature.clearPersisted();\n }, [store]);\n\n const meta = useMemo(\n () => ({\n isSaving: persistMeta.isSaving,\n isRestoring: persistMeta.isRestoring,\n error: persistMeta.error,\n }),\n [persistMeta],\n );\n\n return useMemo(\n () => ({\n restore,\n save,\n clear,\n meta,\n }),\n [restore, save, clear, meta],\n );\n}\n","import { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport {\n BitFieldSnapshot,\n BitPath,\n BitPathValue,\n cleanupRegisteredField,\n createFieldStateSnapshot,\n} from \"../core\";\nimport { useBitStore } from \"./context\";\n\nexport function useBitFieldBase<\n _TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P) {\n const store = useBitStore<TForm>();\n const lastSnapshot = useRef<BitFieldSnapshot<BitPathValue<TForm, P>> | null>(\n null,\n );\n\n useEffect(() => {\n return () => cleanupRegisteredField(store, path as string);\n }, [store, path]);\n\n const getSnapshot = useCallback(() => {\n const nextState = store.read.getFieldState(path);\n const snapshot = createFieldStateSnapshot(nextState, lastSnapshot.current);\n lastSnapshot.current = snapshot;\n return snapshot;\n }, [store, path]);\n\n const subscribe = useCallback(\n (cb: () => void) => store.observe.subscribeFieldState(path, () => cb()),\n [store, path],\n );\n\n const fieldState = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n const setValue = useCallback(\n (val: BitPathValue<TForm, P>) => store.write.setField(path, val),\n [store, path],\n );\n\n const setBlur = useCallback(() => store.write.blurField(path), [store, path]);\n\n return { fieldState, setValue, setBlur, store };\n}\n"],"mappings":"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","names":["createContext","useContext","useEffect","useMemo","jsx","BitContext","createContext","BitFormProvider","store","children","adapted","useMemo","createFrameworkStoreAdapter","useEffect","useBitStore","useContext","useCallback","useMemo","useRef","useState","useSyncExternalStore","useBitForm","store","useBitStore","submitError","setSubmitError","useState","lastResponse","setLastResponse","lastMeta","useRef","subscribeMeta","useCallback","cb","subscribeFormMetaSnapshot","getMetaSnapshot","nextMeta","readFormMetaSnapshot","metaState","useSyncExternalStore","binding","useMemo","createFrameworkFormBinding","result","error","controller","actions","submit","onSubmit","reset","getValues","getErrors","getTouched","getDirtyValues","meta","useCallback","useEffect","useMemo","useRef","useSyncExternalStore","useBitArray","path","store","useBitStore","controller","useMemo","createArrayBinding","lastSnapshotRef","useRef","getSnapshot","useCallback","next","valueEqual","subscribeArray","cb","data","useSyncExternalStore","fields","useEffect","cleanupRegisteredPrefix","useCallback","useMemo","useRef","useSyncExternalStore","useBitScope","scopeName","store","useBitStore","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","isScopeStatusEqual","subscribe","cb","status","useSyncExternalStore","validate","valid","errors","getErrors","useMemo","useCallback","useMemo","useRef","useState","useSyncExternalStore","useBitSteps","scopeNames","store","useBitStore","stepIndex","setStepIndex","useState","scope","lastStatus","useRef","getStatusSnapshot","useCallback","nextStatus","isScopeStatusEqual","status","useSyncExternalStore","cb","validate","valid","errors","getErrors","next","scopeFields","s","pathsWithErrors","prev","goTo","targetStep","isFirst","isLast","useMemo","useCallback","useSyncExternalStore","useRef","useBitWatch","path","store","useBitStore","lastValue","useRef","getSnapshot","useCallback","value","getDeepValue","valueEqual","subscribe","cb","useSyncExternalStore","useCallback","useMemo","useSyncExternalStore","useRef","useBitPersist","store","useBitStore","subscribePersistMeta","useCallback","cb","subscribePersistMetaSnapshot","lastMeta","useRef","getSnapshot","nextMeta","readPersistMetaSnapshot","persistMeta","useSyncExternalStore","restore","save","clear","meta","useMemo","useCallback","useEffect","useRef","useSyncExternalStore","useBitFieldBase","path","store","useBitStore","lastSnapshot","useRef","useEffect","cleanupRegisteredField","getSnapshot","useCallback","nextState","snapshot","createFieldStateSnapshot","subscribe","cb","fieldState","useSyncExternalStore","setValue","val","setBlur"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function n(t,a){try{t()}catch(e){a?a(e):console.error("BitForm upload: state callback failed without error handler \u2014 provide onCallbackError to route to observability",e)}}function p(t,a,e,u){let o=_nullishCoalesce(u, () => ({current:0})),r=e.onCallbackError;return async i=>{if(!i)return;let d=++o.current;n(()=>e.setLoading(!0),r),n(()=>e.setError(t,void 0),r);try{let l=await a(i);if(d!==o.current)return;n(()=>e.setValue(l.url),r),n(()=>e.setUploadKey(l.key),r),n(()=>e.setError(t,void 0),r)}catch(l){if(d!==o.current)return;let s=l instanceof Error?l.message:"Upload failed";n(()=>e.setError(t,s),r)}finally{d===o.current&&n(()=>e.setLoading(!1),r)}}}function f(t,a,e,u){let o=e.onCallbackError;return async()=>{u&&++u.current;let r=e.getUploadKey();if(r&&a){try{await a(r)}catch(i){let d=i instanceof Error?i.message:"Delete failed";n(()=>e.setError(t,d),o);return}if(e.getUploadKey()!==r)return}n(()=>e.setValue(null),o),n(()=>e.setUploadKey(null),o),n(()=>e.setError(t,void 0),o)}}exports.a = p; exports.b = f;
|
|
2
|
+
//# sourceMappingURL=chunk-H3RTOA6X.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/adapters/upload-kernel.ts"],"names":["safeCallbackExecution","fn","onError","error","createUploadHandler","fieldPath","uploadFn","callbacks","sharedGeneration","generation","file","myGeneration","result","message","createRemoveHandler","deleteFile","uploadKey"],"mappings":"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","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-H3RTOA6X.cjs","sourcesContent":["/**\n * Framework-agnostic upload kernel.\n *\n * Encapsulates the side-effect logic for uploading/removing files so that\n * React, Vue, and Angular adapters share a single implementation and only\n * differ in how they wire reactive state.\n */\n\nimport type { BitDeleteUploadFn, BitUploadFn } from \"../types/upload\";\n\nexport interface UploadKernelCallbacks {\n /** Called with `true` when upload starts and `false` when it finishes. */\n setLoading: (loading: boolean) => void;\n /** Set or clear a field-level error message. */\n setError: (path: string, message: string | undefined) => void;\n /** Set the stored file URL after a successful upload (or `null` on remove). */\n setValue: (value: string | null) => void;\n /** Return the key of the last uploaded file (used when deleting). */\n getUploadKey: () => string | null;\n /** Persist the upload key returned by the upload function. */\n setUploadKey: (key: string | null) => void;\n /**\n * Called when a state-update callback (setValue, setLoading, etc.) throws.\n * Defaults to a no-op if not provided, but callers should route this to the\n * store's `onUnhandledError` to surface issues in observability tools.\n */\n onCallbackError?: (error: unknown) => void;\n}\n\n/**\n * Creates a type-safe `upload` handler for a field.\n *\n * @example\n * ```ts\n * const upload = createUploadHandler(\"avatar\", myUploadFn, {\n * setLoading: (v) => (isUploading.value = v),\n * setError: (p, m) => store.setError(p, m),\n * setValue: (v) => field.setValue(v),\n * getUploadKey: () => uploadKey,\n * setUploadKey: (k) => (uploadKey = k),\n * onCallbackError: (e) => store.config.onUnhandledError(e, \"upload\"),\n * });\n * ```\n */\nfunction safeCallbackExecution(fn: () => void, onError?: (e: unknown) => void): void {\n try {\n fn();\n } catch (error) {\n if (onError) {\n onError(error);\n } else {\n console.error(\n \"BitForm upload: state callback failed without error handler — provide onCallbackError to route to observability\",\n error,\n );\n }\n }\n}\n\nexport function createUploadHandler<\n TMetadata extends Record<string, unknown> = Record<string, unknown>,\n>(\n fieldPath: string,\n uploadFn: BitUploadFn<TMetadata>,\n callbacks: UploadKernelCallbacks,\n sharedGeneration?: { current: number },\n): (file: File | null | undefined) => Promise<void> {\n const generation = sharedGeneration ?? { current: 0 };\n const onError = callbacks.onCallbackError;\n\n return async (file) => {\n if (!file) return;\n\n const myGeneration = ++generation.current;\n safeCallbackExecution(() => callbacks.setLoading(true), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n\n try {\n const result = await uploadFn(file);\n\n if (myGeneration !== generation.current) return;\n safeCallbackExecution(() => callbacks.setValue(result.url), onError);\n safeCallbackExecution(() => callbacks.setUploadKey(result.key), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n } catch (error) {\n if (myGeneration !== generation.current) return;\n const message = error instanceof Error ? error.message : \"Upload failed\";\n safeCallbackExecution(() => callbacks.setError(fieldPath, message), onError);\n } finally {\n if (myGeneration === generation.current) {\n safeCallbackExecution(() => callbacks.setLoading(false), onError);\n }\n }\n };\n}\n\n/**\n * Creates a type-safe `remove` handler for a field.\n */\nexport function createRemoveHandler(\n fieldPath: string,\n deleteFile: BitDeleteUploadFn | undefined,\n callbacks: UploadKernelCallbacks,\n sharedGeneration?: { current: number },\n): () => Promise<void> {\n const onError = callbacks.onCallbackError;\n\n return async () => {\n if (sharedGeneration) {\n ++sharedGeneration.current;\n }\n const uploadKey = callbacks.getUploadKey();\n\n if (uploadKey && deleteFile) {\n try {\n await deleteFile(uploadKey);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Delete failed\";\n // Use safeCallbackExecution to mirror createUploadHandler: if the adapter\n // throws inside setError (e.g. component already unmounted), the error is\n // routed to onCallbackError instead of escaping the promise unhandled.\n safeCallbackExecution(() => callbacks.setError(fieldPath, message), onError);\n return;\n }\n\n if (callbacks.getUploadKey() !== uploadKey) {\n return;\n }\n }\n\n safeCallbackExecution(() => callbacks.setValue(null), onError);\n safeCallbackExecution(() => callbacks.setUploadKey(null), onError);\n safeCallbackExecution(() => callbacks.setError(fieldPath, undefined), onError);\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});function o(e){let i=e.touched?e.error:void 0,r=e.error!==void 0;return{error:i,touched:e.touched,invalid:!!(e.touched&&e.error),isValidating:e.isValidating,isDirty:e.isDirty,isHidden:e.isHidden,isRequired:e.isRequired,hasError:r}}exports.a = o;
|
|
2
|
+
//# sourceMappingURL=chunk-H6HGYVRV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/utils/field-meta.ts"],"names":["deriveFieldMeta","state","error","hasError"],"mappings":"AAaO,kFAASA,CAAAA,CACdC,CAAAA,CACqB,CACrB,IAAMC,CAAAA,CAAQD,CAAAA,CAAM,OAAA,CAAUA,CAAAA,CAAM,KAAA,CAAQ,KAAA,CAAA,CACtCE,CAAAA,CAAWF,CAAAA,CAAM,KAAA,GAAU,KAAA,CAAA,CAEjC,MAAO,CACL,KAAA,CAAAC,CAAAA,CACA,OAAA,CAASD,CAAAA,CAAM,OAAA,CACf,OAAA,CAAS,CAAC,CAAA,CAAEA,CAAAA,CAAM,OAAA,EAAWA,CAAAA,CAAM,KAAA,CAAA,CACnC,YAAA,CAAcA,CAAAA,CAAM,YAAA,CACpB,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAChB,UAAA,CAAYA,CAAAA,CAAM,UAAA,CAClB,QAAA,CAAAE,CACF,CACF,CAAA,cAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-H6HGYVRV.cjs","sourcesContent":["import type { BitFieldState } from \"../store/contracts/types\";\n\nexport interface BitDerivedFieldMeta {\n error: string | undefined;\n touched: boolean;\n invalid: boolean;\n isValidating: boolean;\n isDirty: boolean;\n isHidden: boolean;\n isRequired: boolean;\n hasError: boolean;\n}\n\nexport function deriveFieldMeta<T extends object, TValue>(\n state: Readonly<BitFieldState<T, TValue>>,\n): BitDerivedFieldMeta {\n const error = state.touched ? state.error : undefined;\n const hasError = state.error !== undefined;\n\n return {\n error,\n touched: state.touched,\n invalid: !!(state.touched && state.error),\n isValidating: state.isValidating,\n isDirty: state.isDirty,\n isHidden: state.isHidden,\n isRequired: state.isRequired,\n hasError,\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function l(e,n=new WeakMap){if(e===null||typeof e!="object")return e;if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(n.has(e))return n.get(e);if(e instanceof Map){let r=new Map;return n.set(e,r),e.forEach((c,t)=>{r.set(l(t,n),l(c,n))}),r}if(e instanceof Set){let r=new Set;return n.set(e,r),e.forEach(c=>{r.add(l(c,n))}),r}if(Array.isArray(e)){let r=[];n.set(e,r);for(let c of e)r.push(l(c,n));return r}if(ArrayBuffer.isView(e))return new e.constructor(e);if(e instanceof ArrayBuffer)return e.slice(0);if(e instanceof WeakMap||e instanceof WeakSet)return e;if(e instanceof Promise)return e.then(r=>l(r,new WeakMap));let s=Object.getPrototypeOf(e);if(!(s===Object.prototype||s===null)){let r=Object.create(s);n.set(e,r);for(let c of Reflect.ownKeys(e)){let t=Object.getOwnPropertyDescriptor(e,c);t&&("value"in t&&(t.value=l(t.value,n)),Object.defineProperty(r,c,t))}return r}let a={};n.set(e,a);for(let r of Reflect.ownKeys(e)){if(typeof r=="string"&&(r==="__proto__"||r==="constructor"))continue;let c=Object.getOwnPropertyDescriptor(e,r);c&&"value"in c&&(a[r]=l(e[r],n))}return a}function k(e){return l(e)}function R(e,n,s=new WeakMap){if(n===void 0)return k(e);if(n===null||typeof n!="object"||n instanceof Date||n instanceof RegExp||Array.isArray(n))return k(n);let o=n;if(s.has(o))return s.get(o);let a=e&&typeof e=="object"&&!Array.isArray(e)?k(e):{};s.set(o,a);let r=new Set(["__proto__","constructor","prototype"]);try{for(let c of Object.keys(n)){if(r.has(c))continue;let t=n[c],i=a[c];if(t!==null&&typeof t=="object"&&!Array.isArray(t)&&!(t instanceof Date)&&!(t instanceof RegExp)){a[c]=R(i,t,s);continue}a[c]=k(t)}}finally{s.delete(o)}return a}function w(e,n){return Number.isNaN(e)&&Number.isNaN(n)||e===n?!0:e===null||typeof e!="object"||n===null||typeof n!="object"?!1:N(e,n)}function N(e,n){return T(e,n,new WeakMap)}function T(e,n,s){if(Number.isNaN(e)&&Number.isNaN(n)||e===n)return!0;if(e===null||typeof e!="object"||n===null||typeof n!="object")return!1;let o=s.get(e);if(o?.has(n))return!0;if(o?o.add(n):s.set(e,new WeakSet([n])),Array.isArray(e)!==Array.isArray(n)||e.constructor!==null&&n.constructor!==null&&e.constructor!==n.constructor)return!1;if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(e instanceof RegExp&&n instanceof RegExp)return e.toString()===n.toString();let a=Object.keys(e),r=Object.keys(n);if(a.length!==r.length)return!1;for(let c of a)if(!Object.prototype.hasOwnProperty.call(n,c)||!T(e[c],n[c],s))return!1;return!0}function O(e,n,s="",o=new Set,a=new Map){if(w(e,n))return o;if(e===null||typeof e!="object"||n===null||typeof n!="object")return s&&o.add(s),o;let r=a.get(e);if(r?.has(n))return o;r?r.add(n):a.set(e,new Set([n]));try{if(Array.isArray(e)||Array.isArray(n))return!w(e,n)&&s&&o.add(s),o;let c=new Set;for(let t of Object.keys(e||{}))c.add(t);for(let t of Object.keys(n||{}))c.add(t);for(let t of c){let i=s?`${s}.${t}`:t;O(e?.[t],n?.[t],i,o,a)}return o}finally{let c=a.get(e);c?.delete(n),c&&c.size===0&&a.delete(e)}}var p=new Map,b=new Set(["__proto__"]);function E(e,n){if(p.has(e))p.delete(e);else if(p.size>=5e3){let s=p.keys().next().value;s!==void 0&&p.delete(s)}p.set(e,n)}function d(e){let n=p.get(e);if(n)return n;let s=e.split(".").filter(o=>o.length>0);return E(e,s),s}function A(e){for(let n=0;n<e.length;n++){let s=e[n];if(b.has(s)||s==="constructor"&&e[n+1]==="prototype")return!0}return!1}function K(e,n){if(!n)return e;let s=d(n);if(A(s))return;let o=e;for(let a of s){if(o==null)return;o=o[a]}return o}function V(e,n,s){if(!n)return s;let o=d(n);if(A(o))return e;let a=Array.isArray(e)?[...e]:{...e},r=a;for(let c=0;c<o.length-1;c++){let t=o[c],i=o[c+1],u=Number(i),y=Number.isInteger(u)&&String(u)===i,f=r[t];f==null?r[t]=y?[]:{}:r[t]=Array.isArray(f)?[...f]:{...f},r=r[t]}return r[o[o.length-1]]=s,a}function D(e,n){if(n.length===0)return e;let s=n.filter(([r])=>{let c=d(r);return!A(c)});if(s.length===0)return e;let o=Array.isArray(e)?[...e]:{...e},a=new WeakSet;o&&typeof o=="object"&&a.add(o);for(let[r,c]of s){let t=d(r),i=o;for(let u=0;u<t.length-1;u++){let y=t[u],f=t[u+1],m=Number(f),x=Number.isInteger(m)&&String(m)===f,g=i[y];g==null?(i[y]=x?[]:{},a.add(i[y])):typeof g=="object"?a.has(g)||(i[y]=Array.isArray(g)?[...g]:{...g},a.add(i[y])):(typeof g<"u"&&console.warn(`BitStore: overwriting non-object value at "${t.slice(0,u).join(".")}"`),i[y]=x?[]:{},a.add(i[y])),i=i[y]}i[t[t.length-1]]=c}return o}function _(e,n){if(n.length===0)return e;let s=n.filter(r=>{if(!r)return!0;let c=d(r);return!A(c)});if(s.length===0)return e;let o=Array.isArray(e)?[...e]:{...e},a=new WeakSet;o&&typeof o=="object"&&a.add(o);for(let r of s){if(!r)continue;let c=d(r),t=o;for(let u=0;u<c.length-1;u++){let y=c[u],f=t?.[y];if(f==null){t=void 0;break}if(typeof f=="object")a.has(f)||(t[y]=Array.isArray(f)?[...f]:{...f},a.add(t[y]));else{t=void 0;break}t=t[y]}if(!t)continue;let i=c[c.length-1];if(Array.isArray(t)){let u=Number(i);Number.isInteger(u)&&u>=0&&t.splice(u,1)}else t&&typeof t=="object"&&delete t[i]}return o}function W(e,n){let s={},o=`${n}.`;for(let a of Object.keys(e))a!==n&&!a.startsWith(o)&&(s[a]=e[a]);return s}function M(e,n,s){let o={},a={},r={},c=`${n}.`;for(let t of Object.keys(e.errors)){let i=h(t,c,s);i&&(o[i]=e.errors[t])}for(let t of Object.keys(e.touched)){let i=h(t,c,s);i&&(a[i]=e.touched[t])}for(let t of Object.keys(e.isValidating)){let i=h(t,c,s);i&&(r[i]=e.isValidating[t])}return{errors:o,touched:a,isValidating:r}}function h(e,n,s){if(!e.startsWith(n))return e;let a=e.substring(n.length).split("."),r=Number(a[0]);if(!Number.isInteger(r)||r<0)return e;let c=s(r);if(c===null)return null;let t=a.slice(1).join(".");return t?`${n}${c}.${t}`:`${n}${c}`}function S(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let n=e.errors??e;if(typeof n!="object"||n===null||Array.isArray(n))return!1;let s=Object.entries(n);return s.length===0?!1:s.every(([o,a])=>o.length>0&&(typeof a=="string"||Array.isArray(a)&&a.every(r=>typeof r=="string")||typeof a=="object"&&a!==null&&"message"in a&&typeof a.message=="string"))}function P(e){return S(e)?e.errors??e:{}}export{k as a,R as b,w as c,N as d,O as e,K as f,V as g,D as h,_ as i,W as j,M as k,h as l,S as m,P as n};
|
|
2
|
+
//# sourceMappingURL=chunk-JVRTPL7W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/utils/clone.ts","../src/core/utils/structural.ts","../src/core/utils/path-value.ts","../src/core/utils/array-meta.ts","../src/core/utils/server-errors.ts"],"sourcesContent":["export function cloneValue<T>(\n obj: T,\n visited: WeakMap<object, unknown> = new WeakMap(),\n): T {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (typeof structuredClone === \"function\") {\n try {\n return structuredClone(obj);\n } catch {\n // Alguns runtimes lançam para payloads não suportados (ex.: funções).\n // Nesses casos, seguimos para o clone recursivo para manter fail-open.\n }\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any as T;\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj.source, obj.flags) as any as T;\n }\n\n if (visited.has(obj as object)) {\n return visited.get(obj as object) as T;\n }\n\n if (obj instanceof Map) {\n const clone = new Map<unknown, unknown>();\n visited.set(obj as object, clone);\n\n obj.forEach((value, key) => {\n clone.set(cloneValue(key, visited), cloneValue(value, visited));\n });\n\n return clone as T;\n }\n\n if (obj instanceof Set) {\n const clone = new Set<unknown>();\n visited.set(obj as object, clone);\n\n obj.forEach((value) => {\n clone.add(cloneValue(value, visited));\n });\n\n return clone as T;\n }\n\n if (Array.isArray(obj)) {\n const clone: unknown[] = [];\n visited.set(obj as object, clone);\n\n for (const item of obj) {\n clone.push(cloneValue(item, visited));\n }\n\n return clone as T;\n }\n\n if (ArrayBuffer.isView(obj)) {\n return new (obj.constructor as any)(obj) as T;\n }\n\n if (obj instanceof ArrayBuffer) {\n return obj.slice(0) as T;\n }\n\n if (obj instanceof WeakMap || obj instanceof WeakSet) {\n return obj;\n }\n\n if (obj instanceof Promise) {\n return obj.then((v) => cloneValue(v, new WeakMap())) as T;\n }\n\n const prototype = Object.getPrototypeOf(obj);\n const isPlainObject = prototype === Object.prototype || prototype === null;\n\n if (!isPlainObject) {\n const clone = Object.create(prototype) as Record<PropertyKey, unknown>;\n visited.set(obj as object, clone);\n\n for (const key of Reflect.ownKeys(obj as object)) {\n const descriptor = Object.getOwnPropertyDescriptor(obj as object, key);\n if (!descriptor) {\n continue;\n }\n\n if (\"value\" in descriptor) {\n descriptor.value = cloneValue(descriptor.value, visited);\n }\n\n Object.defineProperty(clone, key, descriptor);\n }\n\n return clone as T;\n }\n\n const clone: any = {};\n visited.set(obj as object, clone);\n\n for (const key of Reflect.ownKeys(obj as object)) {\n if (\n typeof key === \"string\" &&\n (key === \"__proto__\" || key === \"constructor\")\n ) {\n continue;\n }\n const desc = Object.getOwnPropertyDescriptor(obj as object, key);\n if (desc && \"value\" in desc) {\n clone[key] = cloneValue((obj as any)[key], visited);\n }\n }\n\n return clone as T;\n}\n","import { cloneValue } from \"./clone\";\n\nexport function deepClone<T>(obj: T): T {\n return cloneValue(obj);\n}\n\nexport function deepMerge<T>(\n target: T,\n source: any,\n activeMerges: WeakMap<object, unknown> = new WeakMap(),\n): T {\n if (source === undefined) {\n return deepClone(target);\n }\n\n if (\n source === null ||\n typeof source !== \"object\" ||\n source instanceof Date ||\n source instanceof RegExp ||\n Array.isArray(source)\n ) {\n return deepClone(source as T);\n }\n\n const sourceObject = source as object;\n if (activeMerges.has(sourceObject)) {\n return activeMerges.get(sourceObject) as T;\n }\n\n const base =\n target && typeof target === \"object\" && !Array.isArray(target)\n ? deepClone(target as any)\n : ({} as Record<string, unknown>);\n\n activeMerges.set(sourceObject, base);\n\n const BLOCKED_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\n try {\n for (const key of Object.keys(source)) {\n if (BLOCKED_KEYS.has(key)) {\n continue;\n }\n\n const sourceValue = source[key];\n const baseValue = (base as Record<string, unknown>)[key];\n\n if (\n sourceValue !== null &&\n typeof sourceValue === \"object\" &&\n !Array.isArray(sourceValue) &&\n !(sourceValue instanceof Date) &&\n !(sourceValue instanceof RegExp)\n ) {\n (base as Record<string, unknown>)[key] = deepMerge(\n baseValue,\n sourceValue,\n activeMerges,\n );\n continue;\n }\n\n (base as Record<string, unknown>)[key] = deepClone(sourceValue);\n }\n } finally {\n activeMerges.delete(sourceObject);\n }\n\n return base as T;\n}\n\nexport function valueEqual(a: any, b: any): boolean {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\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 return deepEqualInner(a, b, new WeakMap());\n}\n\nfunction deepEqualInner(\n a: any,\n b: any,\n visitedPairs: WeakMap<object, WeakSet<object>>,\n): boolean {\n if (Number.isNaN(a) && Number.isNaN(b)) return true;\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 const visitedTargets = visitedPairs.get(a);\n if (visitedTargets?.has(b)) return true;\n\n if (visitedTargets) {\n visitedTargets.add(b);\n } else {\n visitedPairs.set(a, new WeakSet([b]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n if (a.constructor !== null && b.constructor !== null && a.constructor !== b.constructor) return false;\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 !deepEqualInner(a[key], b[key], visitedPairs)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function collectDirtyPaths(\n obj: any,\n initial: any,\n prefix = \"\",\n result: Set<string> = new Set(),\n activePairs: Map<object, Set<object>> = new Map(),\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\n const activeInitials = activePairs.get(obj as object);\n if (activeInitials?.has(initial as object)) {\n return result;\n }\n\n if (activeInitials) {\n activeInitials.add(initial as object);\n } else {\n activePairs.set(obj as object, new Set([initial as object]));\n }\n\n try {\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<string>();\n for (const key of Object.keys(obj || {})) {\n allKeys.add(key);\n }\n for (const key of Object.keys(initial || {})) {\n allKeys.add(key);\n }\n for (const k of allKeys) {\n const p = prefix ? `${prefix}.${k}` : k;\n collectDirtyPaths(\n (obj as any)?.[k],\n (initial as any)?.[k],\n p,\n result,\n activePairs,\n );\n }\n return result;\n } finally {\n const nextActiveInitials = activePairs.get(obj as object);\n nextActiveInitials?.delete(initial as object);\n\n if (nextActiveInitials && nextActiveInitials.size === 0) {\n activePairs.delete(obj as object);\n }\n }\n}\n","const PATH_CACHE_MAX = 5000;\nconst pathCache = new Map<string, string[]>();\nconst BLOCKED_PATH_SEGMENTS = new Set([\"__proto__\"]);\n\nfunction setPathCacheEntry(path: string, keys: string[]) {\n if (pathCache.has(path)) {\n pathCache.delete(path);\n } else if (pathCache.size >= PATH_CACHE_MAX) {\n const oldestKey = pathCache.keys().next().value;\n if (oldestKey !== undefined) {\n pathCache.delete(oldestKey);\n }\n }\n\n pathCache.set(path, keys);\n}\n\nfunction getPathKeys(path: string): string[] {\n const cached = pathCache.get(path);\n if (cached) {\n return cached;\n }\n\n const keys = path.split(\".\").filter((k) => k.length > 0);\n setPathCacheEntry(path, keys);\n return keys;\n}\n\nfunction hasBlockedPathSegment(keys: readonly string[]): boolean {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n if (BLOCKED_PATH_SEGMENTS.has(key)) {\n return true;\n }\n\n if (key === \"constructor\" && keys[i + 1] === \"prototype\") {\n return true;\n }\n }\n\n return false;\n}\n\nexport function getDeepValue(obj: any, path: string): any {\n if (!path) return obj;\n\n const keys = getPathKeys(path);\n if (hasBlockedPathSegment(keys)) return undefined;\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 = getPathKeys(path);\n if (hasBlockedPathSegment(keys)) return obj;\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 nextAsNumber = Number(nextKey);\n const isNextNumeric =\n Number.isInteger(nextAsNumber) && String(nextAsNumber) === 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 setDeepValues(\n obj: any,\n updates: ReadonlyArray<readonly [path: string, value: any]>,\n): any {\n if (updates.length === 0) {\n return obj;\n }\n\n const safeUpdates = updates.filter(([path]) => {\n const keys = getPathKeys(path);\n return !hasBlockedPathSegment(keys);\n });\n\n if (safeUpdates.length === 0) {\n return obj;\n }\n\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\n const clonedNodes = new WeakSet<object>();\n if (root && typeof root === \"object\") {\n clonedNodes.add(root);\n }\n\n for (const [path, value] of safeUpdates) {\n const keys = getPathKeys(path);\n let current: any = root;\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 nextAsNumber = Number(nextKey);\n const isNextNumeric =\n Number.isInteger(nextAsNumber) && String(nextAsNumber) === nextKey;\n\n const currentValue = current[key];\n\n if (currentValue === null || currentValue === undefined) {\n current[key] = isNextNumeric ? [] : {};\n clonedNodes.add(current[key]);\n } else if (typeof currentValue === \"object\") {\n if (!clonedNodes.has(currentValue)) {\n current[key] = Array.isArray(currentValue)\n ? [...currentValue]\n : { ...currentValue };\n clonedNodes.add(current[key]);\n }\n } else {\n if (typeof currentValue !== \"undefined\") {\n console.warn(\n `BitStore: overwriting non-object value at \"${keys.slice(0, i).join(\".\")}\"`,\n );\n }\n current[key] = isNextNumeric ? [] : {};\n clonedNodes.add(current[key]);\n }\n\n current = current[key];\n }\n\n current[keys[keys.length - 1]] = value;\n }\n\n return root;\n}\n\nexport function unsetDeepValue(obj: any, path: string): any {\n if (!path) {\n return Array.isArray(obj) ? [] : {};\n }\n\n const keys = getPathKeys(path);\n if (hasBlockedPathSegment(keys)) {\n return obj;\n }\n\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\n let current: any = root;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n const currentValue = current?.[key];\n\n if (currentValue === null || currentValue === undefined) {\n return root;\n }\n\n current[key] = Array.isArray(currentValue)\n ? [...currentValue]\n : { ...currentValue };\n\n current = current[key];\n }\n\n const leafKey = keys[keys.length - 1];\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(leafKey);\n // Only splice if leafKey is a valid array index (integer >= 0)\n if (Number.isInteger(arrayIndex) && arrayIndex >= 0) {\n current.splice(arrayIndex, 1);\n }\n } else if (current && typeof current === \"object\") {\n delete current[leafKey];\n }\n\n return root;\n}\n\nexport function unsetDeepValues(obj: any, paths: ReadonlyArray<string>): any {\n if (paths.length === 0) {\n return obj;\n }\n\n const safePaths = paths.filter((path) => {\n if (!path) return true;\n const keys = getPathKeys(path);\n return !hasBlockedPathSegment(keys);\n });\n\n if (safePaths.length === 0) {\n return obj;\n }\n\n const root = Array.isArray(obj) ? [...obj] : { ...obj };\n const clonedNodes = new WeakSet<object>();\n if (root && typeof root === \"object\") {\n clonedNodes.add(root);\n }\n\n for (const path of safePaths) {\n if (!path) {\n continue;\n }\n\n const keys = getPathKeys(path);\n\n let current: any = root;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n const currentValue = current?.[key];\n\n if (currentValue === null || currentValue === undefined) {\n current = undefined;\n break;\n }\n\n if (typeof currentValue === \"object\") {\n if (!clonedNodes.has(currentValue)) {\n current[key] = Array.isArray(currentValue)\n ? [...currentValue]\n : { ...currentValue };\n clonedNodes.add(current[key]);\n }\n } else {\n current = undefined;\n break;\n }\n\n current = current[key];\n }\n\n if (!current) {\n continue;\n }\n\n const leafKey = keys[keys.length - 1];\n\n if (Array.isArray(current)) {\n const arrayIndex = Number(leafKey);\n // Only splice if leafKey is a valid array index (integer >= 0)\n if (Number.isInteger(arrayIndex) && arrayIndex >= 0) {\n current.splice(arrayIndex, 1);\n }\n } else if (current && typeof current === \"object\") {\n delete current[leafKey];\n }\n }\n\n return root;\n}\n","export 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 of Object.keys(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 return reindexObjectKeys(obj, path, (currentIdx) => {\n if (currentIdx === removedIndex) {\n return null;\n }\n\n return currentIdx > removedIndex ? currentIdx - 1 : currentIdx;\n });\n};\n\nexport const swapKeys = (\n obj: Record<string, any>,\n path: string,\n indexA: number,\n indexB: number,\n) => {\n return reindexObjectKeys(obj, path, (currentIdx) => {\n if (currentIdx === indexA) {\n return indexB;\n }\n\n if (currentIdx === indexB) {\n return indexA;\n }\n\n return currentIdx;\n });\n};\n\nexport const moveKeys = (\n obj: Record<string, any>,\n path: string,\n from: number,\n to: number,\n) => {\n return reindexObjectKeys(obj, path, (currentIdx) => {\n if (currentIdx === from) {\n return to;\n }\n\n if (from < to && currentIdx > from && currentIdx <= to) {\n return currentIdx - 1;\n }\n\n if (from > to && currentIdx >= to && currentIdx < from) {\n return currentIdx + 1;\n }\n\n return currentIdx;\n });\n};\n\nexport function reindexFieldArrayMeta(\n state: {\n errors: Record<string, any>;\n touched: Record<string, any>;\n isValidating: Record<string, any>;\n },\n path: string,\n remapIndex: (index: number) => number | null,\n) {\n const nextErrors: Record<string, any> = {};\n const nextTouched: Record<string, any> = {};\n const nextIsValidating: Record<string, any> = {};\n\n const prefix = `${path}.`;\n\n for (const key of Object.keys(state.errors)) {\n const nextKey = remapIndexedPath(key, prefix, remapIndex);\n if (nextKey) nextErrors[nextKey] = state.errors[key];\n }\n\n for (const key of Object.keys(state.touched)) {\n const nextKey = remapIndexedPath(key, prefix, remapIndex);\n if (nextKey) nextTouched[nextKey] = state.touched[key];\n }\n\n for (const key of Object.keys(state.isValidating)) {\n const nextKey = remapIndexedPath(key, prefix, remapIndex);\n if (nextKey) nextIsValidating[nextKey] = state.isValidating[key];\n }\n\n return {\n errors: nextErrors,\n touched: nextTouched,\n isValidating: nextIsValidating,\n };\n}\n\nexport function remapIndexedPath(\n key: string,\n prefix: string,\n remapIndex: (index: number) => number | null,\n): string | null {\n if (!key.startsWith(prefix)) {\n return key;\n }\n\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = Number(parts[0]);\n if (!Number.isInteger(currentIdx) || currentIdx < 0) {\n return key;\n }\n const nextIdx = remapIndex(currentIdx);\n\n if (nextIdx === null) {\n return null;\n }\n\n const rest = parts.slice(1).join(\".\");\n return rest ? `${prefix}${nextIdx}.${rest}` : `${prefix}${nextIdx}`;\n}\n\nfunction reindexObjectKeys(\n obj: Record<string, any>,\n path: string,\n remapIndex: (index: number) => number | null,\n) {\n const nextObject: Record<string, any> = {};\n const prefix = `${path}.`;\n\n for (const key of Object.keys(obj)) {\n if (!key.startsWith(prefix)) {\n nextObject[key] = obj[key];\n continue;\n }\n\n const remaining = key.substring(prefix.length);\n const parts = remaining.split(\".\");\n const currentIdx = Number(parts[0]);\n if (!Number.isInteger(currentIdx) || currentIdx < 0) {\n nextObject[key] = obj[key];\n continue;\n }\n const nextIdx = remapIndex(currentIdx);\n\n if (nextIdx === null) {\n continue;\n }\n\n const rest = parts.slice(1).join(\".\");\n const nextKey = rest\n ? `${prefix}${nextIdx}.${rest}`\n : `${prefix}${nextIdx}`;\n nextObject[nextKey] = obj[key];\n }\n\n return nextObject;\n}\n","export 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)) {\n return false;\n }\n\n const entries = Object.entries(obj as Record<string, unknown>);\n if (entries.length === 0) {\n return false;\n }\n\n return entries.every(\n ([key, v]) =>\n key.length > 0 &&\n (typeof v === \"string\" ||\n (Array.isArray(v) && v.every((i) => typeof i === \"string\")) ||\n (typeof v === \"object\" && v !== null && \"message\" in v &&\n typeof (v as Record<string, unknown>).message === \"string\")),\n );\n}\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"],"mappings":"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","names":["cloneValue","obj","visited","clone","value","key","item","v","prototype","descriptor","desc","deepClone","obj","cloneValue","deepMerge","target","source","activeMerges","sourceObject","base","BLOCKED_KEYS","key","sourceValue","baseValue","valueEqual","a","b","deepEqual","deepEqualInner","visitedPairs","visitedTargets","keysA","keysB","collectDirtyPaths","initial","prefix","result","activePairs","activeInitials","allKeys","k","p","nextActiveInitials","pathCache","BLOCKED_PATH_SEGMENTS","setPathCacheEntry","path","keys","oldestKey","getPathKeys","cached","k","hasBlockedPathSegment","i","key","getDeepValue","obj","current","setDeepValue","value","result","nextKey","nextAsNumber","isNextNumeric","currentValue","setDeepValues","updates","safeUpdates","root","clonedNodes","unsetDeepValues","obj","paths","safePaths","path","keys","getPathKeys","hasBlockedPathSegment","root","clonedNodes","current","i","key","currentValue","leafKey","arrayIndex","cleanPrefixedKeys","obj","prefix","newObj","prefixWithDot","key","reindexFieldArrayMeta","state","path","remapIndex","nextErrors","nextTouched","nextIsValidating","prefix","key","nextKey","remapIndexedPath","parts","currentIdx","nextIdx","rest","isValidationErrorShape","x","obj","entries","key","v","i","extractServerErrors"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-K2JSAJAF.cjs","../src/resolvers/zod.ts"],"names":["zodResolver","schema","_config","values","options","error","errors","ZodError","issue","path","normalizeErrorPath","setFirstError","filterErrorsByScope"],"mappings":"AAAA,qoBAAsD,0BCAlB,IAKvBA,CAAAA,CAAc,CACzBC,CAAAA,CACAC,CAAAA,CAAAA,EAEO,KAAA,CACLC,CAAAA,CACAC,CAAAA,CAAAA,EAC0B,CAC1B,GAAI,CACF,OAAA,MAAMH,CAAAA,CAAO,UAAA,CAAWE,CAAM,CAAA,CACvB,CAAC,CACV,CAAA,KAAA,CAASE,CAAAA,CAAgB,CACvB,IAAMC,CAAAA,CAAuB,CAAC,CAAA,CAE9B,EAAA,CAAID,EAAAA,WAAiBE,aAAAA,CAAU,CAC7B,GAAA,CAAA,IAAWC,EAAAA,GAASH,CAAAA,CAAM,MAAA,CAAQ,CAChC,IAAMI,CAAAA,CAAOC,iCAAAA,CAAmBF,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CACpDG,iCAAAA,CAAcL,CAAQG,CAAAA,CAAMD,CAAAA,CAAM,OAAO,CAC3C,CAEA,OAAOI,iCAAAA,CAAoBN,iBAAQF,CAAAA,2BAAS,aAAW,CACzD,CAEA,MAAMC,CACR,CACF,CAAA,CAAA,cAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-K2JSAJAF.cjs","sourcesContent":[null,"import { ZodError, ZodSchema } from \"zod\";\nimport { BitErrors } from \"../core\";\nimport { filterErrorsByScope, setFirstError, normalizeErrorPath } from \"./utils\";\nimport { BitResolverScopeOptions, BitZodResolverConfig } from \"./types\";\n\nexport const zodResolver = <T extends object>(\n schema: ZodSchema<T>,\n _config?: BitZodResolverConfig,\n) => {\n return async (\n values: T,\n options?: BitResolverScopeOptions,\n ): Promise<BitErrors<T>> => {\n try {\n await schema.parseAsync(values);\n return {};\n } catch (error: unknown) {\n const errors: BitErrors<T> = {};\n\n if (error instanceof ZodError) {\n for (const issue of error.issues) {\n const path = normalizeErrorPath(issue.path.join(\".\"));\n setFirstError(errors, path, issue.message);\n }\n\n return filterErrorsByScope(errors, options?.scopeFields);\n }\n\n throw error;\n }\n };\n};\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function o(e){let i=e.touched?e.error:void 0,r=e.error!==void 0;return{error:i,touched:e.touched,invalid:!!(e.touched&&e.error),isValidating:e.isValidating,isDirty:e.isDirty,isHidden:e.isHidden,isRequired:e.isRequired,hasError:r}}export{o as a};
|
|
2
|
+
//# sourceMappingURL=chunk-L57KMBXS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/utils/field-meta.ts"],"sourcesContent":["import type { BitFieldState } from \"../store/contracts/types\";\n\nexport interface BitDerivedFieldMeta {\n error: string | undefined;\n touched: boolean;\n invalid: boolean;\n isValidating: boolean;\n isDirty: boolean;\n isHidden: boolean;\n isRequired: boolean;\n hasError: boolean;\n}\n\nexport function deriveFieldMeta<T extends object, TValue>(\n state: Readonly<BitFieldState<T, TValue>>,\n): BitDerivedFieldMeta {\n const error = state.touched ? state.error : undefined;\n const hasError = state.error !== undefined;\n\n return {\n error,\n touched: state.touched,\n invalid: !!(state.touched && state.error),\n isValidating: state.isValidating,\n isDirty: state.isDirty,\n isHidden: state.isHidden,\n isRequired: state.isRequired,\n hasError,\n };\n}\n"],"mappings":"AAaO,SAASA,EACdC,EACqB,CACrB,IAAMC,EAAQD,EAAM,QAAUA,EAAM,MAAQ,OACtCE,EAAWF,EAAM,QAAU,OAEjC,MAAO,CACL,MAAAC,EACA,QAASD,EAAM,QACf,QAAS,CAAC,EAAEA,EAAM,SAAWA,EAAM,OACnC,aAAcA,EAAM,aACpB,QAASA,EAAM,QACf,SAAUA,EAAM,SAChB,WAAYA,EAAM,WAClB,SAAAE,CACF,CACF","names":["deriveFieldMeta","state","error","hasError"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as c,c as B}from"./chunk-K5X37E3U.js";import{a as v}from"./chunk-PRMNTQD5.js";function k(e){return{values:e.values,errors:e.errors,touched:e.touched,isValid:e.isValid,isDirty:e.isDirty,isSubmitting:e.isSubmitting,isValidating:e.isValidating,persist:e.persist}}function w(e){let o=e.getHistoryMetadata();return{...k(e.getState()),_meta:{canUndo:o.canUndo,canRedo:o.canRedo,totalSteps:o.historySize,currentIndex:o.historyIndex}}}function m(e){let o={};for(let[t,i]of Object.entries(e))o[t]=w(i);return o}function I(e){if(!e||typeof e!="object")return!1;let o=e;return typeof o.getState=="function"&&typeof o.getHistoryMetadata=="function"}function O(e){if(!I(e))return!1;let o=e;return typeof o.undo=="function"&&typeof o.redo=="function"&&typeof o.reset=="function"}function h(e,o){let t=e[o];return O(t)?t:null}var f=null,x=50;function _(e,o=v){f&&(console.warn("[bit-form] Reiniciando ponte do DevTools (Fast Refresh detectado)."),f());let t=null,i=null,T,n=null,u,a=new Set,b=!1,d=r=>{t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(r))},D=()=>{if(a.size===0)return;let r=m(Array.from(a).reduce((s,l)=>{let p=o.stores[l];return p&&(s[l]=p),s},{}));a.clear(),n=null,Object.keys(r).length>0&&d({type:"STATE_UPDATE",protocolVersion:1,payload:r})},R=()=>{n||(n=setTimeout(()=>{D()},x))},y=()=>{b=!1,t=new WebSocket(e),t.onopen=()=>{console.log("[bit-form] \u{1F50C} Conectado ao CLI DevTools via WebSocket."),d({type:"HELLO",protocolVersion:1,payload:{role:"server",protocolVersion:1}});let r=m(o.stores);Object.keys(r).length>0&&d({type:"STATE_UPDATE",protocolVersion:1,payload:r}),i=o.subscribe((s,l)=>{a.add(s),R()}),T=setInterval(()=>{d({type:"PING",protocolVersion:1})},3e4)},t.onmessage=r=>{try{let s=JSON.parse(r.data);if(B(s)){let{storeId:l,action:p}=s.payload,S=h(o.stores,l);if(!S)return;switch(p){case"undo":S.undo();break;case"redo":S.redo();break;case"reset":S.reset();break}}}catch(s){console.warn("[bit-form] Erro ao processar comando do CLI:",s)}},t.onclose=()=>{i&&i(),clearInterval(T),n&&(clearTimeout(n),n=null),a.clear(),b?console.log("[bit-form] Ponte antiga encerrada com sucesso."):(console.log("[bit-form] Conex\xE3o perdida. Reconectando em 3s..."),u=setTimeout(y,3e3))}};y();let g=()=>{b=!0,u&&(clearTimeout(u),u=void 0),i&&i(),clearInterval(T),n&&(clearTimeout(n),n=null),a.clear(),t&&(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(),f=null};return f=g,g}export{m as a,h as b,_ as c};
|
|
2
|
+
//# sourceMappingURL=chunk-LY67POOF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools/store-snapshot.ts","../src/devtools/store-port.ts","../src/devtools/bridge.ts"],"sourcesContent":["import type { BitBusStorePort, BitState } from \"../core\";\nimport type { DevToolsStoreSnapshot, DevToolsStoreSnapshots } from \"./protocol\";\n\nfunction normalizeStoreState<T extends object>(\n state: Readonly<BitState<T>>,\n): Omit<DevToolsStoreSnapshot, \"_meta\"> {\n return {\n values: state.values,\n errors: state.errors as Record<string, unknown>,\n touched: state.touched as Record<string, unknown>,\n isValid: state.isValid,\n isDirty: state.isDirty,\n isSubmitting: state.isSubmitting,\n isValidating: state.isValidating as Record<string, unknown>,\n persist: state.persist,\n };\n}\n\nexport function createDevToolsStoreSnapshot<T extends object>(store: {\n getState: () => Readonly<BitState<T>>;\n getHistoryMetadata: () => {\n canUndo: boolean;\n canRedo: boolean;\n historySize: number;\n historyIndex: number;\n };\n}): DevToolsStoreSnapshot {\n const historyMeta = store.getHistoryMetadata();\n\n return {\n ...normalizeStoreState(store.getState()),\n _meta: {\n canUndo: historyMeta.canUndo,\n canRedo: historyMeta.canRedo,\n totalSteps: historyMeta.historySize,\n currentIndex: historyMeta.historyIndex,\n },\n };\n}\n\nexport function createDevToolsSnapshotMap(\n stores: Record<string, BitBusStorePort<object>>,\n): DevToolsStoreSnapshots {\n const snapshots: DevToolsStoreSnapshots = {};\n\n for (const [storeId, instance] of Object.entries(stores)) {\n snapshots[storeId] = createDevToolsStoreSnapshot(instance);\n }\n\n return snapshots;\n}\n","import type { BitBusStorePort } from \"../core\";\n\nexport type BitDevToolsReadableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport type BitDevToolsActionableStore<T extends object = object> =\n BitBusStorePort<T>;\n\nexport function isDevToolsReadableStore(\n value: unknown,\n): value is BitDevToolsReadableStore<object> {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.getState === \"function\" &&\n typeof candidate.getHistoryMetadata === \"function\"\n );\n}\n\nexport function isDevToolsActionableStore(\n value: unknown,\n): value is BitDevToolsActionableStore<object> {\n if (!isDevToolsReadableStore(value)) {\n return false;\n }\n\n const candidate = value as unknown as Record<string, unknown>;\n\n return (\n typeof candidate.undo === \"function\" &&\n typeof candidate.redo === \"function\" &&\n typeof candidate.reset === \"function\"\n );\n}\n\nexport function getDevToolsActionableStore(\n stores: Record<string, unknown>,\n storeId: string,\n): BitDevToolsActionableStore<object> | null {\n const candidate = stores[storeId];\n return isDevToolsActionableStore(candidate) ? candidate : null;\n}\n","import { bitBus } from \"../core\";\nimport type { BitBus } from \"../core\";\nimport type { BitBusStorePort } from \"../core\";\nimport { DEVTOOLS_PROTOCOL_VERSION, isDevToolsActionMessage } from \"./protocol\";\nimport { createDevToolsSnapshotMap } from \"./store-snapshot\";\nimport { getDevToolsActionableStore } from \"./store-port\";\n\nlet activeBridgeCleanup: (() => void) | null = null;\nconst STATE_BATCH_INTERVAL_MS = 50;\n\nexport function setupRemoteBridge(url: string, bus: BitBus = bitBus) {\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 batchFlushTimeout: ReturnType<typeof setTimeout> | null = null;\n let reconnectTimer: ReturnType<typeof setTimeout> | undefined;\n const pendingStoreIds = new Set<string>();\n let isIntentionalDisconnect = false;\n\n const sendWhenOpen = (message: Record<string, unknown>) => {\n if (socket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n socket.send(JSON.stringify(message));\n };\n\n const flushPendingStoreUpdates = () => {\n if (pendingStoreIds.size === 0) {\n return;\n }\n\n const payload = createDevToolsSnapshotMap(\n Array.from(pendingStoreIds).reduce<\n Record<string, BitBusStorePort<object>>\n >((acc, storeId) => {\n const storeInstance = bus.stores[storeId];\n if (storeInstance) {\n acc[storeId] = storeInstance;\n }\n return acc;\n }, {}),\n );\n\n pendingStoreIds.clear();\n batchFlushTimeout = null;\n\n if (Object.keys(payload).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload,\n });\n }\n };\n\n const scheduleStoreFlush = () => {\n if (batchFlushTimeout) {\n return;\n }\n\n batchFlushTimeout = setTimeout(() => {\n flushPendingStoreUpdates();\n }, STATE_BATCH_INTERVAL_MS);\n };\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 sendWhenOpen({\n type: \"HELLO\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: { role: \"server\", protocolVersion: DEVTOOLS_PROTOCOL_VERSION },\n });\n\n const initialState = createDevToolsSnapshotMap(bus.stores);\n if (Object.keys(initialState).length > 0) {\n sendWhenOpen({\n type: \"STATE_UPDATE\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n payload: initialState,\n });\n }\n\n unsubscribeBus = bus.subscribe((storeId, _newState) => {\n pendingStoreIds.add(storeId);\n scheduleStoreFlush();\n });\n\n heartbeatInterval = setInterval(() => {\n sendWhenOpen({\n type: \"PING\",\n protocolVersion: DEVTOOLS_PROTOCOL_VERSION,\n });\n }, 30000);\n };\n\n socket.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as unknown;\n\n if (isDevToolsActionMessage(message)) {\n const { storeId, action } = message.payload;\n const store = getDevToolsActionableStore(bus.stores, storeId);\n\n if (!store) {\n return;\n }\n\n switch (action) {\n case \"undo\":\n store.undo();\n break;\n case \"redo\":\n store.redo();\n break;\n case \"reset\":\n store.reset();\n break;\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 if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\n\n if (!isIntentionalDisconnect) {\n console.log(\"[bit-form] Conexão perdida. Reconectando em 3s...\");\n reconnectTimer = 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 if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = undefined;\n }\n\n if (unsubscribeBus) unsubscribeBus();\n clearInterval(heartbeatInterval);\n if (batchFlushTimeout) {\n clearTimeout(batchFlushTimeout);\n batchFlushTimeout = null;\n }\n pendingStoreIds.clear();\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":"uFAGA,SAASA,EACPC,EACsC,CACtC,MAAO,CACL,OAAQA,EAAM,OACd,OAAQA,EAAM,OACd,QAASA,EAAM,QACf,QAASA,EAAM,QACf,QAASA,EAAM,QACf,aAAcA,EAAM,aACpB,aAAcA,EAAM,aACpB,QAASA,EAAM,OACjB,CACF,CAEO,SAASC,EAA8CC,EAQpC,CACxB,IAAMC,EAAcD,EAAM,mBAAmB,EAE7C,MAAO,CACL,GAAGH,EAAoBG,EAAM,SAAS,CAAC,EACvC,MAAO,CACL,QAASC,EAAY,QACrB,QAASA,EAAY,QACrB,WAAYA,EAAY,YACxB,aAAcA,EAAY,YAC5B,CACF,CACF,CAEO,SAASC,EACdC,EACwB,CACxB,IAAMC,EAAoC,CAAC,EAE3C,OAAW,CAACC,EAASC,CAAQ,IAAK,OAAO,QAAQH,CAAM,EACrDC,EAAUC,CAAO,EAAIN,EAA4BO,CAAQ,EAG3D,OAAOF,CACT,CC1CO,SAASG,EACdC,EAC2C,CAC3C,GAAI,CAACA,GAAS,OAAOA,GAAU,SAC7B,MAAO,GAGT,IAAMC,EAAYD,EAElB,OACE,OAAOC,EAAU,UAAa,YAC9B,OAAOA,EAAU,oBAAuB,UAE5C,CAEO,SAASC,EACdF,EAC6C,CAC7C,GAAI,CAACD,EAAwBC,CAAK,EAChC,MAAO,GAGT,IAAMC,EAAYD,EAElB,OACE,OAAOC,EAAU,MAAS,YAC1B,OAAOA,EAAU,MAAS,YAC1B,OAAOA,EAAU,OAAU,UAE/B,CAEO,SAASE,EACdC,EACAC,EAC2C,CAC3C,IAAMJ,EAAYG,EAAOC,CAAO,EAChC,OAAOH,EAA0BD,CAAS,EAAIA,EAAY,IAC5D,CCtCA,IAAIK,EAA2C,KACzCC,EAA0B,GAEzB,SAASC,EAAkBC,EAAaC,EAAcC,EAAQ,CAC/DL,IACF,QAAQ,KACN,oEACF,EACAA,EAAoB,GAGtB,IAAIM,EAA2B,KAC3BC,EAAsC,KACtCC,EACAC,EAA0D,KAC1DC,EACEC,EAAkB,IAAI,IACxBC,EAA0B,GAExBC,EAAgBC,GAAqC,CACrDR,GAAQ,aAAe,UAAU,MAIrCA,EAAO,KAAK,KAAK,UAAUQ,CAAO,CAAC,CACrC,EAEMC,EAA2B,IAAM,CACrC,GAAIJ,EAAgB,OAAS,EAC3B,OAGF,IAAMK,EAAUC,EACd,MAAM,KAAKN,CAAe,EAAE,OAE1B,CAACO,EAAKC,IAAY,CAClB,IAAMC,EAAgBhB,EAAI,OAAOe,CAAO,EACxC,OAAIC,IACFF,EAAIC,CAAO,EAAIC,GAEVF,CACT,EAAG,CAAC,CAAC,CACP,EAEAP,EAAgB,MAAM,EACtBF,EAAoB,KAEhB,OAAO,KAAKO,CAAO,EAAE,OAAS,GAChCH,EAAa,CACX,KAAM,eACN,gBAAiB,EACjB,QAAAG,CACF,CAAC,CAEL,EAEMK,EAAqB,IAAM,CAC3BZ,IAIJA,EAAoB,WAAW,IAAM,CACnCM,EAAyB,CAC3B,EAAGd,CAAuB,EAC5B,EAEMqB,EAAU,IAAM,CACpBV,EAA0B,GAC1BN,EAAS,IAAI,UAAUH,CAAG,EAE1BG,EAAO,OAAS,IAAM,CACpB,QAAQ,IAAI,+DAAwD,EAEpEO,EAAa,CACX,KAAM,QACN,gBAAiB,EACjB,QAAS,CAAE,KAAM,SAAU,gBAAiB,CAA0B,CACxE,CAAC,EAED,IAAMU,EAAeN,EAA0Bb,EAAI,MAAM,EACrD,OAAO,KAAKmB,CAAY,EAAE,OAAS,GACrCV,EAAa,CACX,KAAM,eACN,gBAAiB,EACjB,QAASU,CACX,CAAC,EAGHhB,EAAiBH,EAAI,UAAU,CAACe,EAASK,IAAc,CACrDb,EAAgB,IAAIQ,CAAO,EAC3BE,EAAmB,CACrB,CAAC,EAEDb,EAAoB,YAAY,IAAM,CACpCK,EAAa,CACX,KAAM,OACN,gBAAiB,CACnB,CAAC,CACH,EAAG,GAAK,CACV,EAEAP,EAAO,UAAamB,GAAU,CAC5B,GAAI,CACF,IAAMX,EAAU,KAAK,MAAMW,EAAM,IAAI,EAErC,GAAIC,EAAwBZ,CAAO,EAAG,CACpC,GAAM,CAAE,QAAAK,EAAS,OAAAQ,CAAO,EAAIb,EAAQ,QAC9Bc,EAAQC,EAA2BzB,EAAI,OAAQe,CAAO,EAE5D,GAAI,CAACS,EACH,OAGF,OAAQD,EAAQ,CACd,IAAK,OACHC,EAAM,KAAK,EACX,MACF,IAAK,OACHA,EAAM,KAAK,EACX,MACF,IAAK,QACHA,EAAM,MAAM,EACZ,KACJ,CACF,CACF,OAASE,EAAG,CACV,QAAQ,KAAK,+CAAgDA,CAAC,CAChE,CACF,EAEAxB,EAAO,QAAU,IAAM,CACjBC,GAAgBA,EAAe,EACnC,cAAcC,CAAiB,EAC3BC,IACF,aAAaA,CAAiB,EAC9BA,EAAoB,MAEtBE,EAAgB,MAAM,EAEjBC,EAIH,QAAQ,IAAI,gDAAgD,GAH5D,QAAQ,IAAI,sDAAmD,EAC/DF,EAAiB,WAAWY,EAAS,GAAI,EAI7C,CACF,EAEAA,EAAQ,EAER,IAAMS,EAAU,IAAM,CACpBnB,EAA0B,GACtBF,IACF,aAAaA,CAAc,EAC3BA,EAAiB,QAGfH,GAAgBA,EAAe,EACnC,cAAcC,CAAiB,EAC3BC,IACF,aAAaA,CAAiB,EAC9BA,EAAoB,MAEtBE,EAAgB,MAAM,EAEpBL,IACCA,EAAO,aAAe,UAAU,MAC/BA,EAAO,aAAe,UAAU,aAElCA,EAAO,MAAM,EAEfN,EAAsB,IACxB,EAEA,OAAAA,EAAsB+B,EAEfA,CACT","names":["normalizeStoreState","state","createDevToolsStoreSnapshot","store","historyMeta","createDevToolsSnapshotMap","stores","snapshots","storeId","instance","isDevToolsReadableStore","value","candidate","isDevToolsActionableStore","getDevToolsActionableStore","stores","storeId","activeBridgeCleanup","STATE_BATCH_INTERVAL_MS","setupRemoteBridge","url","bus","bitBus","socket","unsubscribeBus","heartbeatInterval","batchFlushTimeout","reconnectTimer","pendingStoreIds","isIntentionalDisconnect","sendWhenOpen","message","flushPendingStoreUpdates","payload","createDevToolsSnapshotMap","acc","storeId","storeInstance","scheduleStoreFlush","connect","initialState","_newState","event","isDevToolsActionMessage","action","store","getDevToolsActionableStore","e","cleanup"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var X={"#":/\d/,A:/[a-zA-Z]/,X:/[a-zA-Z0-9]/,H:/[0-9a-fA-F]/,U:/[A-Z]/,L:/[a-z]/,"*":/./},C=(r,n)=>{if(r==null||r==="")return"";let t=String(r),c=t.startsWith("-"),o=n?n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):"",p=new RegExp(`[^a-zA-Z0-9${o}]`,"g"),m=t.replace(p,"");return c&&m&&!m.startsWith("-")?`-${m}`:m},te=(r,n=2)=>{if(typeof r=="number")return r;if(!r)return 0;let t=String(r),c=t.includes("-"),o=t.replace(/\D/g,"");if(!o)return 0;let p=parseInt(o,10)/Math.pow(10,n);return c?-p:p},i=(r,n)=>{let t=s=>s.split("").filter(e=>X[e]).length,c=Array.isArray(r)?r:[r];if(c.length===0)return{format:s=>s==null||s===""?"":String(s),parse:s=>String(s??"")};let o=[...c].sort((s,e)=>t(s)-t(e)),p=s=>{let e=o[o.length-1];for(let l of o)if(s<=t(l)){e=l;break}return e},m=s=>{let e=C(s,n?.allowChars);if(!e&&!n?.guide)return"";let l=p(e.length),a=n?.guide||!1,d=n?.placeholderChar||"_",k="",f=0;for(let h=0;h<l.length;h++){let g=l[h],x=X[g];if(f<e.length){let H=e[f];if(x)if(g==="U"&&(H=H.toUpperCase()),g==="L"&&(H=H.toLowerCase()),x.test(H))k+=H,f++;else if(a)k+=d;else break;else k+=g,H===g&&f++}else if(a)k+=x?d:g;else break}return k};return{format:m,parse:s=>{if(n?.customParse)return n.customParse(s);let e=m(s);if(n?.saveRaw){if(n?.guide){let a=(n.placeholderChar||"_").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(a,"g");return e.replace(d,"")}return e}return C(e,n?.allowChars)}}},u=({prefix:r="",suffix:n="",thousand:t,decimal:c,precision:o=2,allowNegative:p=!0,saveRaw:m=!1})=>{let s=e=>{if(e==null||e==="")return"";let l=String(e);l.length>200&&(l=l.slice(0,200));let a=typeof e=="number"?Math.abs(e).toFixed(o).replace(/\D/g,""):l.replace(/\D/g,"");if(!a&&String(e).includes("-")&&p)return"-";if(!a)return"";let d=20;a.length>d&&(a=a.slice(0,d)),a=a.padStart(o+1,"0");let k=o>0?a.slice(0,-o).replace(/^0+(?=\d)/,"")||"0":a.replace(/^0+(?=\d)/,"")||"0",f=o>0?a.slice(-o):"",h=k.replace(/\B(?=(\d{3})+(?!\d))/g,t),x=(typeof e=="number"?e<0:String(e).includes("-"))&&p?"-":"";return o===0?`${x}${r}${h}${n}`:`${x}${r}${h}${c}${f}${n}`};return{format:s,parse:e=>{let l=te(e,o),a=p?l:Math.abs(l);return m?s(a):a}}},$=r=>{let n=t=>/^3[47]/.test(t)?"#### ###### #####":/^3(?:0[0-5]|[68])/.test(t)?"#### ###### ####":"#### #### #### ####";return{format:t=>{let c=C(t,r?.allowChars),o=n(c);return i(o,r).format(t)},parse:t=>{let c=C(t,r?.allowChars),o=n(c);return i(o,r).parse(t)}}},M=r=>{let t=(r?.format||"DD/MM/YYYY")==="YYYY-MM-DD",c=i(t?"####-##-##":"##/##/####",r);return{format:o=>{let p=C(o);if(!p)return"";let m,s,e;if(t?(e=p.substring(0,4),s=p.substring(4,6),m=p.substring(6,8)):(m=p.substring(0,2),s=p.substring(2,4),e=p.substring(4,8)),m.length===2){let a=parseInt(m,10);if(a>31&&(a=31),a===0&&(a=1),s.length===2){let d=parseInt(s,10),k=e.length===4?parseInt(e,10):e.length>0?parseInt(e.padEnd(4,"0"),10):0,g={1:31,2:k>0&&(k%4===0&&k%100!==0||k%400===0)?29:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}[d]??31;a>g&&(a=g)}m=String(a).padStart(2,"0")}if(s.length===2){let a=parseInt(s,10);a>12&&(s="12"),a===0&&(s="01")}let l=t?`${e}${s}${m}`:`${m}${s}${e}`;return c.format(l)},parse:o=>c.parse(o)}};var S=u({prefix:"R$ ",thousand:".",decimal:",",precision:2}),y=u({prefix:"$",thousand:",",decimal:".",precision:2}),D=u({suffix:" \u20AC",thousand:".",decimal:",",precision:2}),b=u({prefix:"\xA3",thousand:",",decimal:".",precision:2}),I=u({prefix:"\xA5",thousand:",",decimal:".",precision:0}),Y=u({suffix:"%",thousand:".",decimal:",",precision:1}),B=u({thousand:".",decimal:",",precision:2}),P=u({thousand:".",decimal:",",precision:0}),R=i("###.###.###-##"),A=i("##.###.###/####-##"),U=i(["(##) ####-####","(##) #####-####"]),N=i("(##) ####-####"),V=i("#####-###"),w=M({format:"DD/MM/YYYY",guide:!0,customParse:r=>{let n=r.replace(/_/g,""),t=n.split("/");return t.length===3&&t[2].length===4?`${t[2]}-${t[1]}-${t[0]}`:n.replace(/\D/g,"")}}),L=i("##:##"),E=i("###########"),Z=i(["##.###.###","##.###.###-X"]),z=i(["###.###.###-##","##.###.###/####-##"]),F={format(r){let n=String(r??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7);if(n.length===0)return"";let t=n.slice(0,3),c=n.slice(3);return c.length===0?t:c.length>=2&&/[A-Z]/.test(c[1])?`${t}${c}`:`${t}-${c}`},parse(r){return String(r??"").replace(/[^a-zA-Z0-9]/g,"").toUpperCase().slice(0,7)}},O=i("(###) ###-####"),T=i("#####-####"),G=i("##/##/####"),J=i("###-##-####"),_=$(),j=i("####"),W=M({format:"YYYY-MM-DD",saveRaw:!0,guide:!0}),q=i("HH:HH:HH:HH:HH:HH"),K=i("#HHHHHH"),Q=i("###.###.###.###"),v=i("HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH"),ee=i("UU## XXXX XXXX XXXX XXXX XXXX XXXX XXXX XX",{allowChars:" "});var ae={brl:S,usd:y,eur:D,gbp:b,jpy:I,percent:Y,decimal:B,int:P,integer:P,cpf:R,cnpj:A,cpfCnpj:z,rg:Z,cep:V,cnh:E,plate:F,phone:U,landline:N,date:w,time:L,usPhone:O,zipCode:T,dateUS:G,ssn:J,cc:_,cvv:j,dateISO:W,ip:Q,ipv6:v,mac:q,color:K,iban:ee};export{C as a,te as b,i as c,u as d,$ as e,M as f,S as g,y as h,D as i,b as j,I as k,Y as l,B as m,P as n,R as o,A as p,U as q,N as r,V as s,w as t,L as u,E as v,Z as w,z as x,F as y,O as z,T as A,G as B,J as C,_ as D,j as E,W as F,q as G,K as H,Q as I,v as J,ee as K,ae as L};
|
|
2
|
+
//# sourceMappingURL=chunk-MBEQLBJB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/mask/creators.ts","../src/core/mask/presets.ts","../src/core/mask/built-ins.ts"],"sourcesContent":["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 const patterns = Array.isArray(pattern) ? pattern : [pattern];\n\n if (patterns.length === 0) {\n return {\n format: (value: unknown) =>\n value === undefined || value === null || value === \"\"\n ? \"\"\n : String(value),\n parse: (value: unknown) => String(value ?? \"\"),\n };\n }\n\n const sortedPatterns = [...patterns].sort(\n (a, b) => getRawLength(a) - getRawLength(b),\n );\n\n const getActivePattern = (rawValueLength: number) => {\n let activePattern = sortedPatterns[sortedPatterns.length - 1];\n for (const candidate of sortedPatterns) {\n if (rawValueLength <= getRawLength(candidate)) {\n activePattern = candidate;\n break;\n }\n }\n return activePattern;\n };\n\n const formatValue = (value: string | number | null | undefined): string => {\n const stringVal = unmask(value, options?.allowChars);\n\n if (!stringVal && !options?.guide) {\n return \"\";\n }\n\n const activePattern = getActivePattern(stringVal.length);\n const showGuide = options?.guide || false;\n const placeholder = options?.placeholderChar || \"_\";\n\n let masked = \"\";\n let valueIndex = 0;\n\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 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 if (showGuide) {\n masked += placeholder;\n } else {\n break;\n }\n } else {\n masked += patternChar;\n if (dataChar === patternChar) valueIndex++;\n }\n } else if (showGuide) {\n masked += token ? placeholder : patternChar;\n } else {\n break;\n }\n }\n\n return masked;\n };\n\n return {\n format: formatValue,\n parse: (value: string) => {\n if (options?.customParse) return options.customParse(value);\n\n const formatted = formatValue(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 rawString = String(value);\n // Truncate input BEFORE stripping non-digits to avoid ReDoS on huge strings\n if (rawString.length > 200) {\n rawString = rawString.slice(0, 200);\n }\n let stringValue =\n typeof value === \"number\"\n ? Math.abs(value).toFixed(precision).replace(/\\D/g, \"\")\n : rawString.replace(/\\D/g, \"\");\n\n if (!stringValue && String(value).includes(\"-\") && allowNegative)\n return \"-\";\n if (!stringValue) return \"\";\n\n // Truncate to prevent ReDoS on pathological input\n const MAX_CURRENCY_DIGITS = 20;\n if (stringValue.length > MAX_CURRENCY_DIGITS) {\n stringValue = stringValue.slice(0, MAX_CURRENCY_DIGITS);\n }\n\n stringValue = stringValue.padStart(precision + 1, \"0\");\n\n const integerPart =\n precision > 0\n ? stringValue.slice(0, -precision).replace(/^0+(?=\\d)/, \"\") || \"0\"\n : stringValue.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const decimalPart = precision > 0 ? 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 if (precision === 0) {\n return `${sign}${prefix}${formattedInteger}${suffix}`;\n }\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: string;\n let month: string;\n let year: string;\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) com limites por mês e ano bissexto\n if (day.length === 2) {\n let d = parseInt(day, 10);\n if (d > 31) d = 31;\n if (d === 0) d = 1;\n\n if (month.length === 2) {\n const m = parseInt(month, 10);\n const y =\n year.length === 4\n ? parseInt(year, 10)\n : year.length > 0\n ? parseInt(year.padEnd(4, \"0\"), 10)\n : 0;\n const isLeapYear =\n y > 0 && ((y % 4 === 0 && y % 100 !== 0) || y % 400 === 0);\n const daysInMonth: Record<number, number> = {\n 1: 31, 2: isLeapYear ? 29 : 28, 3: 31, 4: 30, 5: 31, 6: 30,\n 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31,\n };\n const maxDay = daysInMonth[m] ?? 31;\n if (d > maxDay) d = maxDay;\n }\n\n day = String(d).padStart(2, \"0\");\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 type { BitMask } from \"./types\";\nimport {\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 ou 00.000.000-X) - Suporta o 'X' como dígito verificador e RG sem dígito */\nexport const maskRG = createPatternMask([\"##.###.###\", \"##.###.###-X\"]);\n\n/**\n * CPF + CNPJ combinado — alterna automaticamente pelo número de dígitos:\n * - Até 11 dígitos → CPF (000.000.000-00)\n * - Mais de 11 → CNPJ (00.000.000/0000-00)\n */\nexport const maskCPFCNPJ = createPatternMask([\n \"###.###.###-##\",\n \"##.###.###/####-##\",\n]);\n\n/**\n * Placa de veículo BR — detecta o formato pelo 5.º caractere:\n * - Antigo → ABC-1234 (posição 5 é dígito)\n * - Mercosul → ABC1D23 (posição 5 é letra)\n */\nexport const maskPlate: BitMask = {\n format(value: any): string {\n const raw = String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n\n if (raw.length === 0) return \"\";\n\n const prefix = raw.slice(0, 3);\n const rest = raw.slice(3);\n\n if (rest.length === 0) return prefix;\n\n // Posição 5 (rest[1]): letra → Mercosul; dígito → formato antigo\n const isMercosul = rest.length >= 2 && /[A-Z]/.test(rest[1]);\n\n return isMercosul ? `${prefix}${rest}` : `${prefix}-${rest}`;\n },\n parse(value: string): string {\n return String(value ?? \"\")\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .toUpperCase()\n .slice(0, 7);\n },\n};\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","import * as presets from \"./presets\";\nimport type { BitBuiltInMaskName, BitMask } from \"./types\";\n\nexport const bitMasks: Record<BitBuiltInMaskName, BitMask> = {\n brl: presets.maskBRL,\n usd: presets.maskUSD,\n eur: presets.maskEUR,\n gbp: presets.maskGBP,\n jpy: presets.maskJPY,\n percent: presets.maskPercent,\n decimal: presets.maskDecimal,\n int: presets.maskInteger,\n integer: presets.maskInteger,\n cpf: presets.maskCPF,\n cnpj: presets.maskCNPJ,\n cpfCnpj: presets.maskCPFCNPJ,\n rg: presets.maskRG,\n cep: presets.maskCEP,\n cnh: presets.maskCNH,\n plate: presets.maskPlate,\n phone: presets.maskPhone,\n landline: presets.maskLandline,\n date: presets.maskDate,\n time: presets.maskTime,\n usPhone: presets.maskUSPhone,\n zipCode: presets.maskZipCode,\n dateUS: presets.maskDateUS,\n ssn: presets.maskSSN,\n cc: presets.maskCreditCard,\n cvv: presets.maskCVV,\n dateISO: presets.maskDateISO,\n ip: presets.maskIPv4,\n ipv6: presets.maskIPv6,\n mac: presets.maskMacAddress,\n color: presets.maskColorHex,\n iban: presets.maskIBAN,\n};\n"],"mappings":"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","names":["tokens","unmask","value","allowChars","stringValue","isNegative","escapedChars","regex","clean","unmaskCurrency","precision","digits","numberValue","createPatternMask","pattern","options","getRawLength","p","c","patterns","sortedPatterns","a","b","getActivePattern","rawValueLength","activePattern","candidate","formatValue","stringVal","showGuide","placeholder","masked","valueIndex","i","patternChar","token","dataChar","formatted","escapedPlaceholder","placeholderRegex","createCurrencyMask","prefix","suffix","thousand","decimal","allowNegative","saveRaw","formatFn","rawString","MAX_CURRENCY_DIGITS","integerPart","decimalPart","formattedInteger","sign","numericValue","finalNumber","createCreditCardMask","getCardPattern","rawValue","createDateMask","config","isISO","baseMask","day","month","year","d","m","y","maxDay","safeString","maskBRL","createCurrencyMask","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","createPatternMask","maskCNPJ","maskPhone","maskLandline","maskCEP","maskDate","createDateMask","val","cleanVal","parts","maskTime","maskCNH","maskRG","maskCPFCNPJ","maskPlate","value","raw","prefix","rest","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","createCreditCardMask","maskCVV","maskDateISO","maskMacAddress","maskColorHex","maskIPv4","maskIPv6","maskIBAN","bitMasks","maskBRL","maskUSD","maskEUR","maskGBP","maskJPY","maskPercent","maskDecimal","maskInteger","maskCPF","maskCNPJ","maskCPFCNPJ","maskRG","maskCEP","maskCNH","maskPlate","maskPhone","maskLandline","maskDate","maskTime","maskUSPhone","maskZipCode","maskDateUS","maskSSN","maskCreditCard","maskCVV","maskDateISO","maskIPv4","maskIPv6","maskMacAddress","maskColorHex","maskIBAN"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/builds/kenji.ccp-group/bit-form/dist/chunk-MFSDDSVG.cjs"],"names":[],"mappings":"AAAA","file":"/builds/kenji.ccp-group/bit-form/dist/chunk-MFSDDSVG.cjs"}
|