arkos 1.0.3-alpha → 1.0.4-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -32
- package/package.json +1 -1
- package/dist/cjs/modules/auth/__tests__/auth.controller.test.js +0 -494
- package/dist/cjs/modules/auth/__tests__/auth.controller.test.js.map +0 -1
- package/dist/cjs/modules/auth/__tests__/auth.service.test.js +0 -470
- package/dist/cjs/modules/auth/__tests__/auth.service.test.js.map +0 -1
- package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js +0 -43
- package/dist/cjs/modules/auth/utils/helpers/__tests__/auth.helpers.test.js.map +0 -1
- package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js +0 -754
- package/dist/cjs/modules/base/utils/helpers/__tests__/base.helpers.test.js.map +0 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +0 -226
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +0 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js +0 -50
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +0 -1
- package/dist/cjs/modules/file-upload/file-upload.service.js +0 -353
- package/dist/cjs/modules/file-upload/file-upload.service.js.map +0 -1
- package/dist/cjs/modules/file-uploader/__tests__/file-uploader.service.test.js +0 -402
- package/dist/cjs/modules/file-uploader/__tests__/file-uploader.service.test.js.map +0 -1
- package/dist/cjs/modules/file-uploader/utils/helpers/__tests__/file-uploader.helpers.test.js +0 -164
- package/dist/cjs/modules/file-uploader/utils/helpers/__tests__/file-uploader.helpers.test.js.map +0 -1
- package/dist/es2020/modules/file-upload/file-upload.controller.js +0 -220
- package/dist/es2020/modules/file-upload/file-upload.controller.js.map +0 -1
- package/dist/es2020/modules/file-upload/file-upload.router.js +0 -44
- package/dist/es2020/modules/file-upload/file-upload.router.js.map +0 -1
- package/dist/es2020/modules/file-upload/file-upload.service.js +0 -345
- package/dist/es2020/modules/file-upload/file-upload.service.js.map +0 -1
- package/dist/types/modules/file-upload/file-upload.controller.d.ts +0 -3
- package/dist/types/modules/file-upload/file-upload.router.d.ts +0 -3
- package/dist/types/modules/file-upload/file-upload.service.d.ts +0 -30
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.helpers.test.js","sourceRoot":"","sources":["../../../../../../../src/modules/base/utils/helpers/__tests__/base.helpers.test.ts"],"names":[],"mappings":";;AAAA,kDAKyB;AAGzB,IAAI,CAAC,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9D,uBAAuB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAClD,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC7B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;iBACtC;aACF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO;gBACL,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aAC7C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE;QAC1C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;CACnB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,GAAG,EAAE,mBAAmB;oBACxB,SAAS,EAAE,gCAAgC;iBAC5C;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,GAAG,EAAE,mBAAmB;wBACxB,SAAS,EAAE,gCAAgC;qBAC5C;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,EAAE,EAAE,KAAK;iBACV;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,EAAE,EAAE,KAAK;qBACV;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,YAAY;iBACnB;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,UAAU;qBACjB;iBACF;gBACD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,OAAO,EAAE;wBACP,IAAI,EAAE,YAAY;qBACnB;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACvF,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,EAAE,EAAE,KAAK;oBACT,GAAG,EAAE,aAAa;oBAClB,SAAS,EAAE,oCAAoC;iBAChD;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,IAAI,EAAE;4BACJ,GAAG,EAAE,aAAa;4BAClB,SAAS,EAAE,oCAAoC;yBAChD;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,EAAE,EAAE,KAAK;oBACT,SAAS,EAAE,SAAS;iBACrB;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,EAAE,EAAE,KAAK;qBACV;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE;oBAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE;iBAC5C;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBACzD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;aACjC,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBACpC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACpF,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aACvD,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBAC1D;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;YAC1F,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE;oBACvC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE;iBACxC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;wBAC5D,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;qBAC7D;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;YAC7F,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE;oBAChC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE;iBACjC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;qBACvB;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;YACjG,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE;oBACpC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE;iBACrC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBACvC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;oBACxC,EAAE,EAAE,EAAE,GAAG,EAAE;oBACX,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE;oBAChC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE;oBAChC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE;iBACrC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;oBAC/D,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACzB,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;iBAClC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL;wBACE,KAAK,EAAE,eAAe;wBACtB,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;wBAChC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;qBAC/B;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL,MAAM,EAAE;wBACN;4BACE,KAAK,EAAE,eAAe;4BACtB,QAAQ,EAAE;gCACR,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;6BAChC;4BACD,IAAI,EAAE;gCACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;6BAClC;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL;wBACE,KAAK,EAAE,eAAe;wBACtB,QAAQ,EAAE;4BACR;gCACE,OAAO,EAAE,aAAa;gCACtB,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,EAAE;6BAC3D;yBACF;qBACF;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL,MAAM,EAAE;wBACN;4BACE,KAAK,EAAE,eAAe;4BACtB,QAAQ,EAAE;gCACR,MAAM,EAAE;oCACN;wCACE,OAAO,EAAE,aAAa;wCACtB,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;qCAClD;iCACF;6BACF;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE;aACV,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI;aACZ,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAEhC,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAEhD,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QAE3C,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAEtD,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAE9C,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAEnC,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QAErD,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC;QAEzB,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,IAAA,iCAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAA,iCAAkB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,IAAA,iCAAkB,EAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAA,iCAAkB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAA,iCAAkB,EAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,CAAC,IAAA,iCAAkB,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAA,iCAAkB,EAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAA,iCAAkB,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAIH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,CACJ,IAAA,qCAAsB,EAAC;YACrB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;SACrD,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,CACJ,IAAA,qCAAsB,EAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,IAAA,qCAAsB,EAAC;YACrB,eAAe,EAAE;gBACf,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBACpC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;aACpD;SACF,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CACJ,IAAA,qCAAsB,EAAC;YACrB,MAAM,EAAE;gBACN,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;aACxB;SACF,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAKrE,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAA,qCAAsB,EAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACvE,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,GAAG,EAAE,mBAAmB;wBACxB,SAAS,EAAE,gCAAgC;qBAC5C;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,GAAG,EAAE,mBAAmB;wBACxB,SAAS,EAAE,gCAAgC;qBAC5C;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,EAAE,EAAE,KAAK;qBACV;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;gBAChD,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,EAAE,EAAE,KAAK;qBACV;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;wBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;wBAClC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE;qBAC5D;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC5C,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;wBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;wBAClC,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE;qBAC5D;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBACpC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBACpC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBACzD;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;iBACzD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBAChC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBAChC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACtB,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBAChC;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAGhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACtB,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;iBAChC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,IAAI,GAAG;gBACX,KAAK,EAAE,SAAS;gBAEhB,QAAQ,EAAE;oBACR,IAAI,EAAE,YAAY;iBACnB;gBAED,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBAC9B;gBAED,QAAQ,EAAE;oBACR,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;iBAClE;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAClD,IAAI,EAAE;oBACJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC7B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;iBACtC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE;oBACR,OAAO,EAAE;wBACP,IAAI,EAAE,YAAY;qBACnB;iBACF;gBAED,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBAC9B;gBAED,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN;4BACE,OAAO,EAAE,aAAa;4BACtB,MAAM,EAAE;gCACN,OAAO,EAAE;oCACP,KAAK,EAAE,kBAAkB;iCAC1B;6BACF;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL;wBACE,KAAK,EAAE,eAAe;wBAEtB,QAAQ,EAAE;4BACR,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;yBAC3C;wBAED,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;qBACvC;iBACF;aACF,CAAC;YAEF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,EAAE;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAEhE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL,MAAM,EAAE;wBACN;4BACE,KAAK,EAAE,eAAe;4BAEtB,QAAQ,EAAE;gCACR,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE;6BAC3C;4BAED,QAAQ,EAAE;gCACR,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;6BACrC;yBACF;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n handleRelationFieldsInBody,\n canBeUsedToConnect,\n isListFieldAnArray,\n isPrismaRelationFormat,\n} from \"../base.helpers\"; // Update this path\n\n// Mock the required helpers\njest.mock(\"../../../../../utils/helpers/models.helpers\", () => ({\n getPrismaModelRelations: jest.fn((type) => {\n if (type === \"Post\") {\n return {\n singular: [{ name: \"category\", type: \"Category\" }],\n list: [\n { name: \"tags\", type: \"Tag\" },\n { name: \"comments\", type: \"Comment\" },\n ],\n };\n }\n if (type === \"User\") {\n return {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n }\n if (type === \"Comment\") {\n return {\n singular: [{ name: \"author\", type: \"User\" }],\n };\n }\n return null;\n }),\n getModelUniqueFields: jest.fn((modelName) => {\n if (modelName === \"Category\") {\n return [{ name: \"name\" }];\n }\n if (modelName === \"Tag\") {\n return [{ name: \"name\" }];\n }\n if (modelName === \"User\") {\n return [{ name: \"email\" }, { name: \"username\" }];\n }\n return [];\n }),\n RelationField: {}, // Add this to satisfy TypeScript if needed\n RelationFields: {}, // Add this to satisfy TypeScript if needed\n}));\n\ndescribe(\"handleRelationFieldsInBody\", () => {\n describe(\"Singular Relations\", () => {\n it(\"should handle create operation for singular relation without id\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n bio: \"Software Engineer\",\n avatarUrl: \"https://example.com/avatar.jpg\",\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n create: {\n bio: \"Software Engineer\",\n avatarUrl: \"https://example.com/avatar.jpg\",\n },\n },\n });\n });\n\n it(\"should handle connect operation for singular relation with only id\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n id: \"123\",\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n connect: {\n id: \"123\",\n },\n },\n });\n });\n\n it(\"should handle connect operation for singular relation with unique field\", () => {\n const body = {\n name: \"John Doe\",\n category: {\n name: \"Technology\",\n },\n };\n\n const relationFields = {\n singular: [\n {\n name: \"category\",\n type: \"Category\",\n },\n ],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n category: {\n connect: {\n name: \"Technology\",\n },\n },\n });\n });\n\n it(\"should handle update operation for singular relation with id and other fields\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n id: \"123\",\n bio: \"Updated Bio\",\n avatarUrl: \"https://example.com/new-avatar.jpg\",\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n update: {\n data: {\n bio: \"Updated Bio\",\n avatarUrl: \"https://example.com/new-avatar.jpg\",\n },\n },\n },\n });\n });\n\n it(\"should handle explicit connect operation with apiAction\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n id: \"123\",\n apiAction: \"connect\",\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n connect: {\n id: \"123\",\n },\n },\n });\n });\n });\n\n describe(\"List Relations\", () => {\n it(\"should handle create operation for list relation items without ids\", () => {\n const body = {\n title: \"My Post\",\n tags: [\n { name: \"JavaScript\", apiAction: \"create\" },\n { name: \"TypeScript\", apiAction: \"create\" },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n create: [{ name: \"JavaScript\" }, { name: \"TypeScript\" }],\n },\n });\n });\n\n it(\"should handle connect operation for list relation items with only ids\", () => {\n const body = {\n title: \"My Post\",\n tags: [{ id: \"1\" }, { id: \"2\" }],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n connect: [{ id: \"1\" }, { id: \"2\" }],\n },\n });\n });\n\n it(\"should handle connect operation for list relation items with unique fields\", () => {\n const body = {\n title: \"My Post\",\n tags: [{ name: \"JavaScript\" }, { name: \"TypeScript\" }],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n connect: [{ name: \"JavaScript\" }, { name: \"TypeScript\" }],\n },\n });\n });\n\n it(\"should handle update operation for list relation items with ids and other fields\", () => {\n const body = {\n title: \"My Post\",\n tags: [\n { id: \"1\", name: \"Updated JavaScript\" },\n { id: \"2\", name: \"Updated TypeScript\" },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n update: [\n { where: { id: \"1\" }, data: { name: \"Updated JavaScript\" } },\n { where: { id: \"2\" }, data: { name: \"Updated TypeScript\" } },\n ],\n },\n });\n });\n\n it('should handle deleteMany operation for list relation items with apiAction: \"delete\"', () => {\n const body = {\n title: \"My Post\",\n tags: [\n { id: \"1\", apiAction: \"delete\" },\n { id: \"2\", apiAction: \"delete\" },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n deleteMany: {\n id: { in: [\"1\", \"2\"] },\n },\n },\n });\n });\n\n it('should handle disconnect operation for list relation items with apiAction: \"disconnect\"', () => {\n const body = {\n title: \"My Post\",\n tags: [\n { id: \"1\", apiAction: \"disconnect\" },\n { id: \"2\", apiAction: \"disconnect\" },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n disconnect: [{ id: \"1\" }, { id: \"2\" }],\n },\n });\n });\n\n it(\"should handle mixed operations for list relation items\", () => {\n const body = {\n title: \"My Post\",\n tags: [\n { name: \"New Tag\", apiAction: \"create\" }, // create\n { id: \"1\" }, // connect\n { id: \"2\", name: \"Updated Tag\" }, // update\n { id: \"3\", apiAction: \"delete\" }, // delete\n { id: \"4\", apiAction: \"disconnect\" }, // disconnect\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n create: [{ name: \"New Tag\" }],\n connect: [{ id: \"1\" }],\n update: [{ where: { id: \"2\" }, data: { name: \"Updated Tag\" } }],\n disconnect: [{ id: \"4\" }],\n deleteMany: { id: { in: [\"3\"] } },\n },\n });\n });\n });\n\n describe(\"Nested Relations\", () => {\n it(\"should handle nested relations recursively\", () => {\n const body = {\n name: \"John Doe\",\n posts: [\n {\n title: \"My First Post\",\n category: { name: \"Technology\" },\n tags: [{ name: \"JavaScript\" }],\n },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n posts: {\n create: [\n {\n title: \"My First Post\",\n category: {\n connect: { name: \"Technology\" },\n },\n tags: {\n connect: [{ name: \"JavaScript\" }],\n },\n },\n ],\n },\n });\n });\n\n it(\"should handle deep nested relations\", () => {\n const body = {\n name: \"John Doe\",\n posts: [\n {\n title: \"My First Post\",\n comments: [\n {\n content: \"Great post!\",\n author: { email: \"user@example.com\", apiAction: \"create\" },\n },\n ],\n },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n posts: {\n create: [\n {\n title: \"My First Post\",\n comments: {\n create: [\n {\n content: \"Great post!\",\n author: { create: { email: \"user@example.com\" } },\n },\n ],\n },\n },\n ],\n },\n });\n });\n });\n\n describe(\"Edge Cases\", () => {\n it(\"should handle empty arrays for list relation fields\", () => {\n const body = {\n name: \"John Doe\",\n posts: [],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n posts: {},\n });\n });\n\n it(\"should handle null values for relation fields\", () => {\n const body = {\n name: \"John Doe\",\n profile: null,\n posts: null,\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n profile: null,\n posts: null,\n });\n });\n });\n});\n\ndescribe(\"canBeUsedToConnect\", () => {\n it(\"should return true for objects with only an id\", () => {\n const modelName = \"User\";\n const bodyField = { id: \"123\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(true);\n });\n\n it(\"should return true for objects with a single unique field\", () => {\n const modelName = \"User\";\n const bodyField = { email: \"test@example.com\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(true);\n });\n\n it(\"should return true for objects with a single field from uniqueFields list\", () => {\n const modelName = \"User\";\n const bodyField = { username: \"testuser\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(true);\n });\n\n it(\"should return true for objects with apiAction set to connect\", () => {\n const modelName = \"User\";\n const bodyField = { id: \"123\", apiAction: \"connect\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(true);\n });\n\n it(\"should return false for objects with multiple fields\", () => {\n const modelName = \"User\";\n const bodyField = { id: \"123\", name: \"John\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(false);\n });\n\n it(\"should return false for objects with a single field that is not unique\", () => {\n const modelName = \"User\";\n const bodyField = { name: \"John\" }; // assuming name is not a unique field\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(false);\n });\n\n it(\"should return false for objects with apiAction set to something other than connect\", () => {\n const modelName = \"User\";\n const bodyField = { id: \"123\", apiAction: \"delete\" };\n\n expect(canBeUsedToConnect(modelName, bodyField)).toBe(false);\n });\n\n it(\"should return false for null or undefined values\", () => {\n const modelName = \"User\";\n\n expect(canBeUsedToConnect(modelName, null)).toBe(false);\n expect(canBeUsedToConnect(modelName, undefined)).toBe(false);\n });\n});\n\ndescribe(\"isListFieldAnArray\", () => {\n it(\"should return true for arrays\", () => {\n expect(isListFieldAnArray([])).toBe(true);\n expect(isListFieldAnArray([1, 2, 3])).toBe(true);\n expect(isListFieldAnArray(new Array())).toBe(true);\n });\n\n it(\"should return false for non-arrays\", () => {\n expect(isListFieldAnArray({})).toBe(false);\n expect(isListFieldAnArray(\"array\")).toBe(false);\n expect(isListFieldAnArray(123)).toBe(false);\n expect(isListFieldAnArray(null)).toBe(false);\n expect(isListFieldAnArray(undefined)).toBe(false);\n });\n});\n\n// Existing mocks should still be in place\n\ndescribe(\"isPrismaRelationFormat\", () => {\n it(\"should return true for objects with Prisma operations\", () => {\n expect(isPrismaRelationFormat({ create: { name: \"Test\" } })).toBe(true);\n expect(isPrismaRelationFormat({ connect: { id: 1 } })).toBe(true);\n expect(\n isPrismaRelationFormat({\n update: { where: { id: 1 }, data: { name: \"Test\" } },\n })\n ).toBe(true);\n expect(isPrismaRelationFormat({ delete: { id: 1 } })).toBe(true);\n expect(isPrismaRelationFormat({ disconnect: { id: 1 } })).toBe(true);\n expect(\n isPrismaRelationFormat({ deleteMany: { id: { in: [1, 2, 3] } } })\n ).toBe(true);\n expect(\n isPrismaRelationFormat({\n connectOrCreate: {\n where: { email: \"test@example.com\" },\n create: { email: \"test@example.com\", name: \"Test\" },\n },\n })\n ).toBe(true);\n expect(\n isPrismaRelationFormat({\n upsert: {\n where: { id: 1 },\n update: { name: \"Updated\" },\n create: { name: \"New\" },\n },\n })\n ).toBe(true);\n expect(isPrismaRelationFormat({ set: [{ id: 1 }, { id: 2 }] })).toBe(true);\n });\n\n it(\"should return false for objects without Prisma operations\", () => {\n expect(isPrismaRelationFormat({ name: \"Test\" })).toBe(false);\n expect(isPrismaRelationFormat({ id: 1, title: \"Test\" })).toBe(false);\n // expect(isPrismaRelationFormat(null)).toBe(false);\n // expect(isPrismaRelationFormat(undefined)).toBe(false);\n // expect(isPrismaRelationFormat(\"string\")).toBe(false);\n // expect(isPrismaRelationFormat(123)).toBe(false);\n expect(isPrismaRelationFormat([])).toBe(false);\n expect(isPrismaRelationFormat({ apiAction: \"create\" })).toBe(false);\n });\n});\n\ndescribe(\"handleRelationFieldsInBody with pre-formatted relations\", () => {\n describe(\"Pre-formatted Singular Relations\", () => {\n it(\"should preserve pre-formatted create operation\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n create: {\n bio: \"Software Engineer\",\n avatarUrl: \"https://example.com/avatar.jpg\",\n },\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n create: {\n bio: \"Software Engineer\",\n avatarUrl: \"https://example.com/avatar.jpg\",\n },\n },\n });\n });\n\n it(\"should preserve pre-formatted connect operation\", () => {\n const body = {\n name: \"John Doe\",\n profile: {\n connect: {\n id: \"123\",\n },\n },\n };\n\n const relationFields = {\n singular: [{ name: \"profile\", type: \"Profile\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n name: \"John Doe\",\n profile: {\n connect: {\n id: \"123\",\n },\n },\n });\n });\n\n it(\"should preserve pre-formatted upsert operation\", () => {\n const body = {\n title: \"My Post\",\n author: {\n upsert: {\n where: { email: \"author@example.com\" },\n update: { name: \"Updated Author\" },\n create: { email: \"author@example.com\", name: \"New Author\" },\n },\n },\n };\n\n const relationFields = {\n singular: [{ name: \"author\", type: \"User\" }],\n list: [],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n title: \"My Post\",\n author: {\n upsert: {\n where: { email: \"author@example.com\" },\n update: { name: \"Updated Author\" },\n create: { email: \"author@example.com\", name: \"New Author\" },\n },\n },\n });\n });\n });\n\n describe(\"Pre-formatted List Relations\", () => {\n it(\"should preserve pre-formatted connect operations in list\", () => {\n const body = {\n title: \"My Post\",\n tags: {\n connect: [{ id: \"1\" }, { id: \"2\" }],\n },\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n connect: [{ id: \"1\" }, { id: \"2\" }],\n },\n });\n });\n\n it(\"should preserve pre-formatted create operations in list\", () => {\n const body = {\n title: \"My Post\",\n tags: {\n create: [{ name: \"JavaScript\" }, { name: \"TypeScript\" }],\n },\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n create: [{ name: \"JavaScript\" }, { name: \"TypeScript\" }],\n },\n });\n });\n\n it(\"should preserve pre-formatted set operation\", () => {\n const body = {\n title: \"My Post\",\n tags: {\n set: [{ id: \"1\" }, { id: \"2\" }],\n },\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n set: [{ id: \"1\" }, { id: \"2\" }],\n },\n });\n });\n\n it(\"should preserve complex pre-formatted operations\", () => {\n const body = {\n title: \"My Post\",\n tags: {\n create: [{ name: \"New Tag\" }],\n connect: [{ id: \"1\" }],\n set: [{ id: \"5\" }, { id: \"6\" }],\n },\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"tags\", type: \"Tag\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n // Should be unchanged\n expect(result).toEqual({\n title: \"My Post\",\n tags: {\n create: [{ name: \"New Tag\" }],\n connect: [{ id: \"1\" }],\n set: [{ id: \"5\" }, { id: \"6\" }],\n },\n });\n });\n });\n\n describe(\"Mixed Auto and Pre-formatted Relations\", () => {\n it(\"should handle mix of auto and pre-formatted relations\", () => {\n const body = {\n title: \"My Post\",\n // This will be auto-handled\n category: {\n name: \"Technology\",\n },\n // This is pre-formatted and should be preserved\n tags: {\n connect: [{ id: \"1\" }],\n create: [{ name: \"New Tag\" }],\n },\n // This will be auto-handled\n comments: [\n { content: \"Great post!\", author: { email: \"user@example.com\" } },\n ],\n };\n\n const relationFields = {\n singular: [{ name: \"category\", type: \"Category\" }],\n list: [\n { name: \"tags\", type: \"Tag\" },\n { name: \"comments\", type: \"Comment\" },\n ],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n title: \"My Post\",\n category: {\n connect: {\n name: \"Technology\",\n },\n },\n // Preserved as-is\n tags: {\n connect: [{ id: \"1\" }],\n create: [{ name: \"New Tag\" }],\n },\n // Auto processed\n comments: {\n create: [\n {\n content: \"Great post!\",\n author: {\n connect: {\n email: \"user@example.com\",\n },\n },\n },\n ],\n },\n });\n });\n\n it(\"should process nested relations but preserve pre-formatted ones\", () => {\n const body = {\n name: \"John Doe\",\n posts: [\n {\n title: \"My First Post\",\n // This is pre-formatted and should be preserved\n category: {\n connect: { name: \"Preformatted Category\" },\n },\n // This will be auto-handled\n comments: [{ content: \"Great post!\" }],\n },\n ],\n };\n\n const relationFields = {\n singular: [],\n list: [{ name: \"posts\", type: \"Post\" }],\n };\n\n const result = handleRelationFieldsInBody(body, relationFields);\n\n expect(result).toEqual({\n name: \"John Doe\",\n posts: {\n create: [\n {\n title: \"My First Post\",\n // Preserved\n category: {\n connect: { name: \"Preformatted Category\" },\n },\n // Auto-processed\n comments: {\n create: [{ content: \"Great post!\" }],\n },\n },\n ],\n },\n });\n });\n });\n});\n"]}
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.streamFile = exports.deleteFile = exports.uploadFile = void 0;
|
|
16
|
-
const app_error_1 = __importDefault(require("../error-handler/utils/app-error"));
|
|
17
|
-
const file_upload_service_1 = require("./file-upload.service");
|
|
18
|
-
const path_1 = __importDefault(require("path"));
|
|
19
|
-
const fs_1 = __importDefault(require("fs"));
|
|
20
|
-
const sharp_1 = __importDefault(require("sharp"));
|
|
21
|
-
const catch_async_1 = __importDefault(require("../error-handler/utils/catch-async"));
|
|
22
|
-
const util_1 = require("util");
|
|
23
|
-
const server_1 = require("../../server");
|
|
24
|
-
const stat = (0, util_1.promisify)(fs_1.default.stat);
|
|
25
|
-
const unlink = (0, util_1.promisify)(fs_1.default.unlink);
|
|
26
|
-
const access = (0, util_1.promisify)(fs_1.default.access);
|
|
27
|
-
const mkdir = (0, util_1.promisify)(fs_1.default.mkdir);
|
|
28
|
-
exports.uploadFile = (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
-
const { fileType } = req.params;
|
|
30
|
-
const { format, width, height, resizeTo } = req.query;
|
|
31
|
-
const { documentUploaderService, fileUploaderService, imageUploaderService, videoUploaderService, } = (0, file_upload_service_1.getFileUploaderServices)();
|
|
32
|
-
const { fileUpload } = (0, server_1.getArkosConfig)();
|
|
33
|
-
const baseUploadDir = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "/uploads";
|
|
34
|
-
const uploadPath = path_1.default.resolve(process.cwd(), baseUploadDir, fileType);
|
|
35
|
-
try {
|
|
36
|
-
yield access(uploadPath);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
yield mkdir(uploadPath, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
let uploader;
|
|
42
|
-
switch (fileType) {
|
|
43
|
-
case "images":
|
|
44
|
-
uploader = imageUploaderService;
|
|
45
|
-
break;
|
|
46
|
-
case "videos":
|
|
47
|
-
uploader = videoUploaderService;
|
|
48
|
-
break;
|
|
49
|
-
case "documents":
|
|
50
|
-
uploader = documentUploaderService;
|
|
51
|
-
break;
|
|
52
|
-
case "files":
|
|
53
|
-
uploader = fileUploaderService;
|
|
54
|
-
break;
|
|
55
|
-
default:
|
|
56
|
-
return next(new app_error_1.default("Invalid file type", 400));
|
|
57
|
-
}
|
|
58
|
-
uploader.handleMultipleUpload()(req, res, (err) => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
-
var _a;
|
|
60
|
-
if (err)
|
|
61
|
-
return next(err);
|
|
62
|
-
const protocol = ((_a = req.get("host")) === null || _a === void 0 ? void 0 : _a.includes("localhost"))
|
|
63
|
-
? "http"
|
|
64
|
-
: "https";
|
|
65
|
-
const baseURL = `${protocol}://${req.get("host")}`;
|
|
66
|
-
const baseRoute = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/api/uploads";
|
|
67
|
-
const generateRelativePath = (filePath) => {
|
|
68
|
-
if (baseUploadDir.startsWith("..")) {
|
|
69
|
-
return path_1.default.join(fileType, path_1.default.basename(filePath));
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
return filePath.replace(`${process.cwd()}${baseUploadDir}/`, "");
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
const processImage = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
-
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
77
|
-
const originalFormat = ext.replace(".", "");
|
|
78
|
-
const outputFormat = format
|
|
79
|
-
? format.toString().toLowerCase()
|
|
80
|
-
: originalFormat;
|
|
81
|
-
if (!/jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif/i.test(originalFormat)) {
|
|
82
|
-
const relativePath = generateRelativePath(filePath);
|
|
83
|
-
return `${baseURL}${baseRoute}/${relativePath}`;
|
|
84
|
-
}
|
|
85
|
-
const tempName = `${path_1.default.basename(filePath, ext)}_${Date.now()}${ext}`;
|
|
86
|
-
const tempPath = path_1.default.join(path_1.default.dirname(filePath), tempName);
|
|
87
|
-
try {
|
|
88
|
-
let transformer = (0, sharp_1.default)(filePath);
|
|
89
|
-
const metadata = yield transformer.metadata();
|
|
90
|
-
if (resizeTo && metadata.width && metadata.height) {
|
|
91
|
-
const targetSize = parseInt(resizeTo.toString());
|
|
92
|
-
const scaleFactor = targetSize / Math.min(metadata.width, metadata.height);
|
|
93
|
-
const newWidth = Math.round(metadata.width * scaleFactor);
|
|
94
|
-
const newHeight = Math.round(metadata.height * scaleFactor);
|
|
95
|
-
transformer = transformer.resize(newWidth, newHeight);
|
|
96
|
-
}
|
|
97
|
-
else if (width || height) {
|
|
98
|
-
transformer = transformer.resize(width ? parseInt(width) : null, height ? parseInt(height) : null, { fit: "inside" });
|
|
99
|
-
}
|
|
100
|
-
if (outputFormat === "webp") {
|
|
101
|
-
transformer = transformer.toFormat("webp");
|
|
102
|
-
}
|
|
103
|
-
else if (outputFormat === "jpeg" || outputFormat === "jpg") {
|
|
104
|
-
transformer = transformer.toFormat("jpeg");
|
|
105
|
-
}
|
|
106
|
-
yield transformer.toFile(tempPath);
|
|
107
|
-
yield fs_1.default.promises.rename(tempPath, filePath);
|
|
108
|
-
const relativePath = generateRelativePath(filePath);
|
|
109
|
-
return `${baseURL}${baseRoute}/${relativePath}`;
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
try {
|
|
113
|
-
yield fs_1.default.promises.stat(tempPath);
|
|
114
|
-
yield fs_1.default.promises.unlink(tempPath);
|
|
115
|
-
}
|
|
116
|
-
catch (_a) {
|
|
117
|
-
}
|
|
118
|
-
next(error);
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
const processFile = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
-
const relativePath = generateRelativePath(filePath);
|
|
124
|
-
return `${baseURL}${baseRoute}/${relativePath}`;
|
|
125
|
-
});
|
|
126
|
-
let data;
|
|
127
|
-
if (req.files && Array.isArray(req.files)) {
|
|
128
|
-
if (fileType === "images") {
|
|
129
|
-
data = yield Promise.all(req.files.map((file) => processImage(file.path)));
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
data = yield Promise.all(req.files.map((file) => processFile(file.path)));
|
|
133
|
-
}
|
|
134
|
-
data = data.filter((url) => url !== null);
|
|
135
|
-
}
|
|
136
|
-
else if (req.file) {
|
|
137
|
-
if (fileType === "images") {
|
|
138
|
-
data = yield processImage(req.file.path);
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
data = yield processFile(req.file.path);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
return next(new app_error_1.default("No file uploaded", 400));
|
|
146
|
-
}
|
|
147
|
-
res.status(200).json({
|
|
148
|
-
success: true,
|
|
149
|
-
data,
|
|
150
|
-
message: Array.isArray(data)
|
|
151
|
-
? `${data.length} files uploaded successfully`
|
|
152
|
-
: "File uploaded successfully",
|
|
153
|
-
});
|
|
154
|
-
}));
|
|
155
|
-
}));
|
|
156
|
-
exports.deleteFile = (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
157
|
-
const { fileType, fileName } = req.params;
|
|
158
|
-
const { documentUploaderService, fileUploaderService, imageUploaderService, videoUploaderService, } = (0, file_upload_service_1.getFileUploaderServices)();
|
|
159
|
-
let uploader;
|
|
160
|
-
switch (fileType) {
|
|
161
|
-
case "images":
|
|
162
|
-
uploader = imageUploaderService;
|
|
163
|
-
break;
|
|
164
|
-
case "videos":
|
|
165
|
-
uploader = videoUploaderService;
|
|
166
|
-
break;
|
|
167
|
-
case "documents":
|
|
168
|
-
uploader = documentUploaderService;
|
|
169
|
-
break;
|
|
170
|
-
case "files":
|
|
171
|
-
uploader = fileUploaderService;
|
|
172
|
-
break;
|
|
173
|
-
default:
|
|
174
|
-
return next(new app_error_1.default("Invalid file type", 400));
|
|
175
|
-
}
|
|
176
|
-
try {
|
|
177
|
-
const fullUrl = `${req.protocol}://${req.get("host")}${req.originalUrl}`;
|
|
178
|
-
yield uploader.deleteFileByUrl(fullUrl);
|
|
179
|
-
res.status(200).json({
|
|
180
|
-
success: true,
|
|
181
|
-
message: "File deleted successfully",
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
return next(new app_error_1.default("File not found", 404));
|
|
186
|
-
}
|
|
187
|
-
}));
|
|
188
|
-
exports.streamFile = (0, catch_async_1.default)((req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
189
|
-
const { fileName, fileType } = req.params;
|
|
190
|
-
const filePath = path_1.default.join(".", "uploads", fileType, fileName);
|
|
191
|
-
try {
|
|
192
|
-
yield access(filePath);
|
|
193
|
-
}
|
|
194
|
-
catch (_a) {
|
|
195
|
-
return next(new app_error_1.default("File not found", 404));
|
|
196
|
-
}
|
|
197
|
-
const fileStat = yield stat(filePath);
|
|
198
|
-
const fileSize = fileStat.size;
|
|
199
|
-
const range = req.headers.range;
|
|
200
|
-
if (range) {
|
|
201
|
-
const [partialStart, partialEnd] = range.replace(/bytes=/, "").split("-");
|
|
202
|
-
const start = parseInt(partialStart, 10) || 0;
|
|
203
|
-
const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;
|
|
204
|
-
if (start >= fileSize || end >= fileSize) {
|
|
205
|
-
res.status(416).json({ error: "Range Not Satisfiable" });
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
res.writeHead(206, {
|
|
209
|
-
"Content-Range": `bytes ${start}-${end}/${fileSize}`,
|
|
210
|
-
"Accept-Ranges": "bytes",
|
|
211
|
-
"Content-Length": end - start + 1,
|
|
212
|
-
"Content-Type": "application/octet-stream",
|
|
213
|
-
"Content-Disposition": `inline; filename="${fileName}"`,
|
|
214
|
-
});
|
|
215
|
-
fs_1.default.createReadStream(filePath, { start, end }).pipe(res);
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
res.writeHead(200, {
|
|
219
|
-
"Content-Length": fileSize,
|
|
220
|
-
"Content-Type": "application/octet-stream",
|
|
221
|
-
"Content-Disposition": `inline; filename="${fileName}"`,
|
|
222
|
-
});
|
|
223
|
-
fs_1.default.createReadStream(filePath).pipe(res);
|
|
224
|
-
}
|
|
225
|
-
}));
|
|
226
|
-
//# sourceMappingURL=file-upload.controller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.controller.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import AppError from \"../error-handler/utils/app-error\";\nimport {\n FileUploaderService,\n getFileUploaderServices,\n} from \"./file-upload.service\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport sharp from \"sharp\";\nimport { NextFunction, Request, Response } from \"express\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { promisify } from \"util\";\nimport { getArkosConfig } from \"../../server\";\n\nconst stat = promisify(fs.stat);\nconst unlink = promisify(fs.unlink);\nconst access = promisify(fs.access);\nconst mkdir = promisify(fs.mkdir);\n/**\n * Handles file upload requests, processes images if needed, and returns URLs\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const uploadFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType } = req.params;\n const { format, width, height, resizeTo } = req.query;\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n const { fileUpload } = getArkosConfig();\n const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // Ensure upload directory exists\n const uploadPath = path.resolve(process.cwd(), baseUploadDir, fileType);\n try {\n await access(uploadPath);\n } catch (error) {\n // Create directory if it doesn't exist\n await mkdir(uploadPath, { recursive: true });\n }\n\n // Select the appropriate uploader service based on file type\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n // Handle the file upload\n uploader.handleMultipleUpload()(req, res, async (err) => {\n if (err) return next(err);\n\n // Determine the base URL for file access\n const protocol = req.get(\"host\")?.includes(\"localhost\")\n ? \"http\"\n : \"https\";\n const baseURL = `${protocol}://${req.get(\"host\")}`;\n const baseRoute = fileUpload?.baseRoute || \"/api/uploads\";\n\n /**\n * Generates the correct relative path regardless of upload directory location\n * @param {string} filePath - Full path to the uploaded file\n * @returns {string} Relative path for URL generation\n */\n const generateRelativePath = (filePath: string) => {\n if (baseUploadDir.startsWith(\"..\")) {\n // For paths outside project directory\n return path.join(fileType, path.basename(filePath));\n } else {\n // Original approach for paths within project\n return filePath.replace(`${process.cwd()}${baseUploadDir}/`, \"\");\n }\n };\n\n /**\n * Processes image files using Sharp for resizing and format conversion\n * @param {string} filePath - Path to the uploaded image file\n * @returns {Promise<string|null>} Public URL for the processed file or null if processing failed\n */\n const processImage = async (filePath: string): Promise<string | null> => {\n const ext = path.extname(filePath).toLowerCase();\n const originalFormat = ext.replace(\".\", \"\");\n const outputFormat = format\n ? format.toString().toLowerCase()\n : originalFormat;\n\n // Skip processing for non-image files\n if (!/jpeg|jpg|png|gif|webp|svg|bmp|tiff|heif/i.test(originalFormat)) {\n const relativePath = generateRelativePath(filePath);\n return `${baseURL}${baseRoute}/${relativePath}`;\n }\n\n // Create a temp filename with original name + random string\n const tempName = `${path.basename(filePath, ext)}_${Date.now()}${ext}`;\n const tempPath = path.join(path.dirname(filePath), tempName);\n\n try {\n let transformer = sharp(filePath);\n const metadata = await transformer.metadata();\n\n // Apply resize transformations if requested\n if (resizeTo && metadata.width && metadata.height) {\n const targetSize = parseInt(resizeTo.toString());\n const scaleFactor =\n targetSize / Math.min(metadata.width, metadata.height);\n const newWidth = Math.round(metadata.width * scaleFactor);\n const newHeight = Math.round(metadata.height * scaleFactor);\n transformer = transformer.resize(newWidth, newHeight);\n } else if (width || height) {\n transformer = transformer.resize(\n width ? parseInt(width as string) : null,\n height ? parseInt(height as string) : null,\n { fit: \"inside\" }\n );\n }\n\n // Apply format transformations if requested\n if (outputFormat === \"webp\") {\n transformer = transformer.toFormat(\"webp\");\n } else if (outputFormat === \"jpeg\" || outputFormat === \"jpg\") {\n transformer = transformer.toFormat(\"jpeg\");\n }\n\n // Save to temp file first\n await transformer.toFile(tempPath);\n\n // Rename temp file to original filename\n await fs.promises.rename(tempPath, filePath);\n\n // Return the public URL for the file\n const relativePath = generateRelativePath(filePath);\n return `${baseURL}${baseRoute}/${relativePath}`;\n } catch (error) {\n // Clean up temp file if it exists\n try {\n await fs.promises.stat(tempPath);\n await fs.promises.unlink(tempPath);\n } catch {\n // If temp file doesn't exist, no need to clean up\n }\n next(error);\n return null;\n }\n };\n\n /**\n * Handles basic file processing for non-image files\n * @param {string} filePath - Path to the uploaded file\n * @returns {Promise<string>} Public URL for the file\n */\n const processFile = async (filePath: string) => {\n const relativePath = generateRelativePath(filePath);\n return `${baseURL}${baseRoute}/${relativePath}`;\n };\n\n // Process all uploaded files\n let data;\n if (req.files && Array.isArray(req.files)) {\n if (fileType === \"images\") {\n // Process multiple image files with image transformations\n data = await Promise.all(\n req.files.map((file) => processImage(file.path))\n );\n } else {\n // Just store other file types without processing\n data = await Promise.all(\n req.files.map((file) => processFile(file.path))\n );\n }\n // Filter out any null values from failed processing\n data = data.filter((url) => url !== null);\n } else if (req.file) {\n // Process a single file\n if (fileType === \"images\") {\n data = await processImage(req.file.path);\n } else {\n data = await processFile(req.file.path);\n }\n } else {\n return next(new AppError(\"No file uploaded\", 400));\n }\n\n res.status(200).json({\n success: true,\n data,\n message: Array.isArray(data)\n ? `${data.length} files uploaded successfully`\n : \"File uploaded successfully\",\n });\n });\n }\n);\n\n/**\n * Handles file deletion requests\n * Supports paths outside of the project directory with '../' prefix\n * @param {Request} req - Express request object\n * @param {Response} res - Express response object\n * @param {NextFunction} next - Express next middleware function\n */\nexport const deleteFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileType, fileName } = req.params;\n\n // if (!fileName) {\n // return next(new AppError(\"File name is required\", 400));\n // }\n\n // if (!fileType) {\n // return next(new AppError(\"File type is required\", 400));\n // }\n\n // // Get the base upload directory from config\n // const { fileUpload } = getArkosConfig();\n // const baseUploadDir = fileUpload?.baseUploadDir || \"/uploads\";\n\n // // Construct the actual file path using path.resolve to handle '../' paths\n // const actualFilePath = path.resolve(\n // process.cwd(),\n // baseUploadDir,\n // fileType,\n // fileName\n // );\n\n const {\n documentUploaderService,\n fileUploaderService,\n imageUploaderService,\n videoUploaderService,\n } = getFileUploaderServices();\n\n let uploader: FileUploaderService;\n switch (fileType) {\n case \"images\":\n uploader = imageUploaderService;\n break;\n case \"videos\":\n uploader = videoUploaderService;\n break;\n case \"documents\":\n uploader = documentUploaderService;\n break;\n case \"files\":\n uploader = fileUploaderService;\n break;\n default:\n return next(new AppError(\"Invalid file type\", 400));\n }\n\n try {\n // // Check if file exists\n // await access(actualFilePath, fs.constants.F_OK);\n\n // // Delete the file\n // await unlink(actualFilePath);\n\n const fullUrl = `${req.protocol}://${req.get(\"host\")}${req.originalUrl}`;\n await uploader.deleteFileByUrl(fullUrl);\n\n res.status(200).json({\n success: true,\n message: \"File deleted successfully\",\n });\n } catch (error) {\n // File doesn't exist\n return next(new AppError(\"File not found\", 404));\n }\n }\n);\n\nexport const streamFile = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const { fileName, fileType } = req.params;\n\n const filePath = path.join(\".\", \"uploads\", fileType, fileName);\n try {\n await access(filePath);\n } catch {\n return next(new AppError(\"File not found\", 404));\n }\n\n const fileStat = await stat(filePath);\n const fileSize = fileStat.size;\n const range = req.headers.range;\n\n if (range) {\n const [partialStart, partialEnd] = range.replace(/bytes=/, \"\").split(\"-\");\n const start = parseInt(partialStart, 10) || 0;\n const end = partialEnd ? parseInt(partialEnd, 10) : fileSize - 1;\n\n if (start >= fileSize || end >= fileSize) {\n res.status(416).json({ error: \"Range Not Satisfiable\" });\n return;\n }\n\n res.writeHead(206, {\n \"Content-Range\": `bytes ${start}-${end}/${fileSize}`,\n \"Accept-Ranges\": \"bytes\",\n \"Content-Length\": end - start + 1,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n\n fs.createReadStream(filePath, { start, end }).pipe(res);\n } else {\n res.writeHead(200, {\n \"Content-Length\": fileSize,\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Disposition\": `inline; filename=\"${fileName}\"`,\n });\n fs.createReadStream(filePath).pipe(res);\n }\n }\n);\n"]}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getFileUploaderRouter = getFileUploaderRouter;
|
|
16
|
-
const express_1 = require("express");
|
|
17
|
-
const models_helpers_1 = require("../../utils/helpers/models.helpers");
|
|
18
|
-
const auth_service_1 = __importDefault(require("../auth/auth.service"));
|
|
19
|
-
const file_upload_controller_1 = require("./file-upload.controller");
|
|
20
|
-
const path_1 = __importDefault(require("path"));
|
|
21
|
-
const express_2 = __importDefault(require("express"));
|
|
22
|
-
const deepmerge_helper_1 = __importDefault(require("../../utils/helpers/deepmerge.helper"));
|
|
23
|
-
const router = (0, express_1.Router)();
|
|
24
|
-
function getFileUploaderRouter(_a) {
|
|
25
|
-
return __awaiter(this, arguments, void 0, function* ({ fileUpload }) {
|
|
26
|
-
const modelModules = yield (0, models_helpers_1.importPrismaModelModules)("file-upload");
|
|
27
|
-
let { middlewares = {}, authConfigs = {} } = {};
|
|
28
|
-
if (modelModules) {
|
|
29
|
-
({ middlewares = {}, authConfigs = {} } = modelModules);
|
|
30
|
-
}
|
|
31
|
-
let basePathname = (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/uploads/";
|
|
32
|
-
if (!basePathname.startsWith("/"))
|
|
33
|
-
basePathname = "/" + basePathname;
|
|
34
|
-
if (!basePathname.endsWith("/"))
|
|
35
|
-
basePathname = basePathname + "/";
|
|
36
|
-
router.use((fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseRoute) || "/api/uploads", auth_service_1.default.handleAuthenticationControl(authConfigs, "view", "file-upload"), auth_service_1.default.handleActionAccessControl(authConfigs, "view", "file-upload"), express_2.default.static(path_1.default.resolve(process.cwd(), (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.baseUploadDir) || "uploads"), (0, deepmerge_helper_1.default)({
|
|
37
|
-
maxAge: "1y",
|
|
38
|
-
etag: true,
|
|
39
|
-
lastModified: true,
|
|
40
|
-
dotfiles: "ignore",
|
|
41
|
-
fallthrough: true,
|
|
42
|
-
index: false,
|
|
43
|
-
cacheControl: true,
|
|
44
|
-
}, (fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.expressStaticOptions) || {})));
|
|
45
|
-
router.post(`${basePathname}:fileType`, auth_service_1.default.handleAuthenticationControl(authConfigs, "create", "file-upload"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_upload_controller_1.uploadFile);
|
|
46
|
-
router.delete(`${basePathname}:fileType/:fileName`, auth_service_1.default.handleAuthenticationControl(authConfigs, "delete", "file-upload"), auth_service_1.default.handleActionAccessControl(authConfigs, "create", "file-upload"), file_upload_controller_1.deleteFile);
|
|
47
|
-
return router;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=file-upload.router.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-upload.router.js","sourceRoot":"","sources":["../../../../src/modules/file-upload/file-upload.router.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,sDAyDC;AApED,qCAAiC;AACjC,uEAA8E;AAC9E,wEAA+C;AAC/C,qEAAkE;AAElE,gDAAwB;AACxB,sDAA8B;AAC9B,4FAA6D;AAE7D,MAAM,MAAM,GAAW,IAAA,gBAAM,GAAE,CAAC;AAEhC,SAAsB,qBAAqB;yDAAC,EAAE,UAAU,EAAe;QACrE,MAAM,YAAY,GAAG,MAAM,IAAA,yCAAwB,EAAC,aAAa,CAAC,CAAC;QACnE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,CAAC,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,YAAY,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,WAAW,CAAC;QAExD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC;QAEnE,MAAM,CAAC,GAAG,CACR,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,KAAI,cAAc,EACvC,sBAAW,CAAC,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAC3E,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EACzE,iBAAO,CAAC,MAAM,CACZ,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,KAAI,SAAS,CAAC,EACnE,IAAA,0BAAS,EACP;YACE,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,IAAI;SACnB,EACD,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,oBAAoB,KAAI,EAAE,CACvC,CACF,CACF,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,WAAW,EAC1B,sBAAW,CAAC,2BAA2B,CACrC,WAAW,EACX,QAAQ,EACR,aAAa,CACd,EACD,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,mCAAU,CACX,CAAC;QAEF,MAAM,CAAC,MAAM,CACX,GAAG,YAAY,qBAAqB,EACpC,sBAAW,CAAC,2BAA2B,CACrC,WAAW,EACX,QAAQ,EACR,aAAa,CACd,EACD,sBAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,EAC3E,mCAAU,CACX,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA","sourcesContent":["import { Router } from \"express\";\nimport { importPrismaModelModules } from \"../../utils/helpers/models.helpers\";\nimport authService from \"../auth/auth.service\";\nimport { deleteFile, uploadFile } from \"./file-upload.controller\";\nimport { ArkosConfig } from \"../../types/arkos-config\";\nimport path from \"path\";\nimport express from \"express\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\nconst router: Router = Router();\n\nexport async function getFileUploaderRouter({ fileUpload }: ArkosConfig) {\n const modelModules = await importPrismaModelModules(\"file-upload\");\n let { middlewares = {}, authConfigs = {} } = {};\n\n if (modelModules) {\n ({ middlewares = {}, authConfigs = {} } = modelModules);\n }\n\n let basePathname = fileUpload?.baseRoute || \"/uploads/\";\n\n if (!basePathname.startsWith(\"/\")) basePathname = \"/\" + basePathname;\n if (!basePathname.endsWith(\"/\")) basePathname = basePathname + \"/\";\n\n router.use(\n fileUpload?.baseRoute || \"/api/uploads\",\n authService.handleAuthenticationControl(authConfigs, \"view\", \"file-upload\"),\n authService.handleActionAccessControl(authConfigs, \"view\", \"file-upload\"),\n express.static(\n path.resolve(process.cwd(), fileUpload?.baseUploadDir || \"uploads\"),\n deepmerge(\n {\n maxAge: \"1y\",\n etag: true,\n lastModified: true,\n dotfiles: \"ignore\",\n fallthrough: true,\n index: false,\n cacheControl: true,\n },\n fileUpload?.expressStaticOptions || {}\n )\n )\n );\n\n router.post(\n `${basePathname}:fileType`,\n authService.handleAuthenticationControl(\n authConfigs,\n \"create\",\n \"file-upload\"\n ),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n uploadFile\n );\n\n router.delete(\n `${basePathname}:fileType/:fileName`,\n authService.handleAuthenticationControl(\n authConfigs,\n \"delete\",\n \"file-upload\"\n ),\n authService.handleActionAccessControl(authConfigs, \"create\", \"file-upload\"),\n deleteFile\n );\n\n return router;\n}\n"]}
|