@zuplo/cli 6.52.5 → 6.52.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/__tests__/integration/delete.integration.test.d.ts +2 -0
  2. package/dist/__tests__/integration/delete.integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration/delete.integration.test.js +162 -0
  4. package/dist/__tests__/integration/delete.integration.test.js.map +1 -0
  5. package/dist/__tests__/integration/deploy.integration.test.d.ts +2 -0
  6. package/dist/__tests__/integration/deploy.integration.test.d.ts.map +1 -0
  7. package/dist/__tests__/integration/deploy.integration.test.js +249 -0
  8. package/dist/__tests__/integration/deploy.integration.test.js.map +1 -0
  9. package/dist/__tests__/integration/jest-mocks-setup.d.ts +2 -0
  10. package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +1 -0
  11. package/dist/__tests__/integration/jest-mocks-setup.js +59 -0
  12. package/dist/__tests__/integration/jest-mocks-setup.js.map +1 -0
  13. package/dist/__tests__/integration/jest-setup.d.ts +2 -0
  14. package/dist/__tests__/integration/jest-setup.d.ts.map +1 -0
  15. package/dist/__tests__/integration/jest-setup.js +12 -0
  16. package/dist/__tests__/integration/jest-setup.js.map +1 -0
  17. package/dist/__tests__/integration/link.integration.test.d.ts +2 -0
  18. package/dist/__tests__/integration/link.integration.test.d.ts.map +1 -0
  19. package/dist/__tests__/integration/link.integration.test.js +340 -0
  20. package/dist/__tests__/integration/link.integration.test.js.map +1 -0
  21. package/dist/__tests__/integration/list.integration.test.d.ts +2 -0
  22. package/dist/__tests__/integration/list.integration.test.d.ts.map +1 -0
  23. package/dist/__tests__/integration/list.integration.test.js +156 -0
  24. package/dist/__tests__/integration/list.integration.test.js.map +1 -0
  25. package/dist/__tests__/integration/test-utils.d.ts +30 -0
  26. package/dist/__tests__/integration/test-utils.d.ts.map +1 -0
  27. package/dist/__tests__/integration/test-utils.js +82 -0
  28. package/dist/__tests__/integration/test-utils.js.map +1 -0
  29. package/dist/__tests__/integration/tunnel.integration.test.d.ts +2 -0
  30. package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +1 -0
  31. package/dist/__tests__/integration/tunnel.integration.test.js +477 -0
  32. package/dist/__tests__/integration/tunnel.integration.test.js.map +1 -0
  33. package/dist/__tests__/integration/variable.integration.test.d.ts +2 -0
  34. package/dist/__tests__/integration/variable.integration.test.d.ts.map +1 -0
  35. package/dist/__tests__/integration/variable.integration.test.js +258 -0
  36. package/dist/__tests__/integration/variable.integration.test.js.map +1 -0
  37. package/dist/build/handler.d.ts.map +1 -1
  38. package/dist/build/handler.js +8 -1
  39. package/dist/build/handler.js.map +1 -1
  40. package/dist/editor/assets/{index-416489b7.css → index-300931c5.css} +1 -1
  41. package/dist/editor/assets/index-7e947de6.d.ts +2 -0
  42. package/dist/editor/assets/index-7e947de6.d.ts.map +1 -0
  43. package/dist/editor/assets/index-7e947de6.js +10915 -0
  44. package/dist/editor/assets/index-7e947de6.js.map +1 -0
  45. package/dist/editor/index.html +2 -2
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +4 -4
  48. package/dist/editor/assets/index-03352ce7.d.ts +0 -2
  49. package/dist/editor/assets/index-03352ce7.d.ts.map +0 -1
  50. package/dist/editor/assets/index-03352ce7.js +0 -9809
  51. package/dist/editor/assets/index-03352ce7.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/tunnel.integration.test.ts"],"names":[],"mappings":"AAIA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAKzB,KAAK,UAAU,oBAAoB,CACjC,UAAsE,EACtE,IAKC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;SAC5B,OAAO,CAAC,aAAa,CAAC;SACtB,IAAI,CAAC,KAAK,CAAC;SACX,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,KAAK,CAAC,CAAC;IAGtB,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpB,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrD,CAAC;IAGD,OAAO,MAAM,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAKD,KAAK,UAAU,4BAA4B,CACzC,UAAiC,EACjC,IAKC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;SAC5B,OAAO,CAAC,aAAa,CAAC;SACtB,IAAI,CAAC,KAAK,CAAC;SACX,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,KAAK,CAAC,CAAC;IAGtB,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpB,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACvE,CAAC;IAGD,OAAO,MAAM,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAGD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CACjC,OAAO,CAAC,wBAAwB,CAAC,CAAC,qCAAqC,CACxE,CAAC;AACF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAChC,OAAO,CAAC,wBAAwB,CAAC,CAAC,oCAAoC,CACvE,CAAC;AACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CACtC,OAAO,CAAC,wBAAwB,CAAC,CAAC,yBAAyB,CAC5D,CAAC;AAEF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAI,cAA8B,CAAC;IAEnC,UAAU,CAAC,GAAG,EAAE;QACd,oBAAoB,EAAE,CAAC;QACvB,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAGtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAGzB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,EAAE,CAAC;QACd,cAAc,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,cAAc,GAAG,gBAAgB,CAAC;YACxC,MAAM,YAAY,GAAG;gBACnB,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,qBAAqB;aAC7B,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,IAAI,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBACjD,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAG5B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAGH,MAAM,oBAAoB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,aAAa,EAAE,cAAc;aAC9B,CAAC,CAAC;YAGH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAGlC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAG1D,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;YAGnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC3B,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,cAAc,GAAG,gBAAgB,CAAC;YACxC,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,4BAA4B;gBACrC,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,IAAI,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBACjD,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,aAAa,EAAE,cAAc;aAC9B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,YAAY,GAAG;gBACnB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;oBACtC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;iBACvC;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBAChD,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAE5B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAGlC,MAAM,aAAa,GAAG;gBACpB,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC/C,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;aAChD,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAE3D,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAElC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBAChD,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAE5B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YAEjE,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBAChD,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACnC,MAAM,oBAAoB,GAAG;gBAC3B,EAAE,EAAE,iBAAiB;gBACrB,MAAM,EAAE,aAAa;aACtB,CAAC;YAEF,MAAM,qBAAqB,GAAG;gBAC5B,EAAE,EAAE,iBAAiB;gBACrB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,6BAA6B;aACvC,CAAC;YAGF,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAC5D,MAAM,CAAC,gBAAgB,iBAAiB,YAAY,QAAQ,EAAE,CAAC;iBAC/D,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;YAGpC,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAC1D,GAAG,CACF,gBAAgB,iBAAiB,YAAY,QAAQ,sCAAsC,CAC5F;iBACA,KAAK,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YAErC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBACnD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBACjD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,8CAA8C,CAC/C,CAAC;YAEF,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;YACtC,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,MAAM,CAAC,gBAAgB,iBAAiB,YAAY,QAAQ,EAAE,CAAC;iBAC/D,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACnC,MAAM,iBAAiB,GAAG;gBACxB,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,+BAA+B;aAC1C,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CAAC,gBAAgB,iBAAiB,YAAY,QAAQ,EAAE,CAAC;iBAC5D,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAEjC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,UAAU,EAAE;gBACrC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;YAE/D,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;YACtC,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CAAC,gBAAgB,iBAAiB,YAAY,QAAQ,EAAE,CAAC;iBAC5D,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,UAAU,EAAE;gBACrC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,gCAAgC,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACnC,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,4BAA4B;aACtC,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,IAAI,CACH,gBAAgB,iBAAiB,YAAY,QAAQ,gBAAgB,CACtE;iBACA,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAEjC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,cAAc,EAAE;gBACzC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;YAE/D,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;YACtC,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,IAAI,CACH,gBAAgB,iBAAiB,YAAY,QAAQ,gBAAgB,CACtE;iBACA,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,cAAc,EAAE;gBACzC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,oCAAoC,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACnC,MAAM,oBAAoB,GAAG;gBAC3B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;oBACtD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;iBACvD;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CACF,gBAAgB,iBAAiB,YAAY,QAAQ,yBAAyB,CAC/E;iBACA,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;YAEpC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,4BAA4B,CAAC,UAAU,EAAE;gBAC7C,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAC1C,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC9C,CAAC;YAEF,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,mCAAmC,CACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC;YACtC,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,kBAAkB;gBAC3B,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CACF,gBAAgB,iBAAiB,YAAY,QAAQ,yBAAyB,CAC/E;iBACA,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,4BAA4B,CAAC,UAAU,EAAE;gBAC7C,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEhD,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,yCAAyC,CAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACnC,MAAM,UAAU,GAAG,0BAA0B,CAAC;YAG9C,MAAM,MAAM,CACV,4BAA4B,CAAC,QAAQ,EAAE;gBACrC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;gBACrB,oBAAoB,EAAE,UAAU;aACjC,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAExC,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,4CAA4C,CAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YAEnC,MAAM,cAAc,GAAG,uBAAuB,CAAC;YAG/C,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;YACzC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YAElE,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,4BAA4B;gBACrC,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACtD,GAAG,CACF,gBAAgB,iBAAiB,YAAY,QAAQ,yBAAyB,CAC/E;iBACA,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAE7B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,4BAA4B,CAAC,QAAQ,EAAE;gBAC3C,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,QAAQ;gBACrB,oBAAoB,EAAE,cAAc;aACrC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAGhD,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YAEnC,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,uCAAuC,CACxC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,cAAc,GAAG,aAAa,CAAC;YACrC,MAAM,YAAY,GAAG;gBACnB,EAAE,EAAE,YAAY;gBAChB,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,qBAAqB;aAC7B,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;iBAC9B,IAAI,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBACjD,WAAW,CAAC,eAAe,EAAE,UAAU,eAAe,EAAE,CAAC;iBACzD,WAAW,CAAC,cAAc,EAAE,kBAAkB,CAAC;iBAC/C,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAE5B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;gBAC1B,aAAa,EAAE,cAAc;aAC9B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,kCAAkC,CACnC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;YAExE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;iBAC9B,GAAG,CAAC,gBAAgB,iBAAiB,UAAU,CAAC;iBAChD,WAAW,CAAC,eAAe,EAAE,UAAU,eAAe,EAAE,CAAC;iBACzD,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAE5B,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC7C,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,MAAM,oBAAoB,CAAC,MAAM,EAAE;gBACjC,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,gBAAgB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CACtC,gCAAgC,CACjC,CAAC;YAGF,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Integration tests for the tunnel commands (create and list)\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport tunnelCommand from \"../../cmds/tunnel/index.js\";\nimport {\n setupTestEnvironment,\n cleanupTest,\n setupAuthenticatedNock,\n RequestCapture,\n TEST_API_BASE,\n TEST_ACCOUNT_NAME,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\n/**\n * Execute tunnel command with given arguments using actual yargs command\n */\nasync function executeTunnelCommand(\n subcommand: \"create\" | \"list\" | \"delete\" | \"describe\" | \"rotate-token\",\n args: {\n account?: string;\n \"api-key\"?: string;\n \"tunnel-name\"?: string;\n \"tunnel-id\"?: string;\n }\n) {\n const yargsInstance = yargs([])\n .command(tunnelCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"tunnel\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"tunnel-name\"]) {\n commandArgs.push(\"--tunnel-name\", args[\"tunnel-name\"]);\n }\n\n if (args[\"tunnel-id\"]) {\n commandArgs.push(\"--tunnel-id\", args[\"tunnel-id\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n/**\n * Execute tunnel services command with given arguments using actual yargs command\n */\nasync function executeTunnelServicesCommand(\n subcommand: \"describe\" | \"update\",\n args: {\n account?: string;\n \"api-key\"?: string;\n \"tunnel-id\"?: string;\n \"configuration-file\"?: string;\n }\n) {\n const yargsInstance = yargs([])\n .command(tunnelCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"tunnel\", \"services\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"tunnel-id\"]) {\n commandArgs.push(\"--tunnel-id\", args[\"tunnel-id\"]);\n }\n\n if (args[\"configuration-file\"]) {\n commandArgs.push(\"--configuration-file\", args[\"configuration-file\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"Tunnel Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Tunnel Create Command\", () => {\n it(\"should intercept POST request to create tunnel\", async () => {\n const testTunnelName = \"my-test-tunnel\";\n const mockResponse = {\n id: \"tunnel-123\",\n name: testTunnelName,\n token: \"tunnel-token-abc123\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(201, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the tunnel create command through yargs\n await executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with tunnel info\n expect(mockPrintTable).toHaveBeenCalledWith(mockResponse);\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-create-requests\");\n\n // Verify request body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"POST\");\n expect(request.body).toEqual({\n name: testTunnelName,\n });\n });\n\n it(\"should handle tunnel creation error\", async () => {\n const testTunnelName = \"invalid-tunnel\";\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Tunnel name already exists\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-create-error-requests\");\n });\n });\n\n describe(\"Tunnel List Command\", () => {\n it(\"should intercept GET request to list tunnels\", async () => {\n const mockResponse = {\n data: [\n { id: \"tunnel-123\", name: \"tunnel-1\" },\n { id: \"tunnel-456\", name: \"tunnel-2\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with formatted table\n const expectedTable = [\n { \"tunnel-id\": \"tunnel-123\", name: \"tunnel-1\" },\n { \"tunnel-id\": \"tunnel-456\", name: \"tunnel-2\" },\n ];\n expect(mockPrintTable).toHaveBeenCalledWith(expectedTable);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-requests\");\n });\n\n it(\"should handle empty tunnels list\", async () => {\n const mockResponse = { data: [] };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"No tunnels found\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-empty-requests\");\n });\n\n it(\"should handle API error responses\", async () => {\n const errorResponse = {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .reply(403, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-list-error-requests\");\n });\n });\n\n describe(\"Tunnel Delete Command\", () => {\n it(\"should intercept DELETE request to delete tunnel\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTeardownResponse = {\n id: \"teardown-op-456\",\n status: \"in-progress\",\n };\n\n const mockCompletedTeardown = {\n id: \"teardown-op-456\",\n status: \"success\",\n message: \"Tunnel deleted successfully\",\n };\n\n // Mock the delete initiation\n const deleteScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(200, mockTeardownResponse);\n\n // Mock the polling endpoint\n const pollScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/teardown-operations/teardown-op-456`\n )\n .reply(200, mockCompletedTeardown);\n\n deleteScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n pollScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(deleteScope.isDone()).toBe(true);\n expect(pollScope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n \"Tunnel test-tunnel-123 deleted successfully.\"\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-delete-requests\");\n });\n\n it(\"should handle tunnel deletion error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-delete-error-requests\");\n });\n });\n\n describe(\"Tunnel Describe Command\", () => {\n it(\"should intercept GET request to describe tunnel\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTunnelDetails = {\n id: tunnelId,\n name: \"Test Tunnel\",\n status: \"active\",\n endpoint: \"https://test-tunnel.zuplo.dev\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(200, mockTunnelDetails);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith(mockTunnelDetails);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-describe-requests\");\n });\n\n it(\"should handle tunnel describe error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}`)\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-describe-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Rotate Token Command\", () => {\n it(\"should intercept POST request to rotate tunnel token\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockTokenResponse = {\n tunnelId: tunnelId,\n newToken: \"new-token-abc123\",\n message: \"Token rotated successfully\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/$rotate-token`\n )\n .reply(200, mockTokenResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"rotate-token\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith(mockTokenResponse);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"tunnel-rotate-token-requests\");\n });\n\n it(\"should handle token rotation error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/$rotate-token`\n )\n .reply(403, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"rotate-token\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-rotate-token-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Services Describe Command\", () => {\n it(\"should intercept GET request to describe tunnel services\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const mockServicesResponse = {\n tunnelId: tunnelId,\n services: [\n { name: \"api-service\", port: 3000, status: \"running\" },\n { name: \"web-service\", port: 8080, status: \"running\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(200, mockServicesResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelServicesCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n JSON.stringify(mockServicesResponse, null, 2)\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-describe-requests\"\n );\n });\n\n it(\"should handle services describe error\", async () => {\n const tunnelId = \"nonexistent-tunnel\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Tunnel not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelServicesCommand(\"describe\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-describe-error-requests\"\n );\n });\n });\n\n describe(\"Tunnel Services Update Command\", () => {\n it(\"should handle services update error due to file read failure\", async () => {\n const tunnelId = \"test-tunnel-123\";\n const configFile = \"/nonexistent/config.json\";\n\n // This test will fail when trying to read the file, triggering printCriticalFailureToConsoleAndExit\n await expect(\n executeTunnelServicesCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n \"configuration-file\": configFile,\n })\n ).rejects.toThrow(\"Process would exit\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-update-file-error-requests\"\n );\n });\n\n it(\"should handle services update API error\", async () => {\n const tunnelId = \"test-tunnel-123\";\n // Create a temporary config file for testing\n const tempConfigFile = \"/tmp/test-config.json\";\n\n // Mock filesystem operations\n const mockFs = require(\"node:fs/promises\");\n const originalReadFile = mockFs.readFile;\n mockFs.readFile = jest.fn().mockResolvedValue('{\"services\": []}');\n\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Invalid configuration file\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .put(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels/${tunnelId}/services-configuration`\n )\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelServicesCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-id\": tunnelId,\n \"configuration-file\": tempConfigFile,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n // Restore mock\n mockFs.readFile = originalReadFile;\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-services-update-error-requests\"\n );\n });\n });\n\n describe(\"Request validation\", () => {\n it(\"should include correct headers for create request\", async () => {\n const testTunnelName = \"test-tunnel\";\n const mockResponse = {\n id: \"tunnel-123\",\n name: testTunnelName,\n token: \"tunnel-token-abc123\",\n };\n\n const scope = nock(TEST_API_BASE)\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .matchHeader(\"content-type\", \"application/json\")\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"tunnel-name\": testTunnelName,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-create-headers-validation\"\n );\n });\n\n it(\"should include correct headers for list request\", async () => {\n const mockResponse = { data: [{ id: \"tunnel-123\", name: \"tunnel-1\" }] };\n\n const scope = nock(TEST_API_BASE)\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/tunnels`)\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeTunnelCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"tunnel-list-headers-validation\"\n );\n\n // Verify it's a GET request with no body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"GET\");\n expect(request.body).toBeUndefined();\n });\n });\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=variable.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable.integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/variable.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,258 @@
