@10x-media/form-builder 0.1.0-beta.2 → 0.1.0-beta.21

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.
Files changed (619) hide show
  1. package/CHANGELOG.md +360 -0
  2. package/README.md +7 -5
  3. package/dist/actions/assertNoBlockCollision.js +18 -0
  4. package/dist/actions/assertNoBlockCollision.js.map +1 -0
  5. package/dist/actions/body/converters.d.ts +20 -0
  6. package/dist/actions/body/converters.js +57 -0
  7. package/dist/actions/body/converters.js.map +1 -0
  8. package/dist/actions/body/escapeHtml.d.ts +6 -0
  9. package/dist/actions/body/escapeHtml.js +14 -0
  10. package/dist/actions/body/escapeHtml.js.map +1 -0
  11. package/dist/actions/body/serializeBody.d.ts +55 -0
  12. package/dist/actions/body/serializeBody.js +78 -0
  13. package/dist/actions/body/serializeBody.js.map +1 -0
  14. package/dist/actions/body/serializeSlate.js +31 -0
  15. package/dist/actions/body/serializeSlate.js.map +1 -0
  16. package/dist/actions/body/textOfBody.d.ts +13 -0
  17. package/dist/actions/body/textOfBody.js +35 -0
  18. package/dist/actions/body/textOfBody.js.map +1 -0
  19. package/dist/actions/body/wildcards.d.ts +10 -0
  20. package/dist/actions/body/wildcards.js +33 -0
  21. package/dist/actions/body/wildcards.js.map +1 -0
  22. package/dist/actions/buildActionBlocks.js +12 -9
  23. package/dist/actions/buildActionBlocks.js.map +1 -1
  24. package/dist/actions/builtin/confirmation.js +47 -43
  25. package/dist/actions/builtin/confirmation.js.map +1 -1
  26. package/dist/actions/builtin/emailAction.d.ts +20 -0
  27. package/dist/actions/builtin/emailAction.js +120 -0
  28. package/dist/actions/builtin/emailAction.js.map +1 -0
  29. package/dist/actions/builtin/emailTeam.js +20 -38
  30. package/dist/actions/builtin/emailTeam.js.map +1 -1
  31. package/dist/actions/builtin/index.d.ts +16 -1
  32. package/dist/actions/builtin/index.js +21 -7
  33. package/dist/actions/builtin/index.js.map +1 -1
  34. package/dist/actions/builtin/signedWebhook.js +6 -2
  35. package/dist/actions/builtin/signedWebhook.js.map +1 -1
  36. package/dist/actions/defineAction.d.ts +17 -5
  37. package/dist/actions/defineAction.js.map +1 -1
  38. package/dist/actions/dispatch.js +51 -6
  39. package/dist/actions/dispatch.js.map +1 -1
  40. package/dist/actions/dispatchContext.js +13 -0
  41. package/dist/actions/dispatchContext.js.map +1 -0
  42. package/dist/actions/emailRecipients.d.ts +12 -0
  43. package/dist/actions/emailRecipients.js +146 -0
  44. package/dist/actions/emailRecipients.js.map +1 -0
  45. package/dist/actions/fromAddresses.d.ts +37 -0
  46. package/dist/actions/fromAddresses.js +131 -0
  47. package/dist/actions/fromAddresses.js.map +1 -0
  48. package/dist/actions/recipientSources.d.ts +34 -0
  49. package/dist/actions/recipientSources.js +11 -0
  50. package/dist/actions/recipientSources.js.map +1 -0
  51. package/dist/actions/registry.d.ts +2 -1
  52. package/dist/actions/registry.js +5 -7
  53. package/dist/actions/registry.js.map +1 -1
  54. package/dist/actions/runActions.js +10 -1
  55. package/dist/actions/runActions.js.map +1 -1
  56. package/dist/actions/task.js +47 -16
  57. package/dist/actions/task.js.map +1 -1
  58. package/dist/aggregation/aggregateResponses.d.ts +9 -0
  59. package/dist/aggregation/aggregateResponses.js +8 -14
  60. package/dist/aggregation/aggregateResponses.js.map +1 -1
  61. package/dist/aggregation/resolveResultsRequest.d.ts +41 -6
  62. package/dist/aggregation/resolveResultsRequest.js +97 -11
  63. package/dist/aggregation/resolveResultsRequest.js.map +1 -1
  64. package/dist/calc/computeCalcFields.d.ts +5 -3
  65. package/dist/calc/computeCalcFields.js +6 -4
  66. package/dist/calc/computeCalcFields.js.map +1 -1
  67. package/dist/calc/evaluate.d.ts +26 -3
  68. package/dist/calc/evaluate.js +34 -13
  69. package/dist/calc/evaluate.js.map +1 -1
  70. package/dist/calc/formatCalc.d.ts +11 -0
  71. package/dist/calc/formatCalc.js +35 -0
  72. package/dist/calc/formatCalc.js.map +1 -0
  73. package/dist/calc/formatCalcValue.d.ts +17 -0
  74. package/dist/calc/formatCalcValue.js +17 -0
  75. package/dist/calc/formatCalcValue.js.map +1 -0
  76. package/dist/calc/normalizeCalc.d.ts +17 -3
  77. package/dist/calc/normalizeCalc.js +42 -33
  78. package/dist/calc/normalizeCalc.js.map +1 -1
  79. package/dist/calc/registry.d.ts +43 -0
  80. package/dist/calc/registry.js +27 -0
  81. package/dist/calc/registry.js.map +1 -0
  82. package/dist/calc/resolveCalcContext.d.ts +36 -0
  83. package/dist/calc/resolveCalcContext.js +87 -0
  84. package/dist/calc/resolveCalcContext.js.map +1 -0
  85. package/dist/calc/types.d.ts +25 -4
  86. package/dist/calc/types.js +23 -0
  87. package/dist/calc/types.js.map +1 -0
  88. package/dist/client/ByteSizeField.d.ts +29 -0
  89. package/dist/client/ByteSizeField.js +58 -0
  90. package/dist/client/ByteSizeField.js.map +1 -0
  91. package/dist/client/CalcExpressionBuilder.d.ts +20 -0
  92. package/dist/client/CalcExpressionBuilder.js +890 -0
  93. package/dist/client/CalcExpressionBuilder.js.map +1 -0
  94. package/dist/client/ClosePollButton.d.ts +15 -0
  95. package/dist/client/ClosePollButton.js +80 -0
  96. package/dist/client/ClosePollButton.js.map +1 -0
  97. package/dist/client/CondensedArray.d.ts +15 -0
  98. package/dist/client/CondensedArray.js +97 -0
  99. package/dist/client/CondensedArray.js.map +1 -0
  100. package/dist/client/ConditionBuilder.js +2 -1
  101. package/dist/client/ConditionBuilder.js.map +1 -1
  102. package/dist/client/ConsentBlockLabel.d.ts +15 -0
  103. package/dist/client/ConsentBlockLabel.js +71 -0
  104. package/dist/client/ConsentBlockLabel.js.map +1 -0
  105. package/dist/client/ConsentSourceRowLabel.d.ts +9 -0
  106. package/dist/client/ConsentSourceRowLabel.js +21 -0
  107. package/dist/client/ConsentSourceRowLabel.js.map +1 -0
  108. package/dist/client/EndpointOptionsSelect.d.ts +55 -0
  109. package/dist/client/EndpointOptionsSelect.js +112 -0
  110. package/dist/client/EndpointOptionsSelect.js.map +1 -0
  111. package/dist/client/FieldBlockLabel.d.ts +18 -0
  112. package/dist/client/FieldBlockLabel.js +34 -0
  113. package/dist/client/FieldBlockLabel.js.map +1 -0
  114. package/dist/client/FieldNameSelect.d.ts +37 -0
  115. package/dist/client/FieldNameSelect.js +72 -0
  116. package/dist/client/FieldNameSelect.js.map +1 -0
  117. package/dist/client/FlowBuilder.d.ts +2 -2
  118. package/dist/client/FlowBuilder.js +137 -88
  119. package/dist/client/FlowBuilder.js.map +1 -1
  120. package/dist/client/FormConditionField.js +1 -4
  121. package/dist/client/FormConditionField.js.map +1 -1
  122. package/dist/client/RecipientsSelect.d.ts +37 -0
  123. package/dist/client/RecipientsSelect.js +197 -0
  124. package/dist/client/RecipientsSelect.js.map +1 -0
  125. package/dist/client/RuleDescription.d.ts +21 -0
  126. package/dist/client/RuleDescription.js +19 -0
  127. package/dist/client/RuleDescription.js.map +1 -0
  128. package/dist/client/admin.css +557 -0
  129. package/dist/client/endpointOptions.d.ts +11 -0
  130. package/dist/client/endpointOptions.js +38 -0
  131. package/dist/client/endpointOptions.js.map +1 -0
  132. package/dist/client/flowAuthoring.js +142 -0
  133. package/dist/client/flowAuthoring.js.map +1 -0
  134. package/dist/client/synthesizeClientField.js +21 -10
  135. package/dist/client/synthesizeClientField.js.map +1 -1
  136. package/dist/client/toStaticLabel.js +13 -0
  137. package/dist/client/toStaticLabel.js.map +1 -0
  138. package/dist/collections/buttonFields.d.ts +34 -0
  139. package/dist/collections/buttonFields.js +35 -0
  140. package/dist/collections/buttonFields.js.map +1 -0
  141. package/dist/collections/cells/FieldCountCell.d.ts +15 -0
  142. package/dist/collections/cells/FieldCountCell.js +18 -0
  143. package/dist/collections/cells/FieldCountCell.js.map +1 -0
  144. package/dist/collections/cells/FlowStepsCell.d.ts +14 -0
  145. package/dist/collections/cells/FlowStepsCell.js +17 -0
  146. package/dist/collections/cells/FlowStepsCell.js.map +1 -0
  147. package/dist/collections/formSubmissions.js +114 -28
  148. package/dist/collections/formSubmissions.js.map +1 -1
  149. package/dist/collections/forms.js +449 -112
  150. package/dist/collections/forms.js.map +1 -1
  151. package/dist/collections/formsEndpoints.js +106 -0
  152. package/dist/collections/formsEndpoints.js.map +1 -0
  153. package/dist/collections/redirectFields.d.ts +29 -0
  154. package/dist/collections/settingsFields.d.ts +31 -0
  155. package/dist/collections/settingsFields.js +45 -0
  156. package/dist/collections/settingsFields.js.map +1 -0
  157. package/dist/conditions/conditionType.js +9 -2
  158. package/dist/conditions/conditionType.js.map +1 -1
  159. package/dist/conditions/evaluate.js +1 -1
  160. package/dist/conditions/evaluate.js.map +1 -1
  161. package/dist/conditions/fieldTypes.d.ts +3 -1
  162. package/dist/conditions/fieldTypes.js +4 -1
  163. package/dist/conditions/fieldTypes.js.map +1 -1
  164. package/dist/conditions/normalizeConditions.js +20 -6
  165. package/dist/conditions/normalizeConditions.js.map +1 -1
  166. package/dist/consent/applyConsentStatements.d.ts +14 -0
  167. package/dist/consent/applyConsentStatements.js +17 -0
  168. package/dist/consent/applyConsentStatements.js.map +1 -0
  169. package/dist/consent/captureConsent.d.ts +39 -11
  170. package/dist/consent/captureConsent.js +63 -13
  171. package/dist/consent/captureConsent.js.map +1 -1
  172. package/dist/consent/consentSourcesField.d.ts +66 -0
  173. package/dist/consent/consentSourcesField.js +98 -0
  174. package/dist/consent/consentSourcesField.js.map +1 -0
  175. package/dist/consent/effectiveStatement.js +16 -0
  176. package/dist/consent/effectiveStatement.js.map +1 -0
  177. package/dist/consent/resolveConsentEntries.d.ts +24 -0
  178. package/dist/consent/resolveConsentEntries.js +40 -0
  179. package/dist/consent/resolveConsentEntries.js.map +1 -0
  180. package/dist/consent/resolveConsentSourcesRequest.d.ts +37 -0
  181. package/dist/consent/resolveConsentSourcesRequest.js +54 -0
  182. package/dist/consent/resolveConsentSourcesRequest.js.map +1 -0
  183. package/dist/consent/resolveConsentStatements.d.ts +45 -0
  184. package/dist/consent/resolveConsentStatements.js +46 -0
  185. package/dist/consent/resolveConsentStatements.js.map +1 -0
  186. package/dist/consent/resolvePublishedVersionRef.d.ts +17 -11
  187. package/dist/consent/resolvePublishedVersionRef.js +13 -10
  188. package/dist/consent/resolvePublishedVersionRef.js.map +1 -1
  189. package/dist/consent/types.d.ts +69 -0
  190. package/dist/context/formContext.d.ts +30 -0
  191. package/dist/context/formContext.js +54 -0
  192. package/dist/context/formContext.js.map +1 -0
  193. package/dist/email/departments.d.ts +59 -0
  194. package/dist/email/departments.js +87 -0
  195. package/dist/email/departments.js.map +1 -0
  196. package/dist/email/departmentsField.d.ts +53 -0
  197. package/dist/email/departmentsField.js +73 -0
  198. package/dist/email/departmentsField.js.map +1 -0
  199. package/dist/exports/client.d.ts +14 -1
  200. package/dist/exports/client.js +14 -1
  201. package/dist/exports/i18n.d.ts +5 -2
  202. package/dist/exports/i18n.js +5 -2
  203. package/dist/exports/react.d.ts +34 -10
  204. package/dist/exports/react.js +24 -4
  205. package/dist/exports/rsc.d.ts +10 -1
  206. package/dist/exports/rsc.js +10 -1
  207. package/dist/exports/types.d.ts +20 -12
  208. package/dist/fields/buildFieldBlocks.js +46 -25
  209. package/dist/fields/buildFieldBlocks.js.map +1 -1
  210. package/dist/fields/builtin/calculation.d.ts +17 -0
  211. package/dist/fields/builtin/calculation.js +193 -18
  212. package/dist/fields/builtin/calculation.js.map +1 -1
  213. package/dist/fields/builtin/checkbox.js +23 -0
  214. package/dist/fields/builtin/checkbox.js.map +1 -1
  215. package/dist/fields/builtin/consent.js +49 -14
  216. package/dist/fields/builtin/consent.js.map +1 -1
  217. package/dist/fields/builtin/country.d.ts +13 -0
  218. package/dist/fields/builtin/country.js +30 -0
  219. package/dist/fields/builtin/country.js.map +1 -0
  220. package/dist/fields/builtin/date.js +31 -0
  221. package/dist/fields/builtin/date.js.map +1 -0
  222. package/dist/fields/builtin/email.js +8 -1
  223. package/dist/fields/builtin/email.js.map +1 -1
  224. package/dist/fields/builtin/file.d.ts +15 -0
  225. package/dist/fields/builtin/file.js +95 -8
  226. package/dist/fields/builtin/file.js.map +1 -1
  227. package/dist/fields/builtin/index.d.ts +30 -0
  228. package/dist/fields/builtin/index.js +37 -10
  229. package/dist/fields/builtin/index.js.map +1 -1
  230. package/dist/fields/builtin/message.js +30 -0
  231. package/dist/fields/builtin/message.js.map +1 -0
  232. package/dist/fields/builtin/repeater.js +8 -3
  233. package/dist/fields/builtin/repeater.js.map +1 -1
  234. package/dist/fields/builtin/select.js +28 -4
  235. package/dist/fields/builtin/select.js.map +1 -1
  236. package/dist/fields/builtin/state.d.ts +13 -0
  237. package/dist/fields/builtin/state.js +30 -0
  238. package/dist/fields/builtin/state.js.map +1 -0
  239. package/dist/fields/builtin/text.js +7 -0
  240. package/dist/fields/builtin/text.js.map +1 -1
  241. package/dist/fields/data/regions.d.ts +21 -0
  242. package/dist/fields/data/regions.js +1238 -0
  243. package/dist/fields/data/regions.js.map +1 -0
  244. package/dist/fields/fieldKey.d.ts +15 -0
  245. package/dist/fields/fieldKey.js +16 -0
  246. package/dist/fields/fieldKey.js.map +1 -0
  247. package/dist/fields/fieldNamesOfType.js +30 -0
  248. package/dist/fields/fieldNamesOfType.js.map +1 -0
  249. package/dist/fields/instanceOptions.js +20 -0
  250. package/dist/fields/instanceOptions.js.map +1 -0
  251. package/dist/fields/localizedIf.d.ts +13 -0
  252. package/dist/fields/localizedIf.js +12 -0
  253. package/dist/fields/localizedIf.js.map +1 -0
  254. package/dist/fields/registry.d.ts +3 -1
  255. package/dist/fields/registry.js +23 -8
  256. package/dist/fields/registry.js.map +1 -1
  257. package/dist/fields/sharedConfig.js +125 -59
  258. package/dist/fields/sharedConfig.js.map +1 -1
  259. package/dist/fields/types.d.ts +78 -9
  260. package/dist/flow/engine.d.ts +6 -4
  261. package/dist/flow/engine.js +11 -6
  262. package/dist/flow/engine.js.map +1 -1
  263. package/dist/flow/normalizeFlow.js +28 -9
  264. package/dist/flow/normalizeFlow.js.map +1 -1
  265. package/dist/flow/stepLabel.js +15 -0
  266. package/dist/flow/stepLabel.js.map +1 -0
  267. package/dist/flow/types.d.ts +12 -3
  268. package/dist/flow/types.js +11 -0
  269. package/dist/flow/types.js.map +1 -0
  270. package/dist/form/pollState.d.ts +23 -0
  271. package/dist/form/pollState.js +17 -0
  272. package/dist/form/pollState.js.map +1 -0
  273. package/dist/form/toFormDocument.d.ts +110 -0
  274. package/dist/form/toFormDocument.js +89 -0
  275. package/dist/form/toFormDocument.js.map +1 -0
  276. package/dist/form/types.d.ts +73 -0
  277. package/dist/index.d.ts +67 -61
  278. package/dist/index.js +120 -25
  279. package/dist/index.js.map +1 -1
  280. package/dist/options.d.ts +281 -0
  281. package/dist/plugin/applyRegistryConfig.d.ts +11 -0
  282. package/dist/plugin/applyRegistryConfig.js +20 -0
  283. package/dist/plugin/applyRegistryConfig.js.map +1 -0
  284. package/dist/plugin/customState.js +26 -0
  285. package/dist/plugin/customState.js.map +1 -0
  286. package/dist/plugin/registerCollections.js +43 -40
  287. package/dist/plugin/registerCollections.js.map +1 -1
  288. package/dist/plugin/uploadsCollection.d.ts +16 -0
  289. package/dist/plugin/uploadsCollection.js +53 -0
  290. package/dist/plugin/uploadsCollection.js.map +1 -0
  291. package/dist/poll/applyPollOptions.js +18 -0
  292. package/dist/poll/applyPollOptions.js.map +1 -0
  293. package/dist/poll/buildPollOptionSourceFields.js +50 -0
  294. package/dist/poll/buildPollOptionSourceFields.js.map +1 -0
  295. package/dist/poll/closeJob.d.ts +53 -0
  296. package/dist/poll/closeJob.js +121 -0
  297. package/dist/poll/closeJob.js.map +1 -0
  298. package/dist/poll/definePollOptionSource.d.ts +44 -0
  299. package/dist/poll/definePollOptionSource.js +6 -0
  300. package/dist/poll/definePollOptionSource.js.map +1 -0
  301. package/dist/poll/definePollType.d.ts +34 -0
  302. package/dist/poll/definePollType.js +6 -0
  303. package/dist/poll/definePollType.js.map +1 -0
  304. package/dist/poll/effectivePollOptions.d.ts +38 -0
  305. package/dist/poll/effectivePollOptions.js +64 -0
  306. package/dist/poll/effectivePollOptions.js.map +1 -0
  307. package/dist/poll/mostVoted.d.ts +21 -0
  308. package/dist/poll/mostVoted.js +32 -0
  309. package/dist/poll/mostVoted.js.map +1 -0
  310. package/dist/poll/outcomeBeforeChange.js +91 -0
  311. package/dist/poll/outcomeBeforeChange.js.map +1 -0
  312. package/dist/poll/outcomeFields.d.ts +38 -0
  313. package/dist/poll/outcomeFields.js +52 -0
  314. package/dist/poll/outcomeFields.js.map +1 -0
  315. package/dist/poll/pollTypeRegistry.d.ts +34 -0
  316. package/dist/poll/pollTypeRegistry.js +69 -0
  317. package/dist/poll/pollTypeRegistry.js.map +1 -0
  318. package/dist/poll/registry.d.ts +17 -0
  319. package/dist/poll/registry.js +12 -0
  320. package/dist/poll/registry.js.map +1 -0
  321. package/dist/poll/resolvePollCloseRequest.js +106 -0
  322. package/dist/poll/resolvePollCloseRequest.js.map +1 -0
  323. package/dist/poll/resolvePollOptions.d.ts +29 -0
  324. package/dist/poll/resolvePollOptions.js +52 -0
  325. package/dist/poll/resolvePollOptions.js.map +1 -0
  326. package/dist/poll/resolvePollOptionsRequest.js +50 -0
  327. package/dist/poll/resolvePollOptionsRequest.js.map +1 -0
  328. package/dist/poll/resolvePollOutcome.d.ts +40 -0
  329. package/dist/poll/resolvePollOutcome.js +90 -0
  330. package/dist/poll/resolvePollOutcome.js.map +1 -0
  331. package/dist/poll/resultsField.js +21 -0
  332. package/dist/poll/resultsField.js.map +1 -0
  333. package/dist/poll/votes/aggregateFromVotes.d.ts +27 -0
  334. package/dist/poll/votes/aggregateFromVotes.js +54 -0
  335. package/dist/poll/votes/aggregateFromVotes.js.map +1 -0
  336. package/dist/poll/votes/answerValues.js +16 -0
  337. package/dist/poll/votes/answerValues.js.map +1 -0
  338. package/dist/poll/votes/bumpPollVote.js +88 -0
  339. package/dist/poll/votes/bumpPollVote.js.map +1 -0
  340. package/dist/poll/votes/recountPollVotes.d.ts +20 -0
  341. package/dist/poll/votes/recountPollVotes.js +63 -0
  342. package/dist/poll/votes/recountPollVotes.js.map +1 -0
  343. package/dist/poll/votes/voteTallyHook.js +76 -0
  344. package/dist/poll/votes/voteTallyHook.js.map +1 -0
  345. package/dist/poll/votes/votesCollection.d.ts +19 -0
  346. package/dist/poll/votes/votesCollection.js +89 -0
  347. package/dist/poll/votes/votesCollection.js.map +1 -0
  348. package/dist/prefill/valuesFromSearchParams.js +5 -9
  349. package/dist/prefill/valuesFromSearchParams.js.map +1 -1
  350. package/dist/presentations/types.d.ts +3 -2
  351. package/dist/react/Form.d.ts +77 -35
  352. package/dist/react/Form.js +368 -222
  353. package/dist/react/Form.js.map +1 -1
  354. package/dist/react/FormContext.d.ts +51 -1
  355. package/dist/react/FormContext.js.map +1 -1
  356. package/dist/react/FormControls.d.ts +55 -0
  357. package/dist/react/FormControls.js +56 -0
  358. package/dist/react/FormControls.js.map +1 -0
  359. package/dist/react/FormFields.d.ts +18 -0
  360. package/dist/react/FormFields.js +114 -0
  361. package/dist/react/FormFields.js.map +1 -0
  362. package/dist/react/FormLayout.d.ts +4 -2
  363. package/dist/react/FormLayout.js +3 -2
  364. package/dist/react/FormLayout.js.map +1 -1
  365. package/dist/react/FormResults.d.ts +8 -3
  366. package/dist/react/FormResults.js +50 -29
  367. package/dist/react/FormResults.js.map +1 -1
  368. package/dist/react/FormSteps.d.ts +17 -0
  369. package/dist/react/FormSteps.js +35 -0
  370. package/dist/react/FormSteps.js.map +1 -0
  371. package/dist/react/Poll.d.ts +40 -6
  372. package/dist/react/Poll.js +137 -33
  373. package/dist/react/Poll.js.map +1 -1
  374. package/dist/react/adapters.d.ts +35 -0
  375. package/dist/react/adapters.js +11 -0
  376. package/dist/react/adapters.js.map +1 -0
  377. package/dist/react/captcha/HcaptchaCaptcha.d.ts +31 -0
  378. package/dist/react/captcha/HcaptchaCaptcha.js +53 -0
  379. package/dist/react/captcha/HcaptchaCaptcha.js.map +1 -0
  380. package/dist/react/captcha/RecaptchaCaptcha.d.ts +44 -0
  381. package/dist/react/captcha/RecaptchaCaptcha.js +93 -0
  382. package/dist/react/captcha/RecaptchaCaptcha.js.map +1 -0
  383. package/dist/react/captcha/TurnstileCaptcha.d.ts +31 -0
  384. package/dist/react/captcha/TurnstileCaptcha.js +53 -0
  385. package/dist/react/captcha/TurnstileCaptcha.js.map +1 -0
  386. package/dist/react/captcha/types.d.ts +8 -0
  387. package/dist/react/captcha/useCaptchaScript.js +63 -0
  388. package/dist/react/captcha/useCaptchaScript.js.map +1 -0
  389. package/dist/react/captcha/vendors.js +8 -0
  390. package/dist/react/captcha/vendors.js.map +1 -0
  391. package/dist/react/contract.d.ts +2 -3
  392. package/dist/react/contract.js.map +1 -1
  393. package/dist/react/fetchResults.d.ts +1 -1
  394. package/dist/react/fetchResults.js +1 -1
  395. package/dist/react/fetchResults.js.map +1 -1
  396. package/dist/react/presentation/DialogSurface.js +1 -4
  397. package/dist/react/presentation/DialogSurface.js.map +1 -1
  398. package/dist/react/primitives/Checkbox.d.ts +6 -2
  399. package/dist/react/primitives/Checkbox.js +4 -2
  400. package/dist/react/primitives/Checkbox.js.map +1 -1
  401. package/dist/react/primitives/ChoiceGroup.d.ts +40 -0
  402. package/dist/react/primitives/ChoiceGroup.js +33 -0
  403. package/dist/react/primitives/ChoiceGroup.js.map +1 -0
  404. package/dist/react/primitives/FieldShell.d.ts +13 -5
  405. package/dist/react/primitives/FieldShell.js +35 -32
  406. package/dist/react/primitives/FieldShell.js.map +1 -1
  407. package/dist/react/primitives/Input.d.ts +4 -2
  408. package/dist/react/primitives/Input.js +2 -1
  409. package/dist/react/primitives/Input.js.map +1 -1
  410. package/dist/react/renderers/calculation.js +7 -5
  411. package/dist/react/renderers/calculation.js.map +1 -1
  412. package/dist/react/renderers/checkbox.js +3 -5
  413. package/dist/react/renderers/checkbox.js.map +1 -1
  414. package/dist/react/renderers/consent.js +84 -36
  415. package/dist/react/renderers/consent.js.map +1 -1
  416. package/dist/react/renderers/date.js +33 -0
  417. package/dist/react/renderers/date.js.map +1 -0
  418. package/dist/react/renderers/email.js +4 -5
  419. package/dist/react/renderers/email.js.map +1 -1
  420. package/dist/react/renderers/file.js +29 -14
  421. package/dist/react/renderers/file.js.map +1 -1
  422. package/dist/react/renderers/index.js +7 -0
  423. package/dist/react/renderers/index.js.map +1 -1
  424. package/dist/react/renderers/message.js +41 -0
  425. package/dist/react/renderers/message.js.map +1 -0
  426. package/dist/react/renderers/number.js +1 -4
  427. package/dist/react/renderers/number.js.map +1 -1
  428. package/dist/react/renderers/region.js +43 -0
  429. package/dist/react/renderers/region.js.map +1 -0
  430. package/dist/react/renderers/repeater.js +32 -14
  431. package/dist/react/renderers/repeater.js.map +1 -1
  432. package/dist/react/renderers/select.js +21 -6
  433. package/dist/react/renderers/select.js.map +1 -1
  434. package/dist/react/renderers/text.js +4 -5
  435. package/dist/react/renderers/text.js.map +1 -1
  436. package/dist/react/renderers/textarea.js +1 -4
  437. package/dist/react/renderers/textarea.js.map +1 -1
  438. package/dist/react/state.d.ts +46 -3
  439. package/dist/react/state.js +73 -10
  440. package/dist/react/state.js.map +1 -1
  441. package/dist/react/submitForm.js +1 -1
  442. package/dist/react/submitForm.js.map +1 -1
  443. package/dist/react/uploadFile.d.ts +2 -2
  444. package/dist/react/uploadFile.js +1 -1
  445. package/dist/react/uploadFile.js.map +1 -1
  446. package/dist/react/useCalcValues.d.ts +10 -0
  447. package/dist/react/useCalcValues.js +13 -0
  448. package/dist/react/useCalcValues.js.map +1 -0
  449. package/dist/react/useField.d.ts +0 -1
  450. package/dist/react/useField.js +7 -6
  451. package/dist/react/useField.js.map +1 -1
  452. package/dist/react/useFormState.d.ts +1 -1
  453. package/dist/react/useFormState.js +1 -1
  454. package/dist/react/useFormState.js.map +1 -1
  455. package/dist/react/validateField.js +3 -6
  456. package/dist/react/validateField.js.map +1 -1
  457. package/dist/recall/interpolate.d.ts +4 -3
  458. package/dist/recall/interpolate.js +5 -4
  459. package/dist/recall/interpolate.js.map +1 -1
  460. package/dist/recall/resolver.d.ts +1 -1
  461. package/dist/recall/resolver.js +15 -3
  462. package/dist/recall/resolver.js.map +1 -1
  463. package/dist/spam/captcha.d.ts +4 -3
  464. package/dist/spam/captcha.js +4 -3
  465. package/dist/spam/captcha.js.map +1 -1
  466. package/dist/spam/clientIp.js +9 -0
  467. package/dist/spam/clientIp.js.map +1 -0
  468. package/dist/spam/constants.js +13 -1
  469. package/dist/spam/constants.js.map +1 -1
  470. package/dist/spam/identify.js +3 -6
  471. package/dist/spam/identify.js.map +1 -1
  472. package/dist/spam/providers/hcaptcha.d.ts +17 -0
  473. package/dist/spam/providers/hcaptcha.js +18 -0
  474. package/dist/spam/providers/hcaptcha.js.map +1 -0
  475. package/dist/spam/providers/recaptcha.d.ts +23 -0
  476. package/dist/spam/providers/recaptcha.js +23 -0
  477. package/dist/spam/providers/recaptcha.js.map +1 -0
  478. package/dist/spam/providers/siteverify.js +34 -0
  479. package/dist/spam/providers/siteverify.js.map +1 -0
  480. package/dist/spam/providers/turnstile.d.ts +17 -0
  481. package/dist/spam/providers/turnstile.js +18 -0
  482. package/dist/spam/providers/turnstile.js.map +1 -0
  483. package/dist/spam/resolveSpam.js +2 -1
  484. package/dist/spam/resolveSpam.js.map +1 -1
  485. package/dist/spam/spamGuard.js +25 -11
  486. package/dist/spam/spamGuard.js.map +1 -1
  487. package/dist/spam/types.d.ts +19 -4
  488. package/dist/submissions/SubmissionAnswers.js +6 -2
  489. package/dist/submissions/SubmissionAnswers.js.map +1 -1
  490. package/dist/submissions/SubmissionAnswersClient.js +100 -64
  491. package/dist/submissions/SubmissionAnswersClient.js.map +1 -1
  492. package/dist/submissions/coerceBoolean.js +14 -0
  493. package/dist/submissions/coerceBoolean.js.map +1 -0
  494. package/dist/submissions/createSubmission.d.ts +36 -0
  495. package/dist/submissions/createSubmission.js +26 -0
  496. package/dist/submissions/createSubmission.js.map +1 -0
  497. package/dist/submissions/formIdOf.js +13 -0
  498. package/dist/submissions/formIdOf.js.map +1 -0
  499. package/dist/submissions/resolveVotedSubmission.d.ts +27 -0
  500. package/dist/submissions/resolveVotedSubmission.js +51 -0
  501. package/dist/submissions/resolveVotedSubmission.js.map +1 -0
  502. package/dist/submissions/runSubmission.d.ts +10 -0
  503. package/dist/submissions/runSubmission.js +104 -54
  504. package/dist/submissions/runSubmission.js.map +1 -1
  505. package/dist/submissions/types.d.ts +11 -4
  506. package/dist/submissions/validateSubmission.js +99 -13
  507. package/dist/submissions/validateSubmission.js.map +1 -1
  508. package/dist/submissions/verifyContext.js +35 -0
  509. package/dist/submissions/verifyContext.js.map +1 -0
  510. package/dist/submissions/voteChangeEndpoint.js +105 -0
  511. package/dist/submissions/voteChangeEndpoint.js.map +1 -0
  512. package/dist/submissions/votedCookie.d.ts +15 -0
  513. package/dist/submissions/votedCookie.js +74 -0
  514. package/dist/submissions/votedCookie.js.map +1 -0
  515. package/dist/translations/clientRuntimeKeys.d.ts +17 -0
  516. package/dist/translations/clientRuntimeKeys.js +48 -0
  517. package/dist/translations/clientRuntimeKeys.js.map +1 -0
  518. package/dist/translations/de.d.ts +12 -0
  519. package/dist/translations/de.js +380 -0
  520. package/dist/translations/de.js.map +1 -0
  521. package/dist/translations/en.js +250 -28
  522. package/dist/translations/en.js.map +1 -1
  523. package/dist/translations/index.d.ts +14 -5
  524. package/dist/translations/index.js +14 -3
  525. package/dist/translations/index.js.map +1 -1
  526. package/dist/translations/keys.d.ts +245 -23
  527. package/dist/translations/keys.js +246 -24
  528. package/dist/translations/keys.js.map +1 -1
  529. package/dist/translations/makeTranslate.d.ts +7 -3
  530. package/dist/translations/makeTranslate.js +12 -3
  531. package/dist/translations/makeTranslate.js.map +1 -1
  532. package/dist/translations/server.js +8 -1
  533. package/dist/translations/server.js.map +1 -1
  534. package/dist/uploads/captureFileRef.d.ts +10 -3
  535. package/dist/uploads/captureFileRef.js +18 -9
  536. package/dist/uploads/captureFileRef.js.map +1 -1
  537. package/dist/uploads/formatBytes.d.ts +9 -0
  538. package/dist/uploads/formatBytes.js +25 -0
  539. package/dist/uploads/formatBytes.js.map +1 -0
  540. package/dist/uploads/resolveFileRef.js +3 -2
  541. package/dist/uploads/resolveFileRef.js.map +1 -1
  542. package/dist/uploads/types.d.ts +1 -2
  543. package/dist/validation/buildRuleBlocks.js +18 -17
  544. package/dist/validation/buildRuleBlocks.js.map +1 -1
  545. package/dist/validation/builtin/email.js +2 -1
  546. package/dist/validation/builtin/email.js.map +1 -1
  547. package/dist/validation/builtin/index.d.ts +14 -0
  548. package/dist/validation/builtin/index.js +14 -1
  549. package/dist/validation/builtin/index.js.map +1 -1
  550. package/dist/validation/builtin/integer.js +15 -0
  551. package/dist/validation/builtin/integer.js.map +1 -0
  552. package/dist/validation/builtin/matchesField.js +3 -7
  553. package/dist/validation/builtin/matchesField.js.map +1 -1
  554. package/dist/validation/builtin/max.js +1 -0
  555. package/dist/validation/builtin/max.js.map +1 -1
  556. package/dist/validation/builtin/maxDate.js +24 -0
  557. package/dist/validation/builtin/maxDate.js.map +1 -0
  558. package/dist/validation/builtin/maxLength.js +1 -0
  559. package/dist/validation/builtin/maxLength.js.map +1 -1
  560. package/dist/validation/builtin/min.js +1 -0
  561. package/dist/validation/builtin/min.js.map +1 -1
  562. package/dist/validation/builtin/minDate.js +24 -0
  563. package/dist/validation/builtin/minDate.js.map +1 -0
  564. package/dist/validation/builtin/minLength.js +1 -0
  565. package/dist/validation/builtin/minLength.js.map +1 -1
  566. package/dist/validation/builtin/notAlreadySubmitted.js +5 -1
  567. package/dist/validation/builtin/notAlreadySubmitted.js.map +1 -1
  568. package/dist/validation/builtin/oneOf.js +1 -0
  569. package/dist/validation/builtin/oneOf.js.map +1 -1
  570. package/dist/validation/builtin/pattern.js +11 -2
  571. package/dist/validation/builtin/pattern.js.map +1 -1
  572. package/dist/validation/builtin/url.js +1 -0
  573. package/dist/validation/builtin/url.js.map +1 -1
  574. package/dist/validation/builtin/validateDateBound.js +18 -0
  575. package/dist/validation/builtin/validateDateBound.js.map +1 -0
  576. package/dist/validation/builtin/validateRegexParams.js +44 -0
  577. package/dist/validation/builtin/validateRegexParams.js.map +1 -0
  578. package/dist/validation/emailPattern.js +10 -0
  579. package/dist/validation/emailPattern.js.map +1 -0
  580. package/dist/validation/fieldTargetParam.d.ts +22 -0
  581. package/dist/validation/fieldTargetParam.js +38 -0
  582. package/dist/validation/fieldTargetParam.js.map +1 -0
  583. package/dist/validation/registry.d.ts +2 -1
  584. package/dist/validation/registry.js +2 -9
  585. package/dist/validation/registry.js.map +1 -1
  586. package/dist/validation/runValidation.js +8 -29
  587. package/dist/validation/runValidation.js.map +1 -1
  588. package/dist/validation/types.d.ts +5 -11
  589. package/dist/validation/validateUrl.js +22 -0
  590. package/dist/validation/validateUrl.js.map +1 -0
  591. package/package.json +14 -6
  592. package/styles/form-builder.css +94 -190
  593. package/dist/collections/uploads.d.ts +0 -30
  594. package/dist/collections/uploads.js +0 -55
  595. package/dist/collections/uploads.js.map +0 -1
  596. package/dist/consent/buildConsentSourceConfig.js +0 -49
  597. package/dist/consent/buildConsentSourceConfig.js.map +0 -1
  598. package/dist/consent/builtin/index.d.ts +0 -7
  599. package/dist/consent/builtin/index.js +0 -11
  600. package/dist/consent/builtin/index.js.map +0 -1
  601. package/dist/consent/builtin/pageReference.js +0 -75
  602. package/dist/consent/builtin/pageReference.js.map +0 -1
  603. package/dist/consent/builtin/static.js +0 -44
  604. package/dist/consent/builtin/static.js.map +0 -1
  605. package/dist/consent/defineConsentSource.d.ts +0 -35
  606. package/dist/consent/defineConsentSource.js +0 -6
  607. package/dist/consent/defineConsentSource.js.map +0 -1
  608. package/dist/consent/registry.d.ts +0 -16
  609. package/dist/consent/registry.js +0 -16
  610. package/dist/consent/registry.js.map +0 -1
  611. package/dist/consent/resolveConsentLinks.d.ts +0 -19
  612. package/dist/consent/resolveConsentLinks.js +0 -26
  613. package/dist/consent/resolveConsentLinks.js.map +0 -1
  614. package/dist/presentations/registry.d.ts +0 -15
  615. package/dist/presentations/registry.js +0 -15
  616. package/dist/presentations/registry.js.map +0 -1
  617. package/dist/react/toFormDocument.d.ts +0 -24
  618. package/dist/react/toFormDocument.js +0 -22
  619. package/dist/react/toFormDocument.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ import { keys } from "../../translations/keys.js";
