@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.
- package/LICENSE +373 -0
- package/dist/anti-abuse.d.ts +16 -0
- package/dist/anti-abuse.d.ts.map +1 -0
- package/dist/anti-abuse.js +58 -0
- package/dist/anti-abuse.js.map +1 -0
- package/dist/captcha.d.ts +18 -0
- package/dist/captcha.d.ts.map +1 -0
- package/dist/captcha.js +69 -0
- package/dist/captcha.js.map +1 -0
- package/dist/conditions.d.ts +6 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/conditions.js +52 -0
- package/dist/conditions.js.map +1 -0
- package/dist/csv.d.ts +10 -0
- package/dist/csv.d.ts.map +1 -0
- package/dist/csv.js +56 -0
- package/dist/csv.js.map +1 -0
- package/dist/file-field.d.ts +64 -0
- package/dist/file-field.d.ts.map +1 -0
- package/dist/file-field.js +169 -0
- package/dist/file-field.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/ip.d.ts +12 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +15 -0
- package/dist/ip.js.map +1 -0
- package/dist/notify.d.ts +52 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +113 -0
- package/dist/notify.js.map +1 -0
- package/dist/rows.d.ts +13 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +72 -0
- package/dist/rows.js.map +1 -0
- package/dist/store.d.ts +71 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +509 -0
- package/dist/store.js.map +1 -0
- package/dist/tables.d.ts +21 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +131 -0
- package/dist/tables.js.map +1 -0
- package/dist/types.d.ts +181 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +56 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +20 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +353 -0
- package/dist/validate.js.map +1 -0
- 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"}
|
package/dist/tables.d.ts
ADDED
|
@@ -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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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"}
|