1
+ import nock from "nock";
2
+ import yargs from "yargs/yargs";
3
+ import variableCommand from "../../cmds/variable/index.js";
4
+ import { setupTestEnvironment, cleanupTest, setupAuthenticatedNock, RequestCapture, TEST_API_BASE, TEST_ACCOUNT_NAME, TEST_PROJECT_NAME, TEST_AUTH_TOKEN, } from "./test-utils.js";
5
+ async function executeVariableCommand(subcommand, args) {
6
+ const yargsInstance = yargs([])
7
+ .command(variableCommand)
8
+ .help(false)
9
+ .version(false)
10
+ .exitProcess(false);
11
+ const commandArgs = ["variable", subcommand];
12
+ if (args.account) {
13
+ commandArgs.push("--account", args.account);
14
+ }
15
+ if (args.project) {
16
+ commandArgs.push("--project", args.project);
17
+ }
18
+ if (args["api-key"]) {
19
+ commandArgs.push("--api-key", args["api-key"]);
20
+ }
21
+ commandArgs.push("--name", args.name);
22
+ commandArgs.push("--value", args.value);
23
+ commandArgs.push("--branch", args.branch);
24
+ if (subcommand === "create") {
25
+ if (args["is-secret"]) {
26
+ commandArgs.push("--is-secret");
27
+ }
28
+ else {
29
+ commandArgs.push("--is-secret", "false");
30
+ }
31
+ }
32
+ return await yargsInstance.parse(commandArgs);
33
+ }
34
+ const mockPrintResult = jest.mocked(require("../../common/output.js").printResultToConsole);
35
+ const mockPrintDiagnostics = jest.mocked(require("../../common/output.js").printDiagnosticsToConsole);
36
+ describe("Variable Command Integration Tests", () => {
37
+ let requestCapture;
38
+ beforeEach(() => {
39
+ setupTestEnvironment();
40
+ requestCapture = new RequestCapture();
41
+ nock.disableNetConnect();
42
+ jest.clearAllMocks();
43
+ });
44
+ afterEach(() => {
45
+ cleanupTest();
46
+ requestCapture.clear();
47
+ });
48
+ describe("Variable Create Command", () => {
49
+ it("should intercept POST request to create variable", async () => {
50
+ const testBranch = "main";
51
+ const testVariableName = "API_URL";
52
+ const testValue = "https://api.example.com";
53
+ const mockResponse = {
54
+ name: testVariableName,
55
+ "is-secret": false,
56
+ value: testValue,
57
+ branch: testBranch,
58
+ createdOn: "2024-01-01T00:00:00Z",
59
+ updatedOn: "2024-01-01T00:00:00Z",
60
+ };
61
+ const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
62
+ .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
63
+ .reply(201, mockResponse);
64
+ scope.on("request", (req, interceptor, body) => {
65
+ requestCapture.capture(req, interceptor, body);
66
+ });
67
+ await executeVariableCommand("create", {
68
+ account: TEST_ACCOUNT_NAME,
69
+ project: TEST_PROJECT_NAME,
70
+ "api-key": TEST_AUTH_TOKEN,
71
+ name: testVariableName,
72
+ value: testValue,
73
+ branch: testBranch,
74
+ "is-secret": false,
75
+ });
76
+ expect(scope.isDone()).toBe(true);
77
+ expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} created successfully`);
78
+ const capturedRequests = requestCapture.getRequests();
79
+ expect(capturedRequests).toMatchSnapshot("variable-create-requests");
80
+ const request = capturedRequests[0];
81
+ expect(request.method).toBe("POST");
82
+ expect(request.body).toEqual({
83
+ name: testVariableName,
84
+ isSecret: false,
85
+ value: testValue,
86
+ });
87
+ });
88
+ it("should handle secret variable creation", async () => {
89
+ const testBranch = "production";
90
+ const testVariableName = "DATABASE_PASSWORD";
91
+ const testValue = "super-secret-password";
92
+ const mockResponse = {
93
+ name: testVariableName,
94
+ "is-secret": true,
95
+ value: "[REDACTED]",
96
+ branch: testBranch,
97
+ createdOn: "2024-01-01T00:00:00Z",
98
+ updatedOn: "2024-01-01T00:00:00Z",
99
+ };
100
+ const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
101
+ .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
102
+ .reply(201, mockResponse);
103
+ scope.on("request", (req, interceptor, body) => {
104
+ requestCapture.capture(req, interceptor, body);
105
+ });
106
+ await executeVariableCommand("create", {
107
+ account: TEST_ACCOUNT_NAME,
108
+ project: TEST_PROJECT_NAME,
109
+ "api-key": TEST_AUTH_TOKEN,
110
+ name: testVariableName,
111
+ value: testValue,
112
+ branch: testBranch,
113
+ "is-secret": true,
114
+ });
115
+ expect(scope.isDone()).toBe(true);
116
+ expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} created successfully`);
117
+ const capturedRequests = requestCapture.getRequests();
118
+ expect(capturedRequests).toMatchSnapshot("variable-create-secret-requests");
119
+ const request = capturedRequests[0];
120
+ expect(request.body).toEqual({
121
+ name: testVariableName,
122
+ isSecret: true,
123
+ value: testValue,
124
+ });
125
+ });
126
+ it("should handle variable creation error", async () => {
127
+ const testBranch = "main";
128
+ const testVariableName = "INVALID_VAR";
129
+ const testValue = "test-value";
130
+ const errorResponse = {
131
+ error: "Bad Request",
132
+ message: "Variable name already exists",
133
+ statusCode: 400,
134
+ };
135
+ const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
136
+ .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
137
+ .reply(400, errorResponse);
138
+ scope.on("request", (req, interceptor, body) => {
139
+ requestCapture.capture(req, interceptor, body);
140
+ });
141
+ await executeVariableCommand("create", {
142
+ account: TEST_ACCOUNT_NAME,
143
+ project: TEST_PROJECT_NAME,
144
+ "api-key": TEST_AUTH_TOKEN,
145
+ name: testVariableName,
146
+ value: testValue,
147
+ branch: testBranch,
148
+ "is-secret": false,
149
+ });
150
+ expect(scope.isDone()).toBe(true);
151
+ expect(mockPrintDiagnostics).toHaveBeenCalled();
152
+ const capturedRequests = requestCapture.getRequests();
153
+ expect(capturedRequests).toMatchSnapshot("variable-create-error-requests");
154
+ });
155
+ });
156
+ describe("Variable Update Command", () => {
157
+ it("should intercept PATCH request to update variable", async () => {
158
+ const testBranch = "main";
159
+ const testVariableName = "API_URL";
160
+ const testValue = "https://api-v2.example.com";
161
+ const mockResponse = {
162
+ name: testVariableName,
163
+ "is-secret": false,
164
+ value: testValue,
165
+ branch: testBranch,
166
+ createdOn: "2024-01-01T00:00:00Z",
167
+ updatedOn: "2024-01-02T00:00:00Z",
168
+ };
169
+ const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
170
+ .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`)
171
+ .reply(200, mockResponse);
172
+ scope.on("request", (req, interceptor, body) => {
173
+ requestCapture.capture(req, interceptor, body);
174
+ });
175
+ await executeVariableCommand("update", {
176
+ account: TEST_ACCOUNT_NAME,
177
+ project: TEST_PROJECT_NAME,
178
+ "api-key": TEST_AUTH_TOKEN,
179
+ name: testVariableName,
180
+ value: testValue,
181
+ branch: testBranch,
182
+ });
183
+ expect(scope.isDone()).toBe(true);
184
+ expect(mockPrintResult).toHaveBeenCalledWith(`${testVariableName} updated successfully`);
185
+ const capturedRequests = requestCapture.getRequests();
186
+ expect(capturedRequests).toMatchSnapshot("variable-update-requests");
187
+ const request = capturedRequests[0];
188
+ expect(request.method).toBe("PATCH");
189
+ expect(request.body).toEqual({
190
+ value: testValue,
191
+ });
192
+ });
193
+ it("should handle variable not found error", async () => {
194
+ const testBranch = "main";
195
+ const testVariableName = "NONEXISTENT_VAR";
196
+ const testValue = "new-value";
197
+ const errorResponse = {
198
+ error: "Not Found",
199
+ message: "Variable not found",
200
+ statusCode: 404,
201
+ };
202
+ const scope = setupAuthenticatedNock(nock(TEST_API_BASE))
203
+ .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`)
204
+ .reply(404, errorResponse);
205
+ scope.on("request", (req, interceptor, body) => {
206
+ requestCapture.capture(req, interceptor, body);
207
+ });
208
+ await executeVariableCommand("update", {
209
+ account: TEST_ACCOUNT_NAME,
210
+ project: TEST_PROJECT_NAME,
211
+ "api-key": TEST_AUTH_TOKEN,
212
+ name: testVariableName,
213
+ value: testValue,
214
+ branch: testBranch,
215
+ });
216
+ expect(scope.isDone()).toBe(true);
217
+ expect(mockPrintDiagnostics).toHaveBeenCalled();
218
+ const capturedRequests = requestCapture.getRequests();
219
+ expect(capturedRequests).toMatchSnapshot("variable-update-error-requests");
220
+ });
221
+ });
222
+ describe("Request validation", () => {
223
+ it("should include correct headers and content-type", async () => {
224
+ const testBranch = "main";
225
+ const testVariableName = "TEST_VAR";
226
+ const testValue = "test-value";
227
+ const mockResponse = {
228
+ name: testVariableName,
229
+ "is-secret": false,
230
+ value: testValue,
231
+ branch: testBranch,
232
+ createdOn: "2024-01-01T00:00:00Z",
233
+ updatedOn: "2024-01-01T00:00:00Z",
234
+ };
235
+ const scope = nock(TEST_API_BASE)
236
+ .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`)
237
+ .matchHeader("authorization", `Bearer ${TEST_AUTH_TOKEN}`)
238
+ .matchHeader("content-type", "application/json")
239
+ .reply(201, mockResponse);
240
+ scope.on("request", (req, interceptor, body) => {
241
+ requestCapture.capture(req, interceptor, body);
242
+ });
243
+ await executeVariableCommand("create", {
244
+ account: TEST_ACCOUNT_NAME,
245
+ project: TEST_PROJECT_NAME,
246
+ "api-key": TEST_AUTH_TOKEN,
247
+ name: testVariableName,
248
+ value: testValue,
249
+ branch: testBranch,
250
+ "is-secret": false,
251
+ });
252
+ expect(scope.isDone()).toBe(true);
253
+ const capturedRequests = requestCapture.getRequests();
254
+ expect(capturedRequests).toMatchSnapshot("variable-headers-validation");
255
+ });
256
+ });
257
+ });
258
+ //# sourceMappingURL=variable.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variable.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/variable.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the variable commands (create and update)\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport variableCommand from \"../../cmds/variable/index.js\";\nimport {\n setupTestEnvironment,\n cleanupTest,\n setupAuthenticatedNock,\n RequestCapture,\n TEST_API_BASE,\n TEST_ACCOUNT_NAME,\n TEST_PROJECT_NAME,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\n/**\n * Execute variable command with given arguments using actual yargs command\n */\nasync function executeVariableCommand(\n subcommand: \"create\" | \"update\",\n args: {\n account?: string;\n project?: string;\n \"api-key\"?: string;\n name: string;\n value: string;\n branch: string;\n \"is-secret\"?: boolean;\n }\n) {\n const yargsInstance = yargs([])\n .command(variableCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"variable\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args.project) {\n commandArgs.push(\"--project\", args.project);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n commandArgs.push(\"--name\", args.name);\n commandArgs.push(\"--value\", args.value);\n commandArgs.push(\"--branch\", args.branch);\n\n if (subcommand === \"create\") {\n // is-secret is required for create command\n if (args[\"is-secret\"]) {\n commandArgs.push(\"--is-secret\");\n } else {\n commandArgs.push(\"--is-secret\", \"false\");\n }\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsole\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"Variable Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Variable Create Command\", () => {\n it(\"should intercept POST request to create variable\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"API_URL\";\n const testValue = \"https://api.example.com\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(201, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the variable create command through yargs\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} created successfully`\n );\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-create-requests\");\n\n // Verify request body\n const request = capturedRequests[0];\n expect(request.method).toBe(\"POST\");\n expect(request.body).toEqual({\n name: testVariableName,\n isSecret: false,\n value: testValue,\n });\n });\n\n it(\"should handle secret variable creation\", async () => {\n const testBranch = \"production\";\n const testVariableName = \"DATABASE_PASSWORD\";\n const testValue = \"super-secret-password\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": true,\n value: \"[REDACTED]\",\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": true,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} created successfully`\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-create-secret-requests\"\n );\n\n // Verify secret flag is set correctly\n const request = capturedRequests[0];\n expect(request.body).toEqual({\n name: testVariableName,\n isSecret: true,\n value: testValue,\n });\n });\n\n it(\"should handle variable creation error\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"INVALID_VAR\";\n const testValue = \"test-value\";\n const errorResponse = {\n error: \"Bad Request\",\n message: \"Variable name already exists\",\n statusCode: 400,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .reply(400, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-create-error-requests\"\n );\n });\n });\n\n describe(\"Variable Update Command\", () => {\n it(\"should intercept PATCH request to update variable\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"API_URL\";\n const testValue = \"https://api-v2.example.com\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-02T00:00:00Z\",\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`\n )\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n `${testVariableName} updated successfully`\n );\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-update-requests\");\n\n // Verify request body contains only value for update\n const request = capturedRequests[0];\n expect(request.method).toBe(\"PATCH\");\n expect(request.body).toEqual({\n value: testValue,\n });\n });\n\n it(\"should handle variable not found error\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"NONEXISTENT_VAR\";\n const testValue = \"new-value\";\n const errorResponse = {\n error: \"Not Found\",\n message: \"Variable not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables/${encodeURIComponent(testVariableName)}`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"variable-update-error-requests\"\n );\n });\n });\n\n describe(\"Request validation\", () => {\n it(\"should include correct headers and content-type\", async () => {\n const testBranch = \"main\";\n const testVariableName = \"TEST_VAR\";\n const testValue = \"test-value\";\n const mockResponse = {\n name: testVariableName,\n \"is-secret\": false,\n value: testValue,\n branch: testBranch,\n createdOn: \"2024-01-01T00:00:00Z\",\n updatedOn: \"2024-01-01T00:00:00Z\",\n };\n\n const scope = nock(TEST_API_BASE)\n .post(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/branches/${encodeURIComponent(testBranch)}/variables`\n )\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .matchHeader(\"content-type\", \"application/json\")\n .reply(201, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeVariableCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n name: testVariableName,\n value: testValue,\n branch: testBranch,\n \"is-secret\": false,\n });\n\n expect(scope.isDone()).toBe(true);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"variable-headers-validation\");\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,iBAwB1C"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,iBA+B1C"}
@@ -14,7 +14,14 @@ export async function build(argv) {
14
14
  sourceDirectory,
15
15
  command: "build",
16
16
  logger,
17
- deploymentUrl: customDomain,
17
+ urls: customDomain
18
+ ? {
19
+ api: {
20
+ defaultUrl: customDomain,
21
+ urls: [customDomain],
22
+ },
23
+ }
24
+ : undefined,
18
25
  });