2
+ import { asTranslate } from "../../translations/server.js";
3
+ import { isValidCalendarDate } from "../../fields/builtin/date.js";
4
+ //#region src/validation/builtin/validateDateBound.ts
5
+ /**
6
+ * Field-level `validate` for a minDate/maxDate rule's bound param: an unset bound is tolerated
7
+ * (the rule itself already treats a missing bound as pass-through), otherwise it must be a real
8
+ * `YYYY-MM-DD` calendar date so the rule's string comparison against submitted values is meaningful.
9
+ * Exported for unit testing.
10
+ */
11
+ const validateDateBound = (value, { req }) => {
12
+ if (typeof value !== "string" || value === "") return true;
13
+ return isValidCalendarDate(value) ? true : asTranslate(req.t)(keys.validationDate);
14
+ };
15
+ //#endregion
16
+ export { validateDateBound };
17
+
18
+ //# sourceMappingURL=validateDateBound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDateBound.js","names":[],"sources":["../../../src/validation/builtin/validateDateBound.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\nimport { isValidCalendarDate } from '../../fields/builtin/date'\nimport { keys } from '../../translations/keys'\nimport { asTranslate } from '../../translations/server'\n\n/**\n * Field-level `validate` for a minDate/maxDate rule's bound param: an unset bound is tolerated\n * (the rule itself already treats a missing bound as pass-through), otherwise it must be a real\n * `YYYY-MM-DD` calendar date so the rule's string comparison against submitted values is meaningful.\n * Exported for unit testing.\n */\nexport const validateDateBound = (\n\tvalue: unknown,\n\t{ req }: { data?: unknown; req: PayloadRequest }\n): string | true => {\n\tif (typeof value !== 'string' || value === '') {\n\t\treturn true\n\t}\n\treturn isValidCalendarDate(value) ? true : asTranslate(req.t)(keys.validationDate)\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAa,qBACZ,OACA,EAAE,UACiB;CACnB,IAAI,OAAO,UAAU,YAAY,UAAU,IAC1C,OAAO;CAER,OAAO,oBAAoB,KAAK,IAAI,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,cAAc;AAClF"}
@@ -0,0 +1,44 @@
1
+ import { keys } from "../../translations/keys.js";
2
+ import { asTranslate } from "../../translations/server.js";
3
+ //#region src/validation/builtin/validateRegexParams.ts
4
+ /** Compiles to `undefined` instead of throwing, so callers can branch on validity. */
5
+ const tryCompile = (pattern, flags) => {
6
+ try {
7
+ return new RegExp(pattern, flags);
8
+ } catch {
9
+ return;
10
+ }
11
+ };
12
+ const flagsOf = (siblingData) => {
13
+ const flags = siblingData?.flags;
14
+ return typeof flags === "string" && flags !== "" ? flags : void 0;
15
+ };
16
+ /**
17
+ * Field-level `validate` for the pattern rule's `flags` param: an unset value is tolerated,
18
+ * otherwise the flag set must be one `RegExp` accepts (an empty source isolates flag validity
19
+ * from pattern validity, so the two params report their own errors).
20
+ * Exported for unit testing.
21
+ */
22
+ const validateRegexFlags = (value, { req }) => {
23
+ if (typeof value !== "string" || value === "") return true;
24
+ return tryCompile("", value) ? true : asTranslate(req.t)(keys.validationRegexFlags);
25
+ };
26
+ /**
27
+ * Field-level `validate` for the pattern rule's `pattern` param. The rule itself fails open on an
28
+ * uncompilable pattern so a bad regex can never break the submit path, which would otherwise let an
29
+ * author save a rule that silently never fires; this catches it at authoring time instead.
30
+ *
31
+ * Compiled against the sibling `flags` because flags decide validity (`\p{Foo}` is a literal
32
+ * without `u` and a syntax error with it). Invalid flags are ignored here and left to
33
+ * `validateRegexFlags`, so a flag typo reports once, on the field that owns it.
34
+ * Exported for unit testing.
35
+ */
36
+ const validateRegexPattern = (value, { req, siblingData }) => {
37
+ if (typeof value !== "string" || value === "") return true;
38
+ const flags = flagsOf(siblingData);
39
+ return tryCompile(value, flags && tryCompile("", flags) ? flags : void 0) ? true : asTranslate(req.t)(keys.validationRegexPattern);
40
+ };
41
+ //#endregion
42
+ export { validateRegexFlags, validateRegexPattern };
43
+
44
+ //# sourceMappingURL=validateRegexParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateRegexParams.js","names":[],"sources":["../../../src/validation/builtin/validateRegexParams.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\nimport { keys } from '../../translations/keys'\nimport { asTranslate } from '../../translations/server'\n\n/** Compiles to `undefined` instead of throwing, so callers can branch on validity. */\nconst tryCompile = (pattern: string, flags?: string): RegExp | undefined => {\n\ttry {\n\t\treturn new RegExp(pattern, flags)\n\t} catch {\n\t\treturn undefined\n\t}\n}\n\nconst flagsOf = (siblingData: unknown): string | undefined => {\n\tconst flags = (siblingData as { flags?: unknown } | undefined)?.flags\n\treturn typeof flags === 'string' && flags !== '' ? flags : undefined\n}\n\n/**\n * Field-level `validate` for the pattern rule's `flags` param: an unset value is tolerated,\n * otherwise the flag set must be one `RegExp` accepts (an empty source isolates flag validity\n * from pattern validity, so the two params report their own errors).\n * Exported for unit testing.\n */\nexport const validateRegexFlags = (\n\tvalue: unknown,\n\t{ req }: { req: PayloadRequest; siblingData?: unknown }\n): string | true => {\n\tif (typeof value !== 'string' || value === '') {\n\t\treturn true\n\t}\n\treturn tryCompile('', value) ? true : asTranslate(req.t)(keys.validationRegexFlags)\n}\n\n/**\n * Field-level `validate` for the pattern rule's `pattern` param. The rule itself fails open on an\n * uncompilable pattern so a bad regex can never break the submit path, which would otherwise let an\n * author save a rule that silently never fires; this catches it at authoring time instead.\n *\n * Compiled against the sibling `flags` because flags decide validity (`\\p{Foo}` is a literal\n * without `u` and a syntax error with it). Invalid flags are ignored here and left to\n * `validateRegexFlags`, so a flag typo reports once, on the field that owns it.\n * Exported for unit testing.\n */\nexport const validateRegexPattern = (\n\tvalue: unknown,\n\t{ req, siblingData }: { req: PayloadRequest; siblingData?: unknown }\n): string | true => {\n\tif (typeof value !== 'string' || value === '') {\n\t\treturn true\n\t}\n\tconst flags = flagsOf(siblingData)\n\tconst effectiveFlags = flags && tryCompile('', flags) ? flags : undefined\n\treturn tryCompile(value, effectiveFlags) ? true : asTranslate(req.t)(keys.validationRegexPattern)\n}\n"],"mappings":";;;;AAKA,MAAM,cAAc,SAAiB,UAAuC;CAC3E,IAAI;EACH,OAAO,IAAI,OAAO,SAAS,KAAK;CACjC,QAAQ;EACP;CACD;AACD;AAEA,MAAM,WAAW,gBAA6C;CAC7D,MAAM,QAAS,aAAiD;CAChE,OAAO,OAAO,UAAU,YAAY,UAAU,KAAK,QAAQ,KAAA;AAC5D;;;;;;;AAQA,MAAa,sBACZ,OACA,EAAE,UACiB;CACnB,IAAI,OAAO,UAAU,YAAY,UAAU,IAC1C,OAAO;CAER,OAAO,WAAW,IAAI,KAAK,IAAI,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,oBAAoB;AACnF;;;;;;;;;;;AAYA,MAAa,wBACZ,OACA,EAAE,KAAK,kBACY;CACnB,IAAI,OAAO,UAAU,YAAY,UAAU,IAC1C,OAAO;CAER,MAAM,QAAQ,QAAQ,WAAW;CAEjC,OAAO,WAAW,OADK,SAAS,WAAW,IAAI,KAAK,IAAI,QAAQ,KAAA,CACzB,IAAI,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,sBAAsB;AACjG"}
@@ -0,0 +1,10 @@
1
+ //#region src/validation/emailPattern.ts
2
+ /**
3
+ * The email-format check shared by the `email` field type and the `email` validation rule, so the
4
+ * two never drift. A pragmatic "one @, one dot, no spaces" test, not a full RFC 5322 grammar.
5
+ */
6
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
7
+ //#endregion
8
+ export { EMAIL_PATTERN };
9
+
10
+ //# sourceMappingURL=emailPattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailPattern.js","names":[],"sources":["../../src/validation/emailPattern.ts"],"sourcesContent":["/**\n * The email-format check shared by the `email` field type and the `email` validation rule, so the\n * two never drift. A pragmatic \"one @, one dot, no spaces\" test, not a full RFC 5322 grammar.\n */\nexport const EMAIL_PATTERN = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n"],"mappings":";;;;;AAIA,MAAa,gBAAgB"}
@@ -0,0 +1,22 @@
1
+ import { TranslationKey } from "../translations/keys.js";
2
+ import { Field } from "payload";
3
+
4
+ //#region src/validation/fieldTargetParam.d.ts
5
+ type FieldTargetParamOptions = {
6
+ /** Field label; defaults to the shared `Field name` key. */label?: TranslationKey; /** Whether a target must be chosen; defaults to `true`. */
7
+ required?: boolean; /** Restrict the picker (and the save-time check) to these field-type slugs; omit for every field. */
8
+ types?: string[]; /** Optional description shown under the picker, resolved client-side from this key. */
9
+ description?: TranslationKey;
10
+ };
11
+ /**
12
+ * A rule/action param that targets another field on the same form by name. Stores the field name as a
13
+ * plain text value (no data migration), but authors it with the `FieldNameSelect` picker and enforces
14
+ * a save-time existence check so a name that no longer resolves (typically because the field was
15
+ * removed) is a save error rather than a silently dead reference. The picker options and this check
16
+ * read the same name set from `fieldNamesOfType`/`fieldNames`, so they cannot drift. Reusable by
17
+ * custom rules via the package's public export.
18
+ */
19
+ declare const fieldTargetParam: (name: string, opts?: FieldTargetParamOptions) => Field;
20
+ //#endregion
21
+ export { FieldTargetParamOptions, fieldTargetParam };
22
+ //# sourceMappingURL=fieldTargetParam.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { fieldNames, fieldNamesOfType } from "../fields/fieldNamesOfType.js";
2
+ import { keys } from "../translations/keys.js";
3
+ import { asTranslate, labelFor } from "../translations/server.js";
4
+ //#region src/validation/fieldTargetParam.ts
5
+ const FIELD_NAME_SELECT_REF = "@10x-media/form-builder/client#FieldNameSelect";
6
+ /**
7
+ * A rule/action param that targets another field on the same form by name. Stores the field name as a
8
+ * plain text value (no data migration), but authors it with the `FieldNameSelect` picker and enforces
9
+ * a save-time existence check so a name that no longer resolves (typically because the field was
10
+ * removed) is a save error rather than a silently dead reference. The picker options and this check
11
+ * read the same name set from `fieldNamesOfType`/`fieldNames`, so they cannot drift. Reusable by
12
+ * custom rules via the package's public export.
13
+ */
14
+ const fieldTargetParam = (name, opts) => {
15
+ const types = opts?.types;
16
+ return {
17
+ name,
18
+ type: "text",
19
+ required: opts?.required ?? true,
20
+ label: labelFor(opts?.label ?? keys.ruleParamField),
21
+ admin: { components: { Field: {
22
+ path: FIELD_NAME_SELECT_REF,
23
+ clientProps: {
24
+ types,
25
+ ...opts?.description ? { descriptionKey: opts.description } : {}
26
+ }
27
+ } } },
28
+ validate: (value, { data, req }) => {
29
+ if (typeof value !== "string" || value.length === 0) return true;
30
+ const fields = data && typeof data === "object" ? data.fields : void 0;
31
+ return (types ? fieldNamesOfType(fields, types) : fieldNames(fields)).includes(value) ? true : asTranslate(req.t)(keys.ruleFieldTargetInvalid);
32
+ }
33
+ };
34
+ };
35
+ //#endregion
36
+ export { fieldTargetParam };
37
+
38
+ //# sourceMappingURL=fieldTargetParam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldTargetParam.js","names":[],"sources":["../../src/validation/fieldTargetParam.ts"],"sourcesContent":["import type { Field, PayloadRequest } from 'payload'\nimport { fieldNames, fieldNamesOfType } from '../fields/fieldNamesOfType'\nimport { keys, type TranslationKey } from '../translations/keys'\nimport { asTranslate, labelFor } from '../translations/server'\n\nconst FIELD_NAME_SELECT_REF = '@10x-media/form-builder/client#FieldNameSelect'\n\nexport type FieldTargetParamOptions = {\n\t/** Field label; defaults to the shared `Field name` key. */\n\tlabel?: TranslationKey\n\t/** Whether a target must be chosen; defaults to `true`. */\n\trequired?: boolean\n\t/** Restrict the picker (and the save-time check) to these field-type slugs; omit for every field. */\n\ttypes?: string[]\n\t/** Optional description shown under the picker, resolved client-side from this key. */\n\tdescription?: TranslationKey\n}\n\n/**\n * A rule/action param that targets another field on the same form by name. Stores the field name as a\n * plain text value (no data migration), but authors it with the `FieldNameSelect` picker and enforces\n * a save-time existence check so a name that no longer resolves (typically because the field was\n * removed) is a save error rather than a silently dead reference. The picker options and this check\n * read the same name set from `fieldNamesOfType`/`fieldNames`, so they cannot drift. Reusable by\n * custom rules via the package's public export.\n */\nexport const fieldTargetParam = (name: string, opts?: FieldTargetParamOptions): Field => {\n\tconst types = opts?.types\n\treturn {\n\t\tname,\n\t\ttype: 'text',\n\t\trequired: opts?.required ?? true,\n\t\tlabel: labelFor(opts?.label ?? keys.ruleParamField),\n\t\tadmin: {\n\t\t\tcomponents: {\n\t\t\t\tField: {\n\t\t\t\t\tpath: FIELD_NAME_SELECT_REF,\n\t\t\t\t\tclientProps: {\n\t\t\t\t\t\ttypes,\n\t\t\t\t\t\t...(opts?.description ? { descriptionKey: opts.description } : {}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tvalidate: (value: unknown, { data, req }: { data?: unknown; req: PayloadRequest }) => {\n\t\t\tif (typeof value !== 'string' || value.length === 0) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst fields =\n\t\t\t\tdata && typeof data === 'object' ? (data as Record<string, unknown>).fields : undefined\n\t\t\tconst names = types ? fieldNamesOfType(fields, types) : fieldNames(fields)\n\t\t\treturn names.includes(value) ? true : asTranslate(req.t)(keys.ruleFieldTargetInvalid)\n\t\t},\n\t}\n}\n"],"mappings":";;;;AAKA,MAAM,wBAAwB;;;;;;;;;AAqB9B,MAAa,oBAAoB,MAAc,SAA0C;CACxF,MAAM,QAAQ,MAAM;CACpB,OAAO;EACN;EACA,MAAM;EACN,UAAU,MAAM,YAAY;EAC5B,OAAO,SAAS,MAAM,SAAS,KAAK,cAAc;EAClD,OAAO,EACN,YAAY,EACX,OAAO;GACN,MAAM;GACN,aAAa;IACZ;IACA,GAAI,MAAM,cAAc,EAAE,gBAAgB,KAAK,YAAY,IAAI,CAAC;GACjE;EACD,EACD,EACD;EACA,WAAW,OAAgB,EAAE,MAAM,UAAmD;GACrF,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GACjD,OAAO;GAER,MAAM,SACL,QAAQ,OAAO,SAAS,WAAY,KAAiC,SAAS,KAAA;GAE/E,QADc,QAAQ,iBAAiB,QAAQ,KAAK,IAAI,WAAW,MAAM,GAC5D,SAAS,KAAK,IAAI,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,sBAAsB;EACrF;CACD;AACD"}
@@ -1,10 +1,11 @@
1
+ import { RegistryConfig } from "../plugin/applyRegistryConfig.js";
1
2
  import { AnyValidationRuleDefinition } from "./types.js";
