@cogenta/forms 0.2.4

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 (54) hide show
  1. package/LICENSE +373 -0
  2. package/dist/anti-abuse.d.ts +16 -0
  3. package/dist/anti-abuse.d.ts.map +1 -0
  4. package/dist/anti-abuse.js +58 -0
  5. package/dist/anti-abuse.js.map +1 -0
  6. package/dist/captcha.d.ts +18 -0
  7. package/dist/captcha.d.ts.map +1 -0
  8. package/dist/captcha.js +69 -0
  9. package/dist/captcha.js.map +1 -0
  10. package/dist/conditions.d.ts +6 -0
  11. package/dist/conditions.d.ts.map +1 -0
  12. package/dist/conditions.js +52 -0
  13. package/dist/conditions.js.map +1 -0
  14. package/dist/csv.d.ts +10 -0
  15. package/dist/csv.d.ts.map +1 -0
  16. package/dist/csv.js +56 -0
  17. package/dist/csv.js.map +1 -0
  18. package/dist/file-field.d.ts +64 -0
  19. package/dist/file-field.d.ts.map +1 -0
  20. package/dist/file-field.js +169 -0
  21. package/dist/file-field.js.map +1 -0
  22. package/dist/index.d.ts +18 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +12 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/ip.d.ts +12 -0
  27. package/dist/ip.d.ts.map +1 -0
  28. package/dist/ip.js +15 -0
  29. package/dist/ip.js.map +1 -0
  30. package/dist/notify.d.ts +52 -0
  31. package/dist/notify.d.ts.map +1 -0
  32. package/dist/notify.js +113 -0
  33. package/dist/notify.js.map +1 -0
  34. package/dist/rows.d.ts +13 -0
  35. package/dist/rows.d.ts.map +1 -0
  36. package/dist/rows.js +72 -0
  37. package/dist/rows.js.map +1 -0
  38. package/dist/store.d.ts +71 -0
  39. package/dist/store.d.ts.map +1 -0
  40. package/dist/store.js +509 -0
  41. package/dist/store.js.map +1 -0
  42. package/dist/tables.d.ts +21 -0
  43. package/dist/tables.d.ts.map +1 -0
  44. package/dist/tables.js +131 -0
  45. package/dist/tables.js.map +1 -0
  46. package/dist/types.d.ts +181 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +56 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/validate.d.ts +20 -0
  51. package/dist/validate.d.ts.map +1 -0
  52. package/dist/validate.js +353 -0
  53. package/dist/validate.js.map +1 -0
  54. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,UAAU,EACV,KAAK,EAEL,GAAG,EACH,SAAS,GACV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAgBpC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,eAAe,CAAA;AAEtB,iEAAiE;AACjE,4EAA4E;AAC5E,4EAA4E;AAC5E,yDAAyD;AACzD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAA;AAE/C,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAC/B,MAAM,oBAAoB,GAAG,6CAA6C,CAAA;AAC1E,MAAM,qBAAqB,GAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AACrE,MAAM,eAAe,GAAsB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC7D,MAAM,mBAAmB,GAAoC,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AAChG,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAClC,2EAA2E;AAC3E,uEAAuE;AACvE,mEAAmE;AACnE,kEAAkE;AAClE,4EAA4E;AAC5E,yCAAyC;AACzC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAEjC,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG;SACP,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC;AAwBD,SAAS,eAAe,CAAI,KAAc,EAAE,IAAY,EAAE,QAAW;IACnE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAA;IAC1E,OAAO,MAAM,CAAI,KAAK,EAAE,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;QACnC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC;QACtC,MAAM,EAAE,MAAM,CAAiC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;QACzE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;QAClF,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3C,YAAY,EAAE,MAAM,CAAoB,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAC;QAChF,aAAa,EAAE,MAAM,CAAsB,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAC;QACnF,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC;QACtD,KAAK,EAAE,eAAe,CAAgC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;QAClF,cAAc,EAAE,eAAe,CAC7B,GAAG,CAAC,eAAe,EACnB,sBAAsB,EACtB,EAAE,CACH;QACD,OAAO,EAAE,eAAe,CAAoB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC;QACzF,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC;QACpD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC;KACrD,CAAA;AACH,CAAC;AAeD,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC;QACjD,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC;QACvD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,wBAAwB,CAAC;QACzD,QAAQ,EAAE,MAAM,CAA6B,GAAG,CAAC,aAAa,EAAE,0BAA0B,CAAC;QAC3F,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAyB;QACvE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QACnC,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;QACtC,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,yBAAyB,CAAC;KACjE,CAAA;AACH,CAAC;AAWD,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,oBAAoB,CAAC;QAC7D,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;QACvC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC;QAC1D,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC;KACrD,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,YAAY,CAAC;QACtB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kBAAkB,IAAI,IAAI;QACnC,IAAI,EAAE,0CAA0C;KACjD,CAAC,CAAA;AACJ,CAAC;AAED,iGAAiG;AACjG,SAAS,mBAAmB,CAAC,KAAiD;IAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChD,OAAQ,KAAuB,CAAC,QAAQ,CAAA;AAC1C,CAAC;AAED,0GAA0G;AAC1G,SAAS,sBAAsB,CAAC,UAA0B,EAAE,WAAmB;IAC7E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAA;IACjF,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAA;IACnE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAiFD,MAAM,UAAU,eAAe,CAAC,EAAkB,EAAE,GAAG,GAAiB,IAAI,CAAC,GAAG;IAC9E,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAA;IACpB,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;IAExD,KAAK,UAAU,iBAAiB,CAAC,EAAU;QACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,gBAAgB,eAAe,EAAE,EAAE,CACxD,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,UAAU,uBAAuB,CAAC,IAAY;QACjD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,gBAAgB,iBAAiB,IAAI,EAAE,CAC5D,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,WAAW,GAAwB;QACvC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,6BAA6B;oBACtC,IAAI,EAAE,0DAA0D;iBACjE,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,IAAI,IAAI,qDAAqD;oBACtE,IAAI,EAAE,0BAA0B;iBACjC,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClE,MAAM,IAAI,YAAY,CAAC;wBACrB,IAAI,EAAE,yBAAyB;wBAC/B,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,6BAA6B;wBACpD,IAAI,EAAE,eAAe,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;qBACpD,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YACtC,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YAClD,sBAAsB,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;YAClD,qBAAqB,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,CAAA;YAEvD,IAAI,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,iBAAiB,IAAI,mBAAmB;oBACjD,IAAI,EAAE,qDAAqD;iBAC5D,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACrB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;sBACF,gBAAgB;;;;kBAIpB,EAAE,KAAK,IAAI,KAAK,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;kBAC5D,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,mBAAmB,IAAI,oBAAoB;kBACvF,KAAK,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;kBACrE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,IAAI,qBAAqB,CAAC;kBAC5D,KAAK,CAAC,UAAU,IAAI,mBAAmB,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;kBAC7E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;kBAC1C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;YAE9E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE,wDAAwD;iBAC/D,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,uBAAuB;QAEnC,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,gBAAgB,2BAA2B,CAChE,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,oBAAoB,EAAE,IAAI;oBACnC,IAAI,EAAE,2BAA2B;iBAClC,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAA;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC/B,IAAI,CAAE,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAClE,MAAM,IAAI,YAAY,CAAC;4BACrB,IAAI,EAAE,yBAAyB;4BAC/B,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,6BAA6B;4BACpD,IAAI,EAAE,eAAe,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;yBACpD,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;gBACD,wBAAwB,CAAC,UAAU,CAAC,CAAA;YACtC,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAA;YAC/C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YAC1C,CAAC;YACD,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAA;YAC1E,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS;gBAAE,sBAAsB,CAAC,kBAAkB,CAAC,CAAA;YAClF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAA;YACrD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;gBAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;YAEnE,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAA;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC/B,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,YAAY,CAAC;wBACrB,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,IAAI,QAAQ,qDAAqD;wBAC1E,IAAI,EAAE,0BAA0B;qBACjC,CAAC,CAAA;gBACJ,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAA;gBACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,YAAY,CAAC;wBACrB,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,iBAAiB,QAAQ,mBAAmB;wBACrD,IAAI,EAAE,0BAA0B;qBACjC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;iBACP,gBAAgB;mBACd,QAAQ;oBACP,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;qBAC5B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;qBAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;mCAC9B,KAAK,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB;0BAClE,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU;4BACrE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC;4BAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,CAAC;0BAC/D,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU;oBAC7C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;8BACf,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;sBAC1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;yBACxB,EAAE;qBACN,EAAE,EAAE,CAAC,CAAA;YAEpB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,oBAAoB,EAAE,IAAI;oBACnC,IAAI,EAAE,2BAA2B;iBAClC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,gBAAgB,oBAAoB,EAAE,EAAE,CAAC,CAAA;YAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,gBAAgB,eAAe,EAAE,EAAE,CAAC,CAAA;QACvE,CAAC;QAED,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,oBAAoB,EAAE,IAAI;oBACnC,IAAI,EAAE,2BAA2B;iBAClC,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,SAAS,GAAG,GAAG,QAAQ,CAAC,IAAI,OAAO,CAAA;YACvC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,OAAO,CAAC,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC3D,SAAS,GAAG,GAAG,QAAQ,CAAC,IAAI,SAAS,MAAM,EAAE,CAAA;gBAC7C,MAAM,IAAI,CAAC,CAAA;YACb,CAAC;YAED,OAAO,WAAW,CAAC,MAAM,CAAC;gBACxB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,SAAS;gBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,0DAA0D;gBAC1D,mEAAmE;gBACnE,4DAA4D;gBAC5D,oDAAoD;gBACpD,MAAM,EAAE,KAAK;gBACb,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;gBACjD,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;IAED,KAAK,UAAU,iBAAiB,CAAC,EAAU;QACzC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,gBAAgB,eAAe,EAAE,EAAE,CACxD,CAAA;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,WAAW,GAAwB;QACvC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC/B,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAA;YACtD,IAAI,UAAU,KAAK,IAAI;gBAAE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAA;YAEpD,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;YAEhE,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACrB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;sBACF,gBAAgB;;kBAEpB,EAAE,KAAK,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;kBAC7E,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK;kBAC5C,OAAO,CAAC,EAAE,IAAI,IAAI,KAAK,OAAO,CAAC,QAAQ,IAAI,IAAI,KAAK,OAAO,CAAC,SAAS,IAAI,IAAI,KAAK,EAAE,GAAG,CAAC,CAAA;YAEpG,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,gCAAgC;oBACzC,IAAI,EAAE,wDAAwD;iBAC/D,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,IAAI,EAAE,iBAAiB;QAEvB,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAA;YAChD,MAAM,OAAO,GAAkB,EAAE,CAAA;YACjC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAChF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,kBAAkB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YACrF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,mBAAmB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAClF,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAA,mBAAmB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;YAE9E,IAAI,KAAK,GAAgB,SAAS,CAAC,EAAE,CAAC,CAAA;YACtC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,GAAG,KAAK,QAAQ,MAAM,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;YACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,EAAE,CAAA;YAC9B,sEAAsE;YACtE,iEAAiE;YACjE,qEAAqE;YACrE,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;YAE3D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,gBAAgB,IAAI,KAAK,qCAAqC,QAAQ,EAAE,CAC7F,CAAA;YACD,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAC5C,IAAI,QAAQ;gBAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;YAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACnD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/F,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;YAC/B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,IAAI,MAAM,+BAA+B;oBAClD,IAAI,EAAE,eAAe,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBACvD,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,UAAU,gBAAgB,iBAAiB,MAAM,eAAe,EAAE,EAAE,CAAC,CAAA;YACvF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,0BAA0B,EAAE,IAAI;oBACzC,IAAI,EAAE,mCAAmC;iBAC1C,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,IAAI,MAAM,+BAA+B;oBAClD,IAAI,EAAE,eAAe,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBACvD,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,UAAU,gBAAgB,iBAAiB,MAAM,eAAe,EAAE,EAAE,CACxE,CAAA;gBACD,KAAK,IAAI,MAAM,CAAC,YAAY,CAAA;YAC9B,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,UAAU,0BAA0B,EAAE,EAAE,CAAC,CAAA;YAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,gBAAgB,eAAe,EAAE,EAAE,CAAC,CAAA;QACvE,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACxB,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,UAAU,0BAA0B,EAAE,EAAE,CAAC,CAAA;gBAC1E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,gBAAgB,eAAe,EAAE,EAAE,CAAC,CAAA;gBACpF,KAAK,IAAI,MAAM,CAAC,YAAY,CAAA;YAC9B,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,6BAA6B,gBAAgB,mBAAmB,KAAK,EAAE,CAC3E,CAAA;YACD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAA;QACtD,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAC7C,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAgB,GAAG,CAAA,iBAAiB,gBAAgB,EAAE,CAAC,CAAA;YACpF,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAA;YACzD,MAAM,OAAO,GAAqB,EAAE,CAAA;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;gBACxC,IAAI,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;gBACvD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;oBACxD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACnB,UAAU,GAAG,KAAK,CAAA;wBAClB,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;oBAC/C,CAAC;gBACH,CAAC;gBACD,MAAM,KAAK,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;gBAC3F,IAAI,KAAK,KAAK,UAAU;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACpD,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,UAAU,0BAA0B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;gBAChF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,gBAAgB,eAAe,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;gBAC1F,KAAK,IAAI,MAAM,CAAC,YAAY,CAAA;YAC9B,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,YAAY,EAAE,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAA;YACtC,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;gBACvE,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,KAAK,CAClC,GAAG,CAAA,kBAAkB,gBAAgB,oBAAoB,IAAI,CAAC,EAAE,uBAAuB,MAAM,EAAE,CAChG,CAAA;gBACD,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;oBACrC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA,eAAe,UAAU,0BAA0B,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;gBAChF,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,eAAe,gBAAgB,oBAAoB,IAAI,CAAC,EAAE,uBAAuB,MAAM,EAAE,CAC7F,CAAA;gBACD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAA;YAC/B,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,CAAA;QACnB,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAA;YACxD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,0BAA0B,YAAY,IAAI;oBACnD,IAAI,EAAE,2BAA2B;iBAClC,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YAC3B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,yBAAyB;oBAClC,IAAI,EAAE,yCAAyC;iBAChD,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACrB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;YACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAA;sBACF,UAAU;kBACd,EAAE,KAAK,YAAY,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,KAAK,OAAO,KAAK,EAAE,GAAG,CAAC,CAAA;YACrF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAU,GAAG,CAAA,iBAAiB,UAAU,eAAe,EAAE,EAAE,CAAC,CAAA;YACzF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,IAAI,YAAY,CAAC;oBACrB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE,wDAAwD;iBAC/D,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;QAED,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,GAAG,CAAA,iBAAiB,UAAU,0BAA0B,YAAY,0BAA0B,CAC/F,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACpC,CAAC;KACF,CAAA;IAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;AACrC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type DatabaseHandle } from '@cogenta/core';