19
26
  if (result.status === "Failed") {
20
27
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAO/E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAe;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IAEpD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,OAAO;YACP,MAAM,EAAE,IAAI,aAAa,EAAE;YAC3B,eAAe;YACf,OAAO,EAAE,OAAO;YAChB,MAAM;YACN,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yBAAyB,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable node/no-process-env */\n\nimport { randomUUID } from \"node:crypto\";\nimport { join, relative, resolve } from \"node:path\";\nimport { build as runBuild } from \"@zuplo/core/cli\";\nimport { logger } from \"../common/logger.js\";\nimport { ConsoleOutput, printDiagnosticsToConsole } from \"../common/output.js\";\n\nexport interface Arguments {\n dir: string;\n customDomain?: string;\n}\n\nexport async function build(argv: Arguments) {\n const sourceDirectory = resolve(join(relative(process.cwd(), argv.dir)));\n\n const customDomain = argv.customDomain ?? undefined;\n\n const buildId = randomUUID();\n\n try {\n const result = await runBuild({\n buildId,\n output: new ConsoleOutput(),\n sourceDirectory,\n command: \"build\",\n logger,\n deploymentUrl: customDomain,\n });\n if (result.status === \"Failed\") {\n process.exit(1);\n } else {\n process.exit();\n }\n } catch (err) {\n printDiagnosticsToConsole(`Build error occurred: ${err.message}`);\n }\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAO/E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAe;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IAEpD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,OAAO;YACP,MAAM,EAAE,IAAI,aAAa,EAAE;YAC3B,eAAe;YACf,OAAO,EAAE,OAAO;YAChB,MAAM;YACN,IAAI,EAAE,YAAY;gBAChB,CAAC,CAAC;oBACE,GAAG,EAAE;wBACH,UAAU,EAAE,YAAY;wBACxB,IAAI,EAAE,CAAC,YAAY,CAAC;qBACrB;iBACF;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yBAAyB,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable node/no-process-env */\n\nimport { randomUUID } from \"node:crypto\";\nimport { join, relative, resolve } from \"node:path\";\nimport { build as runBuild } from \"@zuplo/core/cli\";\nimport { logger } from \"../common/logger.js\";\nimport { ConsoleOutput, printDiagnosticsToConsole } from \"../common/output.js\";\n\nexport interface Arguments {\n dir: string;\n customDomain?: string;\n}\n\nexport async function build(argv: Arguments) {\n const sourceDirectory = resolve(join(relative(process.cwd(), argv.dir)));\n\n const customDomain = argv.customDomain ?? undefined;\n\n const buildId = randomUUID();\n\n try {\n const result = await runBuild({\n buildId,\n output: new ConsoleOutput(),\n sourceDirectory,\n command: \"build\",\n logger,\n urls: customDomain\n ? {\n api: {\n defaultUrl: customDomain,\n urls: [customDomain],\n },\n }\n : undefined,\n });\n if (result.status === \"Failed\") {\n process.exit(1);\n } else {\n process.exit();\n }\n } catch (err) {\n printDiagnosticsToConsole(`Build error occurred: ${err.message}`);\n }\n}\n"]}