2
3
 
3
4
  //#region src/validation/registry.d.ts
4
5
  type ValidationRuleRegistry = Map<string, AnyValidationRuleDefinition>;
5
6
  /** Per-rule opt-in: `false` removes a built-in, `true` keeps it, an object adds a new rule or replaces one. */
6
7
  type ValidationRuleOption = boolean | AnyValidationRuleDefinition;
7
- type ValidationRulesConfig = Record<string, ValidationRuleOption>;
8
+ type ValidationRulesConfig = RegistryConfig<AnyValidationRuleDefinition>;
8
9
  //#endregion
9
10
  export { ValidationRuleOption, ValidationRuleRegistry, ValidationRulesConfig };
10
11
  //# sourceMappingURL=registry.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { applyRegistryConfig } from "../plugin/applyRegistryConfig.js";
1
2
  //#region src/validation/registry.ts
2
3
  const buildRuleRegistry = (rules) => {
3
4
  const registry = /* @__PURE__ */ new Map();
@@ -5,15 +6,7 @@ const buildRuleRegistry = (rules) => {
5
6
  return registry;
6
7
  };
7
8
  /** Resolve the active rule registry from the built-in defaults and the plugin `rules` option. */
8
- const resolveValidationRules = (defaults, config = {}) => {
9
- const registry = buildRuleRegistry(defaults);
10
- for (const [type, option] of Object.entries(config)) if (option === false) registry.delete(type);
11
- else if (option === true) {} else registry.set(type, {
12
- ...option,
13
- type
14
- });
15
- return registry;
16
- };
9
+ const resolveValidationRules = (defaults, config = {}) => applyRegistryConfig(buildRuleRegistry(defaults), config);
17
10
  //#endregion
18
11
  export { buildRuleRegistry, resolveValidationRules };
19
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","names":[],"sources":["../../src/validation/registry.ts"],"sourcesContent":["import type { AnyValidationRuleDefinition } from './types'\n\nexport type ValidationRuleRegistry = Map<string, AnyValidationRuleDefinition>\n\n/** Per-rule opt-in: `false` removes a built-in, `true` keeps it, an object adds a new rule or replaces one. */\nexport type ValidationRuleOption = boolean | AnyValidationRuleDefinition\n\nexport type ValidationRulesConfig = Record<string, ValidationRuleOption>\n\nexport const buildRuleRegistry = (rules: AnyValidationRuleDefinition[]): ValidationRuleRegistry => {\n\tconst registry: ValidationRuleRegistry = new Map()\n\tfor (const rule of rules) {\n\t\tregistry.set(rule.type, rule)\n\t}\n\treturn registry\n}\n\n/** Resolve the active rule registry from the built-in defaults and the plugin `rules` option. */\nexport const resolveValidationRules = (\n\tdefaults: AnyValidationRuleDefinition[],\n\tconfig: ValidationRulesConfig = {}\n): ValidationRuleRegistry => {\n\tconst registry = buildRuleRegistry(defaults)\n\tfor (const [type, option] of Object.entries(config)) {\n\t\tif (option === false) {\n\t\t\tregistry.delete(type)\n\t\t} else if (option === true) {\n\t\t\t// keep the default; a no-op when no default exists for this key\n\t\t} else {\n\t\t\tregistry.set(type, { ...option, type })\n\t\t}\n\t}\n\treturn registry\n}\n"],"mappings":";AASA,MAAa,qBAAqB,UAAiE;CAClG,MAAM,2BAAmC,IAAI,IAAI;CACjD,KAAK,MAAM,QAAQ,OAClB,SAAS,IAAI,KAAK,MAAM,IAAI;CAE7B,OAAO;AACR;;AAGA,MAAa,0BACZ,UACA,SAAgC,CAAC,MACL;CAC5B,MAAM,WAAW,kBAAkB,QAAQ;CAC3C,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,MAAM,GACjD,IAAI,WAAW,OACd,SAAS,OAAO,IAAI;MACd,IAAI,WAAW,MAAM,CAE5B,OACC,SAAS,IAAI,MAAM;EAAE,GAAG;EAAQ;CAAK,CAAC;CAGxC,OAAO;AACR"}
1
+ {"version":3,"file":"registry.js","names":[],"sources":["../../src/validation/registry.ts"],"sourcesContent":["import { applyRegistryConfig, type RegistryConfig } from '../plugin/applyRegistryConfig'\nimport type { AnyValidationRuleDefinition } from './types'\n\nexport type ValidationRuleRegistry = Map<string, AnyValidationRuleDefinition>\n\n/** Per-rule opt-in: `false` removes a built-in, `true` keeps it, an object adds a new rule or replaces one. */\nexport type ValidationRuleOption = boolean | AnyValidationRuleDefinition\n\nexport type ValidationRulesConfig = RegistryConfig<AnyValidationRuleDefinition>\n\nexport const buildRuleRegistry = (rules: AnyValidationRuleDefinition[]): ValidationRuleRegistry => {\n\tconst registry: ValidationRuleRegistry = new Map()\n\tfor (const rule of rules) {\n\t\tregistry.set(rule.type, rule)\n\t}\n\treturn registry\n}\n\n/** Resolve the active rule registry from the built-in defaults and the plugin `rules` option. */\nexport const resolveValidationRules = (\n\tdefaults: AnyValidationRuleDefinition[],\n\tconfig: ValidationRulesConfig = {}\n): ValidationRuleRegistry => applyRegistryConfig(buildRuleRegistry(defaults), config)\n"],"mappings":";;AAUA,MAAa,qBAAqB,UAAiE;CAClG,MAAM,2BAAmC,IAAI,IAAI;CACjD,KAAK,MAAM,QAAQ,OAClB,SAAS,IAAI,KAAK,MAAM,IAAI;CAE7B,OAAO;AACR;;AAGA,MAAa,0BACZ,UACA,SAAgC,CAAC,MACL,oBAAoB,kBAAkB,QAAQ,GAAG,MAAM"}
@@ -5,39 +5,25 @@ const RULE_TIMEOUT_MS = 5e3;
5
5
  const isEmpty = (value) => value == null || value === "" || Array.isArray(value) && value.length === 0;
6
6
  /** Build the per-instance message resolver: custom override (a literal template) or the localized default. */
7
7
  const makeMessage = (instance, defaultMessageKey, t) => {
8
- const { blockType: _blockType, message: _message, severity: _severity, ...params } = instance;
8
+ const { blockType: _blockType, message: _message, ...params } = instance;
9
9
  const template = typeof instance.message === "string" && instance.message.length > 0 ? instance.message : t(defaultMessageKey);
10
10
  return (vars = {}) => resolveMessage(template, {
11
11
  ...params,
12
12
  ...vars
13
13
  });
14
14
  };
15
- const toIssue = (result, fallbackSeverity) => {
16
- if (result === true) return null;
17
- if (typeof result === "string") return {
18
- message: result,
19
- severity: fallbackSeverity
20
- };
21
- return {
22
- message: result.message,
23
- severity: result.severity ?? fallbackSeverity
24
- };
25
- };
26
15
  /**
27
16
  * The one validation engine, run per field on client and server. Order: required, the field type's
28
17
  * intrinsic validator, then each declarative rule instance. Server-only rules are skipped in client
29
18
  * mode; every rule is wrapped in try/catch + a timeout so a bad rule cannot crash or stall the submit
30
- * path (a thrown or timed-out rule fails open, logged on the server). Only `error`-severity issues
31
- * block submission; the caller filters severity.
19
+ * path (a thrown or timed-out rule fails open, logged on the server). Every returned message is a
20
+ * blocking error.
32
21
  */
33
22
  const runValidation = async (input) => {
34
23
  const { field, fieldDefinition, value, fieldType, ruleRegistry, answers, locale, t, operation, event, mode, req, payload, formId, timeoutMs } = input;
35
24
  const timeout = timeoutMs ?? RULE_TIMEOUT_MS;
36
25
  const errors = [];
37
- if (field.required && isEmpty(value)) return { errors: [{
38
- message: t(keys.validationRequired),
39
- severity: "error"
40
- }] };
26
+ if (field.required && isEmpty(value)) return { errors: [t(keys.validationRequired)] };
41
27
  if (isEmpty(value) && field.blockType !== "repeater") return { errors: [] };
42
28
  if (fieldDefinition?.validate) try {
43
29
  const ran = fieldDefinition.validate({
@@ -49,10 +35,7 @@ const runValidation = async (input) => {
49
35
  t
50
36
  });
51
37
  const result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran;
52
- if (result !== true) errors.push({
53
- message: result,
54
- severity: "error"
55
- });
38
+ if (result !== true) errors.push(result);
56
39
  } catch (error) {
57
40
  req?.payload?.logger?.error?.({
58
41
  err: error,
@@ -61,10 +44,7 @@ const runValidation = async (input) => {
61
44
  }
62
45
  if (fieldDefinition?.schema) try {
63
46
  const outcome = await fieldDefinition.schema["~standard"].validate(value);
64
- if (outcome.issues) for (const issue of outcome.issues) errors.push({
65
- message: issue.message,
66
- severity: "error"
67
- });
47
+ if (outcome.issues) for (const issue of outcome.issues) errors.push(issue.message);
68
48
  } catch (error) {
69
49
  req?.payload?.logger?.error?.({
70
50
  err: error,
@@ -77,7 +57,6 @@ const runValidation = async (input) => {
77
57
  if (!rule) continue;
78
58
  if (mode === "client" && rule.client === false) continue;
79
59
  const message = makeMessage(instance, rule.defaultMessage, t);
80
- const fallbackSeverity = instance.severity ?? rule.severity ?? "error";
81
60
  try {
82
61
  const ran = rule.validate({
83
62
  value,
@@ -94,8 +73,8 @@ const runValidation = async (input) => {
94
73
  payload: mode === "server" ? payload : void 0,
95
74
  formId: mode === "server" ? formId : void 0
96
75
  });
97
- const issue = toIssue(ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran, fallbackSeverity);
98
- if (issue) errors.push(issue);
76
+ const result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran;
77
+ if (result !== true) errors.push(result);
99
78
  } catch (error) {
100
79
  req?.payload?.logger?.error?.({
101
80
  err: error,
@@ -1 +1 @@
1
- {"version":3,"file":"runValidation.js","names":[],"sources":["../../src/validation/runValidation.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\nimport type { AnyFormFieldDefinition, Translate } from '../fields/types'\nimport type { FormFieldInstance } from '../submissions/types'\nimport { keys } from '../translations/keys'\nimport { resolveMessage, withTimeout } from './message'\nimport type { ValidationRuleRegistry } from './registry'\nimport type { MessageFn, ValidationRuleResult, ValidationSeverity } from './types'\n\nconst RULE_TIMEOUT_MS = 5000\n\nexport type ValidationIssue = { message: string; severity: ValidationSeverity }\n\nexport type RunValidationInput = {\n\tfield: FormFieldInstance\n\tfieldDefinition?: AnyFormFieldDefinition\n\tvalue: unknown\n\tfieldType: string\n\truleRegistry: ValidationRuleRegistry\n\tanswers: Record<string, unknown>\n\tlocale: string\n\tt: Translate\n\toperation: 'create' | 'update'\n\tevent: 'onChange' | 'submit'\n\tmode: 'client' | 'server'\n\treq?: PayloadRequest\n\tpayload?: Payload\n\tformId?: number | string\n\t/** Override the per-rule timeout in ms. Defaults to RULE_TIMEOUT_MS; primarily for tests. */\n\ttimeoutMs?: number\n}\n\nexport type RunValidationResult = { errors: ValidationIssue[] }\n\nconst isEmpty = (value: unknown): boolean =>\n\tvalue == null || value === '' || (Array.isArray(value) && value.length === 0)\n\ntype RuleInstance = { blockType: string; message?: string; severity?: ValidationSeverity } & Record<\n\tstring,\n\tunknown\n>\n\n/** Build the per-instance message resolver: custom override (a literal template) or the localized default. */\nconst makeMessage = (\n\tinstance: RuleInstance,\n\tdefaultMessageKey: string,\n\tt: Translate\n): MessageFn => {\n\tconst { blockType: _blockType, message: _message, severity: _severity, ...params } = instance\n\tconst template =\n\t\ttypeof instance.message === 'string' && instance.message.length > 0\n\t\t\t? instance.message\n\t\t\t: t(defaultMessageKey)\n\treturn (vars = {}) => resolveMessage(template, { ...params, ...vars })\n}\n\nconst toIssue = (\n\tresult: ValidationRuleResult,\n\tfallbackSeverity: ValidationSeverity\n): ValidationIssue | null => {\n\tif (result === true) {\n\t\treturn null\n\t}\n\tif (typeof result === 'string') {\n\t\treturn { message: result, severity: fallbackSeverity }\n\t}\n\treturn { message: result.message, severity: result.severity ?? fallbackSeverity }\n}\n\n/**\n * The one validation engine, run per field on client and server. Order: required, the field type's\n * intrinsic validator, then each declarative rule instance. Server-only rules are skipped in client\n * mode; every rule is wrapped in try/catch + a timeout so a bad rule cannot crash or stall the submit\n * path (a thrown or timed-out rule fails open, logged on the server). Only `error`-severity issues\n * block submission; the caller filters severity.\n */\nexport const runValidation = async (input: RunValidationInput): Promise<RunValidationResult> => {\n\tconst {\n\t\tfield,\n\t\tfieldDefinition,\n\t\tvalue,\n\t\tfieldType,\n\t\truleRegistry,\n\t\tanswers,\n\t\tlocale,\n\t\tt,\n\t\toperation,\n\t\tevent,\n\t\tmode,\n\t\treq,\n\t\tpayload,\n\t\tformId,\n\t\ttimeoutMs,\n\t} = input\n\tconst timeout = timeoutMs ?? RULE_TIMEOUT_MS\n\tconst errors: ValidationIssue[] = []\n\n\tif (field.required && isEmpty(value)) {\n\t\treturn { errors: [{ message: t(keys.validationRequired), severity: 'error' }] }\n\t}\n\t// Repeaters coerced to [] must reach fieldDefinition.validate so minRows is enforced;\n\t// all other empty fields have no intrinsic rules to run.\n\tif (isEmpty(value) && field.blockType !== 'repeater') {\n\t\treturn { errors: [] }\n\t}\n\n\tif (fieldDefinition?.validate) {\n\t\ttry {\n\t\t\tconst ran = fieldDefinition.validate({\n\t\t\t\tvalue,\n\t\t\t\tconfig: field,\n\t\t\t\tsiblingData: answers,\n\t\t\t\tdata: answers,\n\t\t\t\tlocale,\n\t\t\t\tt,\n\t\t\t})\n\t\t\tconst result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran\n\t\t\tif (result !== true) {\n\t\t\t\terrors.push({ message: result, severity: 'error' })\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, field: field.name },\n\t\t\t\t'form-builder intrinsic field validator threw'\n\t\t\t)\n\t\t}\n\t}\n\n\tif (fieldDefinition?.schema) {\n\t\ttry {\n\t\t\tconst outcome = await fieldDefinition.schema['~standard'].validate(value)\n\t\t\tif (outcome.issues) {\n\t\t\t\tfor (const issue of outcome.issues) {\n\t\t\t\t\terrors.push({ message: issue.message, severity: 'error' })\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, field: field.name },\n\t\t\t\t'form-builder field schema threw'\n\t\t\t)\n\t\t}\n\t}\n\n\tconst instances = (Array.isArray(field.validations) ? field.validations : []) as RuleInstance[]\n\tfor (const instance of instances) {\n\t\tconst rule = ruleRegistry.get(instance.blockType)\n\t\tif (!rule) {\n\t\t\tcontinue\n\t\t}\n\t\tif (mode === 'client' && rule.client === false) {\n\t\t\tcontinue\n\t\t}\n\t\tconst message = makeMessage(instance, rule.defaultMessage, t)\n\t\tconst fallbackSeverity: ValidationSeverity = instance.severity ?? rule.severity ?? 'error'\n\t\ttry {\n\t\t\tconst ran = rule.validate({\n\t\t\t\tvalue,\n\t\t\t\tparams: instance,\n\t\t\t\tsiblingData: answers,\n\t\t\t\tdata: answers,\n\t\t\t\tfield,\n\t\t\t\tfieldType,\n\t\t\t\toperation,\n\t\t\t\tevent,\n\t\t\t\tlocale,\n\t\t\t\tmessage,\n\t\t\t\treq: mode === 'server' ? req : undefined,\n\t\t\t\tpayload: mode === 'server' ? payload : undefined,\n\t\t\t\tformId: mode === 'server' ? formId : undefined,\n\t\t\t})\n\t\t\tconst result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran\n\t\t\tconst issue = toIssue(result, fallbackSeverity)\n\t\t\tif (issue) {\n\t\t\t\terrors.push(issue)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, rule: rule.type },\n\t\t\t\t'form-builder validation rule threw'\n\t\t\t)\n\t\t}\n\t}\n\n\treturn { errors }\n}\n"],"mappings":";;;AAQA,MAAM,kBAAkB;AAyBxB,MAAM,WAAW,UAChB,SAAS,QAAQ,UAAU,MAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;;AAQ5E,MAAM,eACL,UACA,mBACA,MACe;CACf,MAAM,EAAE,WAAW,YAAY,SAAS,UAAU,UAAU,WAAW,GAAG,WAAW;CACrF,MAAM,WACL,OAAO,SAAS,YAAY,YAAY,SAAS,QAAQ,SAAS,IAC/D,SAAS,UACT,EAAE,iBAAiB;CACvB,QAAQ,OAAO,CAAC,MAAM,eAAe,UAAU;EAAE,GAAG;EAAQ,GAAG;CAAK,CAAC;AACtE;AAEA,MAAM,WACL,QACA,qBAC4B;CAC5B,IAAI,WAAW,MACd,OAAO;CAER,IAAI,OAAO,WAAW,UACrB,OAAO;EAAE,SAAS;EAAQ,UAAU;CAAiB;CAEtD,OAAO;EAAE,SAAS,OAAO;EAAS,UAAU,OAAO,YAAY;CAAiB;AACjF;;;;;;;;AASA,MAAa,gBAAgB,OAAO,UAA4D;CAC/F,MAAM,EACL,OACA,iBACA,OACA,WACA,cACA,SACA,QACA,GACA,WACA,OACA,MACA,KACA,SACA,QACA,cACG;CACJ,MAAM,UAAU,aAAa;CAC7B,MAAM,SAA4B,CAAC;CAEnC,IAAI,MAAM,YAAY,QAAQ,KAAK,GAClC,OAAO,EAAE,QAAQ,CAAC;EAAE,SAAS,EAAE,KAAK,kBAAkB;EAAG,UAAU;CAAQ,CAAC,EAAE;CAI/E,IAAI,QAAQ,KAAK,KAAK,MAAM,cAAc,YACzC,OAAO,EAAE,QAAQ,CAAC,EAAE;CAGrB,IAAI,iBAAiB,UACpB,IAAI;EACH,MAAM,MAAM,gBAAgB,SAAS;GACpC;GACA,QAAQ;GACR,aAAa;GACb,MAAM;GACN;GACA;EACD,CAAC;EACD,MAAM,SAAS,eAAe,UAAU,MAAM,YAAY,KAAK,SAAS,IAAI,IAAI;EAChF,IAAI,WAAW,MACd,OAAO,KAAK;GAAE,SAAS;GAAQ,UAAU;EAAQ,CAAC;CAEpD,SAAS,OAAO;EACf,KAAK,SAAS,QAAQ,QACrB;GAAE,KAAK;GAAO,OAAO,MAAM;EAAK,GAChC,8CACD;CACD;CAGD,IAAI,iBAAiB,QACpB,IAAI;EACH,MAAM,UAAU,MAAM,gBAAgB,OAAO,aAAa,SAAS,KAAK;EACxE,IAAI,QAAQ,QACX,KAAK,MAAM,SAAS,QAAQ,QAC3B,OAAO,KAAK;GAAE,SAAS,MAAM;GAAS,UAAU;EAAQ,CAAC;CAG5D,SAAS,OAAO;EACf,KAAK,SAAS,QAAQ,QACrB;GAAE,KAAK;GAAO,OAAO,MAAM;EAAK,GAChC,iCACD;CACD;CAGD,MAAM,YAAa,MAAM,QAAQ,MAAM,WAAW,IAAI,MAAM,cAAc,CAAC;CAC3E,KAAK,MAAM,YAAY,WAAW;EACjC,MAAM,OAAO,aAAa,IAAI,SAAS,SAAS;EAChD,IAAI,CAAC,MACJ;EAED,IAAI,SAAS,YAAY,KAAK,WAAW,OACxC;EAED,MAAM,UAAU,YAAY,UAAU,KAAK,gBAAgB,CAAC;EAC5D,MAAM,mBAAuC,SAAS,YAAY,KAAK,YAAY;EACnF,IAAI;GACH,MAAM,MAAM,KAAK,SAAS;IACzB;IACA,QAAQ;IACR,aAAa;IACb,MAAM;IACN;IACA;IACA;IACA;IACA;IACA;IACA,KAAK,SAAS,WAAW,MAAM,KAAA;IAC/B,SAAS,SAAS,WAAW,UAAU,KAAA;IACvC,QAAQ,SAAS,WAAW,SAAS,KAAA;GACtC,CAAC;GAED,MAAM,QAAQ,QADC,eAAe,UAAU,MAAM,YAAY,KAAK,SAAS,IAAI,IAAI,KAClD,gBAAgB;GAC9C,IAAI,OACH,OAAO,KAAK,KAAK;EAEnB,SAAS,OAAO;GACf,KAAK,SAAS,QAAQ,QACrB;IAAE,KAAK;IAAO,MAAM,KAAK;GAAK,GAC9B,oCACD;EACD;CACD;CAEA,OAAO,EAAE,OAAO;AACjB"}
1
+ {"version":3,"file":"runValidation.js","names":[],"sources":["../../src/validation/runValidation.ts"],"sourcesContent":["import type { Payload, PayloadRequest } from 'payload'\nimport type { AnyFormFieldDefinition, Translate } from '../fields/types'\nimport type { FormFieldInstance } from '../submissions/types'\nimport { keys } from '../translations/keys'\nimport { resolveMessage, withTimeout } from './message'\nimport type { ValidationRuleRegistry } from './registry'\nimport type { MessageFn } from './types'\n\nconst RULE_TIMEOUT_MS = 5000\n\nexport type RunValidationInput = {\n\tfield: FormFieldInstance\n\tfieldDefinition?: AnyFormFieldDefinition\n\tvalue: unknown\n\tfieldType: string\n\truleRegistry: ValidationRuleRegistry\n\tanswers: Record<string, unknown>\n\tlocale: string\n\tt: Translate\n\toperation: 'create' | 'update'\n\tevent: 'onChange' | 'submit'\n\tmode: 'client' | 'server'\n\treq?: PayloadRequest\n\tpayload?: Payload\n\tformId?: number | string\n\t/** Override the per-rule timeout in ms. Defaults to RULE_TIMEOUT_MS; primarily for tests. */\n\ttimeoutMs?: number\n}\n\nexport type RunValidationResult = { errors: string[] }\n\nconst isEmpty = (value: unknown): boolean =>\n\tvalue == null || value === '' || (Array.isArray(value) && value.length === 0)\n\ntype RuleInstance = { blockType: string; message?: string } & Record<string, unknown>\n\n/** Build the per-instance message resolver: custom override (a literal template) or the localized default. */\nconst makeMessage = (\n\tinstance: RuleInstance,\n\tdefaultMessageKey: string,\n\tt: Translate\n): MessageFn => {\n\tconst { blockType: _blockType, message: _message, ...params } = instance\n\tconst template =\n\t\ttypeof instance.message === 'string' && instance.message.length > 0\n\t\t\t? instance.message\n\t\t\t: t(defaultMessageKey)\n\treturn (vars = {}) => resolveMessage(template, { ...params, ...vars })\n}\n\n/**\n * The one validation engine, run per field on client and server. Order: required, the field type's\n * intrinsic validator, then each declarative rule instance. Server-only rules are skipped in client\n * mode; every rule is wrapped in try/catch + a timeout so a bad rule cannot crash or stall the submit\n * path (a thrown or timed-out rule fails open, logged on the server). Every returned message is a\n * blocking error.\n */\nexport const runValidation = async (input: RunValidationInput): Promise<RunValidationResult> => {\n\tconst {\n\t\tfield,\n\t\tfieldDefinition,\n\t\tvalue,\n\t\tfieldType,\n\t\truleRegistry,\n\t\tanswers,\n\t\tlocale,\n\t\tt,\n\t\toperation,\n\t\tevent,\n\t\tmode,\n\t\treq,\n\t\tpayload,\n\t\tformId,\n\t\ttimeoutMs,\n\t} = input\n\tconst timeout = timeoutMs ?? RULE_TIMEOUT_MS\n\tconst errors: string[] = []\n\n\tif (field.required && isEmpty(value)) {\n\t\treturn { errors: [t(keys.validationRequired)] }\n\t}\n\t// Repeaters coerced to [] must reach fieldDefinition.validate so minRows is enforced;\n\t// all other empty fields have no intrinsic rules to run.\n\tif (isEmpty(value) && field.blockType !== 'repeater') {\n\t\treturn { errors: [] }\n\t}\n\n\tif (fieldDefinition?.validate) {\n\t\ttry {\n\t\t\tconst ran = fieldDefinition.validate({\n\t\t\t\tvalue,\n\t\t\t\tconfig: field,\n\t\t\t\tsiblingData: answers,\n\t\t\t\tdata: answers,\n\t\t\t\tlocale,\n\t\t\t\tt,\n\t\t\t})\n\t\t\tconst result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran\n\t\t\tif (result !== true) {\n\t\t\t\terrors.push(result)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, field: field.name },\n\t\t\t\t'form-builder intrinsic field validator threw'\n\t\t\t)\n\t\t}\n\t}\n\n\tif (fieldDefinition?.schema) {\n\t\ttry {\n\t\t\tconst outcome = await fieldDefinition.schema['~standard'].validate(value)\n\t\t\tif (outcome.issues) {\n\t\t\t\tfor (const issue of outcome.issues) {\n\t\t\t\t\terrors.push(issue.message)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, field: field.name },\n\t\t\t\t'form-builder field schema threw'\n\t\t\t)\n\t\t}\n\t}\n\n\tconst instances = (Array.isArray(field.validations) ? field.validations : []) as RuleInstance[]\n\tfor (const instance of instances) {\n\t\tconst rule = ruleRegistry.get(instance.blockType)\n\t\tif (!rule) {\n\t\t\tcontinue\n\t\t}\n\t\tif (mode === 'client' && rule.client === false) {\n\t\t\tcontinue\n\t\t}\n\t\tconst message = makeMessage(instance, rule.defaultMessage, t)\n\t\ttry {\n\t\t\tconst ran = rule.validate({\n\t\t\t\tvalue,\n\t\t\t\tparams: instance,\n\t\t\t\tsiblingData: answers,\n\t\t\t\tdata: answers,\n\t\t\t\tfield,\n\t\t\t\tfieldType,\n\t\t\t\toperation,\n\t\t\t\tevent,\n\t\t\t\tlocale,\n\t\t\t\tmessage,\n\t\t\t\treq: mode === 'server' ? req : undefined,\n\t\t\t\tpayload: mode === 'server' ? payload : undefined,\n\t\t\t\tformId: mode === 'server' ? formId : undefined,\n\t\t\t})\n\t\t\tconst result = ran instanceof Promise ? await withTimeout(ran, timeout, true) : ran\n\t\t\tif (result !== true) {\n\t\t\t\terrors.push(result)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\treq?.payload?.logger?.error?.(\n\t\t\t\t{ err: error, rule: rule.type },\n\t\t\t\t'form-builder validation rule threw'\n\t\t\t)\n\t\t}\n\t}\n\n\treturn { errors }\n}\n"],"mappings":";;;AAQA,MAAM,kBAAkB;AAuBxB,MAAM,WAAW,UAChB,SAAS,QAAQ,UAAU,MAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;;AAK5E,MAAM,eACL,UACA,mBACA,MACe;CACf,MAAM,EAAE,WAAW,YAAY,SAAS,UAAU,GAAG,WAAW;CAChE,MAAM,WACL,OAAO,SAAS,YAAY,YAAY,SAAS,QAAQ,SAAS,IAC/D,SAAS,UACT,EAAE,iBAAiB;CACvB,QAAQ,OAAO,CAAC,MAAM,eAAe,UAAU;EAAE,GAAG;EAAQ,GAAG;CAAK,CAAC;AACtE;;;;;;;;AASA,MAAa,gBAAgB,OAAO,UAA4D;CAC/F,MAAM,EACL,OACA,iBACA,OACA,WACA,cACA,SACA,QACA,GACA,WACA,OACA,MACA,KACA,SACA,QACA,cACG;CACJ,MAAM,UAAU,aAAa;CAC7B,MAAM,SAAmB,CAAC;CAE1B,IAAI,MAAM,YAAY,QAAQ,KAAK,GAClC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAK,kBAAkB,CAAC,EAAE;CAI/C,IAAI,QAAQ,KAAK,KAAK,MAAM,cAAc,YACzC,OAAO,EAAE,QAAQ,CAAC,EAAE;CAGrB,IAAI,iBAAiB,UACpB,IAAI;EACH,MAAM,MAAM,gBAAgB,SAAS;GACpC;GACA,QAAQ;GACR,aAAa;GACb,MAAM;GACN;GACA;EACD,CAAC;EACD,MAAM,SAAS,eAAe,UAAU,MAAM,YAAY,KAAK,SAAS,IAAI,IAAI;EAChF,IAAI,WAAW,MACd,OAAO,KAAK,MAAM;CAEpB,SAAS,OAAO;EACf,KAAK,SAAS,QAAQ,QACrB;GAAE,KAAK;GAAO,OAAO,MAAM;EAAK,GAChC,8CACD;CACD;CAGD,IAAI,iBAAiB,QACpB,IAAI;EACH,MAAM,UAAU,MAAM,gBAAgB,OAAO,aAAa,SAAS,KAAK;EACxE,IAAI,QAAQ,QACX,KAAK,MAAM,SAAS,QAAQ,QAC3B,OAAO,KAAK,MAAM,OAAO;CAG5B,SAAS,OAAO;EACf,KAAK,SAAS,QAAQ,QACrB;GAAE,KAAK;GAAO,OAAO,MAAM;EAAK,GAChC,iCACD;CACD;CAGD,MAAM,YAAa,MAAM,QAAQ,MAAM,WAAW,IAAI,MAAM,cAAc,CAAC;CAC3E,KAAK,MAAM,YAAY,WAAW;EACjC,MAAM,OAAO,aAAa,IAAI,SAAS,SAAS;EAChD,IAAI,CAAC,MACJ;EAED,IAAI,SAAS,YAAY,KAAK,WAAW,OACxC;EAED,MAAM,UAAU,YAAY,UAAU,KAAK,gBAAgB,CAAC;EAC5D,IAAI;GACH,MAAM,MAAM,KAAK,SAAS;IACzB;IACA,QAAQ;IACR,aAAa;IACb,MAAM;IACN;IACA;IACA;IACA;IACA;IACA;IACA,KAAK,SAAS,WAAW,MAAM,KAAA;IAC/B,SAAS,SAAS,WAAW,UAAU,KAAA;IACvC,QAAQ,SAAS,WAAW,SAAS,KAAA;GACtC,CAAC;GACD,MAAM,SAAS,eAAe,UAAU,MAAM,YAAY,KAAK,SAAS,IAAI,IAAI;GAChF,IAAI,WAAW,MACd,OAAO,KAAK,MAAM;EAEpB,SAAS,OAAO;GACf,KAAK,SAAS,QAAQ,QACrB;IAAE,KAAK;IAAO,MAAM,KAAK;GAAK,GAC9B,oCACD;EACD;CACD;CAEA,OAAO,EAAE,OAAO;AACjB"}
@@ -2,12 +2,8 @@ import { FormFieldInstance } from "../submissions/types.js";
2
2
  import { Field, Payload, PayloadRequest } from "payload";
3
3
 
4
4
  //#region src/validation/types.d.ts
5
- type ValidationSeverity = 'error' | 'warning';
6
- /** A rule outcome: pass, a plain error string, or an explicit message + severity. */
7
- type ValidationRuleResult = true | string | {
8
- message: string;
9
- severity?: ValidationSeverity;
10
- };
5
+ /** A rule outcome: pass (`true`) or a blocking error message. */
6
+ type ValidationRuleResult = true | string;
11
7
  /** Resolves this rule instance's message (custom override or localized default) with `{var}` interpolation. */
12
8
  type MessageFn = (vars?: Record<string, unknown>) => string;
13
9
  /** Resolved per-instance rule params (loose at the DB boundary, narrowed by the author's generic). */
@@ -30,7 +26,7 @@ type ValidationRuleValidateArgs<TParams extends ValidationParams, TValue, TData
30
26
  type ValidationRuleValidate<TParams extends ValidationParams, TValue, TData extends Record<string, unknown> = Record<string, unknown>> = (args: ValidationRuleValidateArgs<TParams, TValue, TData>) => Promise<ValidationRuleResult> | ValidationRuleResult;
31
27
  /**
32
28
  * A validation rule type, authored once. `params` is a Payload `Field[]` rendered in the per-field
33
- * constraint list; `validate` returns `true | string | { message, severity }`. `client` defaults from
29
+ * constraint list; `validate` returns `true | string`. `client` defaults from
34
30
  * whether the rule is pure (a rule that is async or uses `req`/`payload` must set `client: false`).
35
31
  */
36
32
  type ValidationRuleDefinition<TParams extends ValidationParams = ValidationParams, TValue = unknown, TData extends Record<string, unknown> = Record<string, unknown>> = {
@@ -40,8 +36,7 @@ type ValidationRuleDefinition<TParams extends ValidationParams = ValidationParam
40
36
  appliesTo?: string[];
41
37
  params?: Field[];
42
38
  defaultMessage: string; /** Runs client-side too. Defaults to `true`; set `false` for async or `req`/`payload`-using rules. */
43
- client?: boolean; /** Default severity when `validate` returns a bare string. Defaults to `error`. */
44
- severity?: ValidationSeverity;
39
+ client?: boolean;
45
40
  validate: ValidationRuleValidate<TParams, TValue, TData>;
46
41
  };
47
42
  /** Erased shape stored in the heterogeneous registry; params re-narrow per matched rule at execution. */
@@ -68,9 +63,8 @@ type AnyValidationRuleDefinition = {
68
63
  params?: Field[];
69
64
  defaultMessage: string;
70
65
  client?: boolean;
71
- severity?: ValidationSeverity;
72
66
  validate: AnyValidationRuleValidate;
73
67
  };
74
68
  //#endregion
75
- export { AnyValidationRuleDefinition, ValidationParams, ValidationRuleDefinition, ValidationRuleResult, ValidationSeverity };
69
+ export { AnyValidationRuleDefinition, ValidationParams, ValidationRuleDefinition, ValidationRuleResult };
76
70
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { keys } from "../translations/keys.js";
2
+ import { asTranslate } from "../translations/server.js";
3
+ //#region src/validation/validateUrl.ts
4
+ /**
5
+ * Payload field validator for URL config fields (signed-webhook `url`, response redirect `url`):
6
+ * unset is fine (the consumer enforces presence where it matters), otherwise the value must parse
7
+ * as an absolute http(s) URL.
8
+ */
9
+ const validateUrl = (value, { req }) => {
10
+ if (typeof value !== "string" || value.length === 0) return true;
11
+ let parsed;
12
+ try {
13
+ parsed = new URL(value);
14
+ } catch {
15
+ return asTranslate(req.t)(keys.validationUrlInvalid);
16
+ }
17
+ return parsed.protocol === "http:" || parsed.protocol === "https:" ? true : asTranslate(req.t)(keys.validationUrlInvalid);
18
+ };
19
+ //#endregion
20
+ export { validateUrl };
21
+
22
+ //# sourceMappingURL=validateUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateUrl.js","names":[],"sources":["../../src/validation/validateUrl.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\nimport { keys } from '../translations/keys'\nimport { asTranslate } from '../translations/server'\n\n/**\n * Payload field validator for URL config fields (signed-webhook `url`, response redirect `url`):\n * unset is fine (the consumer enforces presence where it matters), otherwise the value must parse\n * as an absolute http(s) URL.\n */\nexport const validateUrl = (\n\tvalue: unknown,\n\t{ req }: { data?: unknown; req: PayloadRequest }\n): string | true => {\n\tif (typeof value !== 'string' || value.length === 0) {\n\t\treturn true\n\t}\n\tlet parsed: URL\n\ttry {\n\t\tparsed = new URL(value)\n\t} catch {\n\t\treturn asTranslate(req.t)(keys.validationUrlInvalid)\n\t}\n\treturn parsed.protocol === 'http:' || parsed.protocol === 'https:'\n\t\t? true\n\t\t: asTranslate(req.t)(keys.validationUrlInvalid)\n}\n"],"mappings":";;;;;;;;AASA,MAAa,eACZ,OACA,EAAE,UACiB;CACnB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GACjD,OAAO;CAER,IAAI;CACJ,IAAI;EACH,SAAS,IAAI,IAAI,KAAK;CACvB,QAAQ;EACP,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,oBAAoB;CACpD;CACA,OAAO,OAAO,aAAa,WAAW,OAAO,aAAa,WACvD,OACA,YAAY,IAAI,CAAC,EAAE,KAAK,oBAAoB;AAChD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@10x-media/form-builder",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.21",
4
4
  "description": "End-to-end forms platform for Payload: author, validate, render, collect, aggregate, and act.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -62,11 +62,17 @@
62
62
  "LICENSE"
63
63
  ],
64
64
  "peerDependencies": {
65
- "@payloadcms/ui": "^3.82.0",
66
- "payload": "^3.82.0",
65
+ "@payloadcms/db-postgres": "^3.82.0",
66
+ "@payloadcms/ui": "^3.83.0",
67
+ "payload": "^3.83.0",
67
68
  "react": "^19.0.0",
68
69
  "react-dom": "^19.0.0"
69
70
  },
71
+ "peerDependenciesMeta": {
72
+ "@payloadcms/db-postgres": {
73
+ "optional": true
74
+ }
75
+ },
70
76
  "dependencies": {
71
77
  "@standard-schema/spec": "^1.0.0"
72
78
  },
@@ -74,6 +80,7 @@
74
80
  "@axe-core/playwright": "^4.11.3",
75
81
  "@payloadcms/db-mongodb": "3.85.0",
76
82
  "@payloadcms/db-postgres": "3.85.0",
83
+ "@payloadcms/richtext-lexical": "3.85.0",
77
84
  "@payloadcms/ui": "3.85.0",
78
85
  "@playwright/test": "1.60.0",
79
86
  "@testing-library/jest-dom": "^6.6.3",
@@ -83,6 +90,7 @@
83
90
  "@types/react-dom": "19.2.3",
84
91
  "axe-core": "^4.12.1",
85
92
  "jsdom": "^25.0.1",
93
+ "msw": "^2.14.6",
86
94
  "payload": "3.85.0",
87
95
  "playwright": "1.60.0",
88
96
  "react": "19.2.6",
@@ -93,8 +101,8 @@
93
101
  "vitest": "4.1.7",
94
102
  "@10x-media/payload-test-harness": "0.0.0",
95
103
  "@10x-media/tsdown-config": "0.0.0",
96
- "@10x-media/vitest-config": "0.0.0",
97
- "@10x-media/tsconfig": "0.0.0"
104
+ "@10x-media/tsconfig": "0.0.0",
105
+ "@10x-media/vitest-config": "0.0.0"
98
106
  },
99
107
  "publishConfig": {
100
108
  "access": "public"
@@ -108,7 +116,7 @@
108
116
  "test": "vitest run",
109
117
  "test:unit": "vitest run src",
110
118
  "test:int": "vitest run tests/int",
111
- "test:matrix": "DB_MATRIX=mongo vitest run tests/int/matrix.int.spec.ts && DB_MATRIX=postgres vitest run tests/int/matrix.int.spec.ts",
119
+ "test:matrix": "DB_MATRIX=mongo vitest run tests/int/matrix.int.spec.ts tests/int/messageResponse.int.spec.ts tests/int/pollAllowChange.int.spec.ts tests/int/pollAutoClose.int.spec.ts tests/int/pollVotes.int.spec.ts && DB_MATRIX=postgres vitest run tests/int/matrix.int.spec.ts tests/int/messageResponse.int.spec.ts tests/int/pollAllowChange.int.spec.ts tests/int/pollAutoClose.int.spec.ts tests/int/pollVotes.int.spec.ts",
112
120
  "test:container": "TEST_DB=container DB_MATRIX=mongo vitest run tests/int/matrix.int.spec.ts && TEST_DB=container DB_MATRIX=postgres vitest run tests/int/matrix.int.spec.ts",
113
121
  "test:e2e": "bash scripts/e2e.sh",
114
122
  "dev": "pnpm --filter @10x-media/form-builder-dev dev",