@rpcbase/form 0.68.0 → 0.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -191,3 +191,4 @@ export {
191
191
  useFormNavigationGuard,
192
192
  a as zodResolver
193
193
  };
194
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/navigationGuard.ts","../src/useFormNavigationGuard.ts","../src/useForm.ts","../../../node_modules/@hookform/resolvers/dist/resolvers.mjs","../../../node_modules/@hookform/resolvers/zod/dist/zod.mjs"],"sourcesContent":["import type { BlockerFunction } from \"@rpcbase/router\"\nimport env from \"@rpcbase/env\"\n\n\nconst isFormNavigationGuardDisabledByEnv = (): boolean => {\n const raw = env.RB_PUBLIC_DISABLE_FORM_GUARD\n\n if (raw === true) return true\n if (raw === false || raw === undefined) return false\n if (typeof raw !== \"string\") return false\n\n const val = raw.trim().toLowerCase()\n return val === \"1\" || val === \"true\" || val === \"yes\" || val === \"on\"\n}\n\n\nexport type FormNavigationGuardOptions =\n | false\n | {\n enabled?: boolean\n message?: string\n blockOnSearch?: boolean\n priority?: number\n }\n\nexport type NormalizedFormNavigationGuardOptions = {\n enabled: boolean\n message?: string\n blockOnSearch: boolean\n priority?: number\n}\n\nexport const normalizeFormNavigationGuardOptions = (\n input: FormNavigationGuardOptions | undefined,\n): NormalizedFormNavigationGuardOptions => {\n if (isFormNavigationGuardDisabledByEnv()) {\n return { enabled: false, blockOnSearch: false }\n }\n\n if (input === false) {\n return { enabled: false, blockOnSearch: false }\n }\n\n return {\n enabled: input?.enabled ?? true,\n message: input?.message,\n blockOnSearch: input?.blockOnSearch ?? false,\n priority: input?.priority,\n }\n}\n\nexport const shouldBlockFormNavigation = ({\n args,\n shouldBlockUnload,\n blockOnSearch,\n}: {\n args: Parameters<BlockerFunction>[0]\n shouldBlockUnload: boolean\n blockOnSearch: boolean\n}): boolean => {\n if (!shouldBlockUnload) return false\n if (args.currentLocation.pathname !== args.nextLocation.pathname) return true\n if (blockOnSearch && args.currentLocation.search !== args.nextLocation.search) return true\n return false\n}\n","import { useCallback, useId, useMemo } from \"react\"\nimport type { FieldValues, UseFormReturn } from \"react-hook-form\"\nimport { useFormState } from \"react-hook-form\"\nimport { useRegisterNavigationGuard } from \"@rpcbase/router\"\n\nimport {\n normalizeFormNavigationGuardOptions,\n shouldBlockFormNavigation,\n type FormNavigationGuardOptions,\n} from \"./navigationGuard\"\n\n\nexport const DEFAULT_FORM_NAVIGATION_GUARD_MESSAGE =\n \"You have unsaved changes. Leave without saving?\"\n\nexport const useFormNavigationGuard = <\n TFieldValues extends FieldValues,\n TContext = any,\n TTransformedValues = TFieldValues,\n>(\n form: UseFormReturn<TFieldValues, TContext, TTransformedValues>,\n opts?: FormNavigationGuardOptions,\n): void => {\n const { isDirty, isSubmitting } = useFormState({ control: form.control })\n\n const normalized = normalizeFormNavigationGuardOptions(opts)\n\n const reactId = useId()\n const id = useMemo(() => `rpcbase:form:${reactId}`, [reactId])\n\n const shouldBlockUnload = normalized.enabled && isDirty && !isSubmitting\n\n const shouldBlockNavigation = useCallback(\n (args: Parameters<typeof shouldBlockFormNavigation>[0][\"args\"]) =>\n shouldBlockFormNavigation({\n args,\n shouldBlockUnload,\n blockOnSearch: normalized.blockOnSearch,\n }),\n [normalized.blockOnSearch, shouldBlockUnload],\n )\n\n useRegisterNavigationGuard({\n id,\n enabled: normalized.enabled,\n priority: normalized.priority,\n message: normalized.message ?? DEFAULT_FORM_NAVIGATION_GUARD_MESSAGE,\n blockOnSearch: normalized.blockOnSearch,\n shouldBlockNavigation,\n shouldBlockUnload,\n })\n}\n","import { useForm as rhfUseForm } from \"react-hook-form\"\nimport type { FieldValues, UseFormProps, UseFormReturn } from \"react-hook-form\"\n\nimport { useFormNavigationGuard } from \"./useFormNavigationGuard\"\nimport {\n normalizeFormNavigationGuardOptions,\n type FormNavigationGuardOptions,\n} from \"./navigationGuard\"\n\n\nexport type UseFormPropsWithNavigationGuard<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues = TFieldValues,\n> = UseFormProps<TFieldValues, TContext, TTransformedValues> & {\n navigationGuard?: FormNavigationGuardOptions\n}\n\nexport const useForm = <\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues = TFieldValues,\n>(\n props?: UseFormPropsWithNavigationGuard<TFieldValues, TContext, TTransformedValues>,\n): UseFormReturn<TFieldValues, TContext, TTransformedValues> => {\n const { navigationGuard, ...rhfProps } = props ?? {}\n\n const form = rhfUseForm<TFieldValues, TContext, TTransformedValues>(\n rhfProps as UseFormProps<TFieldValues, TContext, TTransformedValues>,\n )\n\n const normalized = normalizeFormNavigationGuardOptions(navigationGuard)\n useFormNavigationGuard(form, normalized.enabled ? navigationGuard : { enabled: false })\n\n return form\n}\n","import{get as e,set as t}from\"react-hook-form\";const r=(t,r,o)=>{if(t&&\"reportValidity\"in t){const s=e(o,r);t.setCustomValidity(s&&s.message||\"\"),t.reportValidity()}},o=(e,t)=>{for(const o in t.fields){const s=t.fields[o];s&&s.ref&&\"reportValidity\"in s.ref?r(s.ref,o,e):s&&s.refs&&s.refs.forEach(t=>r(t,o,e))}},s=(r,s)=>{s.shouldUseNativeValidation&&o(r,s);const n={};for(const o in r){const f=e(s.fields,o),c=Object.assign(r[o]||{},{ref:f&&f.ref});if(i(s.names||Object.keys(r),o)){const r=Object.assign({},e(n,o));t(r,\"root\",c),t(n,o,r)}else t(n,o,c)}return n},i=(e,t)=>{const r=n(t);return e.some(e=>n(e).match(`^${r}\\\\.\\\\d+`))};function n(e){return e.replace(/\\]|\\[/g,\"\")}export{s as toNestErrors,o as validateFieldsNatively};\n//# sourceMappingURL=resolvers.mjs.map\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";import*as n from\"zod/v4/core\";function t(r,e){try{var o=r()}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"invalid_union\"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"invalid_union\"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return\"_def\"in r&&\"object\"==typeof r._def&&\"typeName\"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o[\"sync\"===u.mode?\"parse\":\"parseAsync\"](n,a)).then(function(e){return c.shouldUseNativeValidation&&r({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return{values:{},errors:e(s(r.errors,!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return\"_zod\"in r&&\"object\"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve((\"sync\"===u.mode?n.parse:n.parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&r({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof n.$ZodError}(r))return{values:{},errors:e(i(r.issues,!f.shouldUseNativeValidation&&\"all\"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error(\"Invalid input: not a Zod schema\")}export{a as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n"],"names":["rhfUseForm","t","r","o","s","e","n","i","a"],"mappings":"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","x_google_ignoreList":[3,4]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/form",
3
- "version": "0.68.0",
3
+ "version": "0.69.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"