2
+ /**
3
+ * Every table contract G owns, prefixed `cogenta_forms_` for the same reason
4
+ * `@cogenta/commerce` prefixes its own: a site's content collections are
5
+ * named after what *it* declares, so a site that also has a `contact`
6
+ * collection must not collide with the `contact` form definition.
7
+ */
8
+ export declare const TABLES: {
9
+ readonly definitions: 'cogenta_forms_definitions';
10
+ readonly submissions: 'cogenta_forms_submissions';
11
+ readonly autoresponderSends: 'cogenta_forms_autoresponder_sends';
12
+ readonly submissionNotes: 'cogenta_forms_submission_notes';
13
+ };
14
+ /**
15
+ * Creates everything this package owns, idempotently — the same
16
+ * `create table if not exists` shape `ensureCommerceTables` uses, and for
17
+ * the same reason: contract G is not part of contract A's migration engine,
18
+ * so a site that never builds a form never pays for these tables.
19
+ */
20
+ export declare function ensureFormsTables(db: DatabaseHandle): Promise<void>;
21
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,eAAe,CAAA;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,MAAM;aACjB,WAAW,EAAE,2BAA2B;aACxC,WAAW,EAAE,2BAA2B;aACxC,kBAAkB,EAAE,mCAAmC;aACvD,eAAe,EAAE,gCAAgC;CACzC,CAAA;AAcV;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFzE"}
package/dist/tables.js ADDED
@@ -0,0 +1,131 @@
1
+ import { identifier, sql, unsafeRaw, } from '@cogenta/core';
2
+ /**
3
+ * Every table contract G owns, prefixed `cogenta_forms_` for the same reason
4
+ * `@cogenta/commerce` prefixes its own: a site's content collections are
5
+ * named after what *it* declares, so a site that also has a `contact`
6
+ * collection must not collide with the `contact` form definition.
7
+ */
8
+ export const TABLES = {
9
+ definitions: 'cogenta_forms_definitions',
10
+ submissions: 'cogenta_forms_submissions',
11
+ autoresponderSends: 'cogenta_forms_autoresponder_sends',
12
+ submissionNotes: 'cogenta_forms_submission_notes',
13
+ };
14
+ function textColumn(dialect, length) {
15
+ return unsafeRaw(dialect === 'sqlite' ? 'text' : `varchar(${length})`);
16
+ }
17
+ function booleanColumn(dialect) {
18
+ return unsafeRaw(dialect === 'postgres' ? 'boolean' : 'tinyint');
19
+ }
20
+ function longTextColumn() {
21
+ return unsafeRaw('text');
22
+ }
23
+ /**
24
+ * Creates everything this package owns, idempotently — the same
25
+ * `create table if not exists` shape `ensureCommerceTables` uses, and for
26
+ * the same reason: contract G is not part of contract A's migration engine,
27
+ * so a site that never builds a form never pays for these tables.
28
+ */
29
+ export async function ensureFormsTables(db) {
30
+ const d = db.dialect;
31
+ const t255 = textColumn(d, 255);
32
+ const t64 = textColumn(d, 64);
33
+ const bool = booleanColumn(d);
34
+ const long = longTextColumn();
35
+ await db.query(sql `
36
+ create table if not exists ${identifier(TABLES.definitions, d)} (
37
+ id ${t64} not null primary key,
38
+ name ${t255} not null unique,
39
+ label ${t255} not null,
40
+ -- The field list, serialised. Contract G's own vocabulary (nine kinds,
41
+ -- fixed), not a client-defined free-form JSON blob the way fiche 03
42
+ -- warns against for contract A's json field — this is this package's
43
+ -- own closed schema, validated by validate.ts on every write.
44
+ fields ${long} not null,
45
+ active ${bool} not null,
46
+ confirmation_message ${long} not null,
47
+ redirect_to ${t255},
48
+ notify_emails ${long} not null,
49
+ autoresponder ${long} not null,
50
+ retain_days ${t64} not null,
51
+ created_at ${t64} not null,
52
+ updated_at ${t64} not null
53
+ )`);
54
+ await db.query(sql `
55
+ create table if not exists ${identifier(TABLES.submissions, d)} (
56
+ id ${t64} not null primary key,
57
+ form_id ${t64} not null,
58
+ form_name ${t255} not null,
59
+ values_json ${long} not null,
60
+ consents_json ${long} not null,
61
+ status ${t64} not null,
62
+ -- sha256 hex of the submitting IP. Never the address itself.
63
+ ip_hash ${t64},
64
+ referrer ${t255},
65
+ user_agent ${t255},
66
+ submitted_at ${t64} not null
67
+ )`);
68
+ // Rate-limits the autoresponder per recipient address (fiche 16 § pièges:
69
+ // "l'accusé de réception est un relais de spam potentiel"), independent of
70
+ // the generic per-IP submission limiter — a script rotating source IPs but
71
+ // reusing a victim's e-mail must still be capped.
72
+ await db.query(sql `
73
+ create table if not exists ${identifier(TABLES.autoresponderSends, d)} (
74
+ id ${t64} not null primary key,
75
+ email ${t255} not null,
76
+ sent_at ${t64} not null
77
+ )`);
78
+ // Fiche 47 task 8 — an operator's own note on a submission, never shown to
79
+ // the visitor and never exported: a separate table (not a column on the
80
+ // submission row) because a submission can carry several, each with its
81
+ // own author and timestamp.
82
+ await db.query(sql `
83
+ create table if not exists ${identifier(TABLES.submissionNotes, d)} (
84
+ id ${t64} not null primary key,
85
+ submission_id ${t64} not null,
86
+ author_id ${t64},
87
+ author_label ${t255} not null,
88
+ body ${long} not null,
89
+ created_at ${t64} not null
90
+ )`);
91
+ // Fiche 47 tasks 2/4/10 — three columns added to an already-shipped table.
92
+ // `create table if not exists` above is a no-op against a database that
93
+ // predates them, so they are grown in place the same way every other
94
+ // in-place table growth in this codebase is (`menu-tables.ts`'s own
95
+ // comment says why): failure here means the column already exists, the
96
+ // only realistic cause once this function has already run once, so it is
97
+ // swallowed exactly like the index statements below.
98
+ const columnStatements = [
99
+ sql `alter table ${identifier(TABLES.definitions, d)} add column ${identifier('steps', d)} ${long}`,
100
+ sql `alter table ${identifier(TABLES.definitions, d)} add column ${identifier('notify_channels', d)} ${long}`,
101
+ sql `alter table ${identifier(TABLES.definitions, d)} add column ${identifier('captcha', d)} ${long}`,
102
+ ];
103
+ for (const statement of columnStatements) {
104
+ await db.query(statement).catch(() => undefined);
105
+ }
106
+ await ensureIndexes(db);
107
+ }
108
+ async function ensureIndexes(db) {
109
+ const d = db.dialect;
110
+ const wanted = [
111
+ ['cogenta_forms_submissions_form', TABLES.submissions, 'form_id'],
112
+ ['cogenta_forms_submissions_status', TABLES.submissions, 'status'],
113
+ ['cogenta_forms_submissions_submitted_at', TABLES.submissions, 'submitted_at'],
114
+ ['cogenta_forms_autoresponder_email', TABLES.autoresponderSends, 'email'],
115
+ ['cogenta_forms_notes_submission', TABLES.submissionNotes, 'submission_id'],
116
+ ];
117
+ for (const [name, table, column] of wanted) {
118
+ const statement = sql `create index ${identifier(name, d)} on ${identifier(table, d)} (${identifier(column, d)})`;
119
+ try {
120
+ await db.query(d === 'mysql'
121
+ ? statement
122
+ : sql `create index if not exists ${identifier(name, d)} on ${identifier(table, d)} (${identifier(column, d)})`);
123
+ }
124
+ catch {
125
+ // Already there — MySQL before 8.0.29 has no `if not exists` for
126
+ // indexes, so a duplicate-index error here is the only failure this
127
+ // swallows (same discipline as `ensureCommerceTables`).
128
+ }
129
+ }
130
+ }
131
+ //# sourceMappingURL=tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Contract G (`forms@1.0`, ADR-0026): form definitions and their submissions.
3
+ *
4
+ * A separate domain from contract A, for the same reason ADR-0024 (commerce)
5
+ * and ADR-0025 (comments) gave: a submission is a fact recorded, not a piece
6
+ * of editorial content — no translation, no draft, no version, and a volume
7
+ * and threat model (a public write route, an autoresponder that can become a
8
+ * spam relay) contract A has no reason to carry.
9
+ */
10
+ /**
11
+ * The ten field kinds contract G now names. `file` was ADR-0026's own
12
+ * deliberate renoncement ("pour éviter d'ouvrir la surface upload/antivirus
13
+ * sans besoin prouvé") — reopened on 2026-08-26, in direct conversation with
14
+ * the human, once it became a named, chiffré task (fiche 47 §8): a
15
+ * documented change of position on a contract that is acted but not figured
16
+ * (ADR-0026), not a fresh ADR in the strict sense.
17
+ */
18
+ export declare const FORM_FIELD_KINDS: readonly ['text', 'longText', 'email', 'phone', 'number', 'date', 'choiceSingle', 'choiceMulti', 'consent', 'file'];
19
+ export type FormFieldKind = (typeof FORM_FIELD_KINDS)[number];
20
+ /** The operators fiche 47 task 1's conditional logic offers — deliberately small: a visibility gate, not a rules engine. */
21
+ export declare const FORM_CONDITION_OPERATORS: readonly ['equals', 'notEquals', 'contains', 'isEmpty', 'isNotEmpty'];
22
+ export type FormConditionOperator = (typeof FORM_CONDITION_OPERATORS)[number];
23
+ /**
24
+ * "Un champ conditionnel n'apparaît, n'est requis et n'est validé que si sa
25
+ * condition est remplie" (fiche 47 §5) — evaluated against another field's
26
+ * own *raw, submitted* value, server-side, on every submission. `value` is
27
+ * unused (and ignored) for `isEmpty`/`isNotEmpty`.
28
+ */
29
+ export interface FormFieldCondition {
30
+ /** The name of the field this condition reads. Must be a different field on the same form (checked at definition time, `validateDefinitionFields`). */
31
+ readonly field: string;
32
+ readonly operator: FormConditionOperator;
33
+ readonly value?: string;
34
+ }
35
+ /** The file categories a `file` field can be restricted to — closed vocabulary, sniffed from bytes, never trusted from a filename or declared MIME type. See `file-field.ts`. */
36
+ export declare const FORM_FILE_CATEGORIES: readonly ['image', 'pdf', 'document', 'text'];
37
+ export type FormFileCategory = (typeof FORM_FILE_CATEGORIES)[number];
38
+ /** What a validated `file` field answer actually stores — never the bytes themselves (those live in a `StorageDriver`, addressed by `storageKey`, exactly like `@cogenta/core`'s media pipeline). */
39
+ export interface FormFileValue {
40
+ readonly filename: string;
41
+ readonly mimeType: string;
42
+ readonly size: number;
43
+ readonly storageKey: string;
44
+ }
45
+ /** One field of a form definition. */
46
+ export interface FormFieldDefinition {
47
+ /** Stable, used as the submission's value key. Never renamed in place by the builder — a rename is a new field, the old answers keep their old key. */
48
+ readonly name: string;
49
+ readonly label: string;
50
+ readonly kind: FormFieldKind;
51
+ readonly required: boolean;
52
+ readonly help?: string;
53
+ /** `choiceSingle`/`choiceMulti` only — the offered values, in display order. */
54
+ readonly choices?: readonly string[];
55
+ /**
56
+ * `consent` only — the exact wording shown next to the checkbox, e.g. "I
57
+ * agree to be contacted about this enquiry." This is what gets copied,
58
+ * verbatim and timestamped, onto every submission that ticks it (GDPR:
59
+ * "le texte au moment du recueil compte, pas celui d'aujourd'hui").
60
+ */
61
+ readonly consentText?: string;
62
+ /** Task 1 — when set, this field is only required/validated when the condition holds against the rest of the submission. Absent means always visible, the pre-fiche-47 behaviour. */
63
+ readonly showIf?: FormFieldCondition;
64
+ /** `file` only — restricts which sniffed byte categories this field accepts. Absent means every category in `FORM_FILE_CATEGORIES`. */
65
+ readonly acceptCategories?: readonly FormFileCategory[];
66
+ /** `file` only — overrides `DEFAULT_FORM_FILE_MAX_BYTES`, itself capped by `FORM_FILE_HARD_MAX_BYTES` regardless of what is configured here. */
67
+ readonly maxSizeBytes?: number;
68
+ }
69
+ /**
70
+ * Task 2 — one page of a multi-step form. Every field must belong to exactly
71
+ * one step (checked by `validateDefinitionFields`); steps render as chained
72
+ * `<form>`s with no client framework. Real validation is deferred to the
73
+ * final step's submit — see `forms-router.ts` — so a partial, in-progress
74
+ * multi-step fill is never itself checked against required-ness.
75
+ */
76
+ export interface FormStepDefinition {
77
+ readonly name: string;
78
+ readonly label: string;
79
+ readonly fieldNames: readonly string[];
80
+ }
81
+ /**
82
+ * Task 4 — one extra channel a submission is announced on, beyond
83
+ * `notifyEmails`. `channel` names an adapter already configured in this
84
+ * site's `ChannelRegistry` (e.g. `slack`/`discord`/`telegram`/`webhook`);
85
+ * `target` is that adapter's own target id (a Slack/Discord channel id, a
86
+ * Telegram chat id, a webhook URL) — opaque to this package, exactly as
87
+ * `ChannelTarget.id` already is to `@cogenta/channels` itself.
88
+ */
89
+ export interface FormNotifyChannel {
90
+ readonly channel: string;
91
+ readonly target: string;
92
+ }
93
+ /**
94
+ * Task 10 — CAPTCHA, optional per form, Cloudflare Turnstile only (a single
95
+ * HTTP verification call — R9: no client SDK dependency this package pulls
96
+ * in). Never on by default (fiche 47 § pièges: "un CAPTCHA ne doit jamais
97
+ * devenir obligatoire par défaut").
98
+ */
99
+ export interface FormCaptchaConfig {
100
+ readonly enabled: boolean;
101
+ readonly siteKey?: string;
102
+ readonly secretKey?: string;
103
+ }
104
+ export type FormSubmissionStatus = 'new' | 'read' | 'archived' | 'spam';
105
+ export interface AutoresponderConfig {
106
+ readonly enabled: boolean;
107
+ readonly subject?: string;
108
+ readonly body?: string;
109
+ }
110
+ export interface FormDefinition {
111
+ readonly id: string;
112
+ /** URL-safe, unique, used in the public route and the submit endpoint (`/forms/{name}`, `POST /api/forms/{name}/submit`). */
113
+ readonly name: string;
114
+ readonly label: string;
115
+ readonly fields: readonly FormFieldDefinition[];
116
+ readonly active: boolean;
117
+ /** Shown on the public page after a successful submission when `redirectTo` is unset. */
118
+ readonly confirmationMessage: string;
119
+ /** When set, a successful submission redirects here instead of showing `confirmationMessage`. */
120
+ readonly redirectTo: string | null;
121
+ /** Where the "new submission" notification e-mail goes. Empty means no notification is sent. */
122
+ readonly notifyEmails: readonly string[];
123
+ readonly autoresponder: AutoresponderConfig;
124
+ /** How long a submission is kept before `purgeExpired` removes it. GDPR retention (ADR-0022's `retainDays` model, applied to submissions). */
125
+ readonly retainDays: number;
126
+ /** Task 2 — absent or empty means single-page, the pre-fiche-47 behaviour. */
127
+ readonly steps: readonly FormStepDefinition[];
128
+ /** Task 4 — extra channels a submission is announced on, beyond `notifyEmails`. */
129
+ readonly notifyChannels: readonly FormNotifyChannel[];
130
+ /** Task 10 — off by default (`enabled: false`), per fiche § pièges. */
131
+ readonly captcha: FormCaptchaConfig;
132
+ readonly createdAt: string;
133
+ readonly updatedAt: string;
134
+ }
135
+ export interface CreateFormDefinitionInput {
136
+ readonly name: string;
137
+ readonly label: string;
138
+ readonly fields: readonly FormFieldDefinition[];
139
+ readonly active?: boolean;
140
+ readonly confirmationMessage?: string;
141
+ readonly redirectTo?: string | null;
142
+ readonly notifyEmails?: readonly string[];
143
+ readonly autoresponder?: AutoresponderConfig;
144
+ readonly retainDays?: number;
145
+ readonly steps?: readonly FormStepDefinition[];
146
+ readonly notifyChannels?: readonly FormNotifyChannel[];
147
+ readonly captcha?: FormCaptchaConfig;
148
+ }
149
+ export type UpdateFormDefinitionInput = Partial<CreateFormDefinitionInput>;
150
+ /** The consent actually recorded on one submission — the wording as it stood at the moment, not a live reference to the field definition. */
151
+ export interface RecordedConsent {
152
+ readonly fieldName: string;
153
+ readonly text: string;
154
+ readonly agreedAt: string;
155
+ }
156
+ export interface FormSubmission {
157
+ readonly id: string;
158
+ readonly formId: string;
159
+ readonly formName: string;
160
+ readonly values: Readonly<Record<string, string | readonly string[] | FormFileValue>>;
161
+ readonly consents: readonly RecordedConsent[];
162
+ readonly status: FormSubmissionStatus;
163
+ /** sha256 of the submitting IP — never the address itself (fiche 16 acceptance criterion: "Aucune adresse IP en clair"). */
164
+ readonly ipHash: string | null;
165
+ readonly referrer: string | null;
166
+ readonly userAgent: string | null;
167
+ readonly submittedAt: string;
168
+ }
169
+ /** Task 8 — an operator's own note on a submission, never shown to the visitor, never exported. */
170
+ export interface FormSubmissionNote {
171
+ readonly id: string;
172
+ readonly submissionId: string;
173
+ readonly authorId: string | null;
174
+ readonly authorLabel: string;
175
+ readonly body: string;
176
+ readonly createdAt: string;
177
+ }
178
+ export declare function isFormFileValue(value: unknown): value is FormFileValue;
179
+ /** The one string value most forms actually collect an e-mail through, for the GDPR search (fiche 16 task 7's minimum: "une recherche par e-mail"). */
180
+ export declare function emailValueOf(submission: FormSubmission, fields: readonly FormFieldDefinition[]): string | null;
181
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Contract G (`forms@1.0`, ADR-0026): form definitions and their submissions.
3
+ *
4
+ * A separate domain from contract A, for the same reason ADR-0024 (commerce)
5
+ * and ADR-0025 (comments) gave: a submission is a fact recorded, not a piece
6
+ * of editorial content — no translation, no draft, no version, and a volume
7
+ * and threat model (a public write route, an autoresponder that can become a
8
+ * spam relay) contract A has no reason to carry.
9
+ */
10
+ /**
11
+ * The ten field kinds contract G now names. `file` was ADR-0026's own
12
+ * deliberate renoncement ("pour éviter d'ouvrir la surface upload/antivirus
13
+ * sans besoin prouvé") — reopened on 2026-08-26, in direct conversation with
14
+ * the human, once it became a named, chiffré task (fiche 47 §8): a
15
+ * documented change of position on a contract that is acted but not figured
16
+ * (ADR-0026), not a fresh ADR in the strict sense.
17
+ */
18
+ export const FORM_FIELD_KINDS = [
19
+ 'text',
20
+ 'longText',
21
+ 'email',
22
+ 'phone',
23
+ 'number',
24
+ 'date',
25
+ 'choiceSingle',
26
+ 'choiceMulti',
27
+ 'consent',
28
+ 'file',
29
+ ];
30
+ /** The operators fiche 47 task 1's conditional logic offers — deliberately small: a visibility gate, not a rules engine. */
31
+ export const FORM_CONDITION_OPERATORS = [
32
+ 'equals',
33
+ 'notEquals',
34
+ 'contains',
35
+ 'isEmpty',
36
+ 'isNotEmpty',
37
+ ];
38
+ /** The file categories a `file` field can be restricted to — closed vocabulary, sniffed from bytes, never trusted from a filename or declared MIME type. See `file-field.ts`. */
39
+ export const FORM_FILE_CATEGORIES = ['image', 'pdf', 'document', 'text'];
40
+ export function isFormFileValue(value) {
41
+ return (typeof value === 'object' &&
42
+ value !== null &&
43
+ typeof value.filename === 'string' &&
44
+ typeof value.mimeType === 'string' &&
45
+ typeof value.size === 'number' &&
46
+ typeof value.storageKey === 'string');
47
+ }
48
+ /** The one string value most forms actually collect an e-mail through, for the GDPR search (fiche 16 task 7's minimum: "une recherche par e-mail"). */
49
+ export function emailValueOf(submission, fields) {
50
+ const emailField = fields.find((field) => field.kind === 'email');
51
+ if (emailField === undefined)
52
+ return null;
53
+ const value = submission.values[emailField.name];
54
+ return typeof value === 'string' && value.trim() !== '' ? value.trim().toLowerCase() : null;
55
+ }
56
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM;IACN,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,cAAc;IACd,aAAa;IACb,SAAS;IACT,MAAM;CACE,CAAA;AAIV,4HAA4H;AAC5H,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,YAAY;CACJ,CAAA;AAgBV,iLAAiL;AACjL,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAU,CAAA;AA4JjF,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ;QAC9D,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ;QAC9D,OAAQ,KAAgC,CAAC,IAAI,KAAK,QAAQ;QAC1D,OAAQ,KAAgC,CAAC,UAAU,KAAK,QAAQ,CACjE,CAAA;AACH,CAAC;AAED,uJAAuJ;AACvJ,MAAM,UAAU,YAAY,CAC1B,UAA0B,EAC1B,MAAsC;IAEtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;IACjE,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7F,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type FormCaptchaConfig, type FormDefinition, type FormFieldDefinition, type FormFileValue, type FormNotifyChannel, type FormStepDefinition, type RecordedConsent } from './types.js';
2
+ export interface ValidatedSubmission {
3
+ readonly values: Readonly<Record<string, string | readonly string[] | FormFileValue>>;
4
+ readonly consents: readonly RecordedConsent[];
5
+ }
6
+ /**
7
+ * Validates a raw submission body against a form's own definition. Rejects
8
+ * any key the definition does not declare — a client cannot smuggle an
9
+ * extra column into what gets stored.
10
+ */
11
+ export declare function validateSubmission(definition: FormDefinition, rawValues: Readonly<Record<string, unknown>>, now?: () => number): ValidatedSubmission;
12
+ /** A definition's own fields must be internally consistent — checked once, at create/update time. */
13
+ export declare function validateDefinitionFields(fields: readonly FormFieldDefinition[]): void;
14
+ /** Task 2 — every field must belong to exactly one step when a form declares any. Absent/empty `steps` means single-page, unchecked here. */
15
+ export declare function validateFormSteps(fields: readonly FormFieldDefinition[], steps: readonly FormStepDefinition[]): void;
16
+ /** Task 4 — a channel/target pair must at least be non-empty text; `@cogenta/api`'s router is what actually knows whether `channel` names a configured adapter. */
17
+ export declare function validateNotifyChannels(channels: readonly FormNotifyChannel[]): void;
18
+ /** Task 10 — enabling the CAPTCHA without both keys is a misconfiguration caught at save time, not at the first anonymous submission. */
19
+ export declare function validateCaptchaConfig(captcha: FormCaptchaConfig): void;
20
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAA;AAoBnB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAA;IACrF,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C;AA0ID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC5C,GAAG,GAAE,MAAM,MAAiB,GAC3B,mBAAmB,CAgCrB;AAED,qGAAqG;AACrG,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAyFrF;AAED,6IAA6I;AAC7I,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,mBAAmB,EAAE,EACtC,KAAK,EAAE,SAAS,kBAAkB,EAAE,GACnC,IAAI,CAiDN;AAED,mKAAmK;AACnK,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI,CAUnF;AAED,yIAAyI;AACzI,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAStE"}