@zuplo/cli 6.57.1 → 6.57.2

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 (29) hide show
  1. package/dist/cmds/source/index.d.ts.map +1 -1
  2. package/dist/cmds/source/index.js +6 -1
  3. package/dist/cmds/source/index.js.map +1 -1
  4. package/dist/cmds/source/migrate/handler.d.ts +3 -0
  5. package/dist/cmds/source/migrate/handler.d.ts.map +1 -0
  6. package/dist/cmds/source/migrate/handler.js +648 -0
  7. package/dist/cmds/source/migrate/handler.js.map +1 -0
  8. package/dist/cmds/source/migrate/runner.d.ts +43 -0
  9. package/dist/cmds/source/migrate/runner.d.ts.map +1 -0
  10. package/dist/cmds/source/migrate/runner.js +65 -0
  11. package/dist/cmds/source/migrate/runner.js.map +1 -0
  12. package/dist/cmds/source/migrate/stringify-config.d.ts +2 -0
  13. package/dist/cmds/source/migrate/stringify-config.d.ts.map +1 -0
  14. package/dist/cmds/source/migrate/stringify-config.js +14 -0
  15. package/dist/cmds/source/migrate/stringify-config.js.map +1 -0
  16. package/dist/cmds/source/migrate/stringify-config.test.d.ts +2 -0
  17. package/dist/cmds/source/migrate/stringify-config.test.d.ts.map +1 -0
  18. package/dist/cmds/source/migrate/stringify-config.test.js +80 -0
  19. package/dist/cmds/source/migrate/stringify-config.test.js.map +1 -0
  20. package/dist/cmds/source/migrate/types.d.ts +83 -0
  21. package/dist/cmds/source/migrate/types.d.ts.map +1 -0
  22. package/dist/cmds/source/migrate/types.js +2 -0
  23. package/dist/cmds/source/migrate/types.js.map +1 -0
  24. package/dist/cmds/source/migrate.d.ts +10 -0
  25. package/dist/cmds/source/migrate.d.ts.map +1 -0
  26. package/dist/cmds/source/migrate.js +38 -0
  27. package/dist/cmds/source/migrate.js.map +1 -0
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAUxD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,IAAI,CAAC,IAAI,CAAC;KACP,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAExB,MAAM,qBAAqB,GAAG,CAAC,GAA4B,EAAE,EAAE;IAC7D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAe,EAAE,EAAE;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,GAAG;QACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG;QACZ,cAAc;QACd,cAAc;QACd,wBAAwB;QACxB,kBAAkB;QAClB,cAAc;QACd,mBAAmB;QACnB,oBAAoB;QACpB,wBAAwB;QACxB,2BAA2B;QAC3B,iBAAiB;QACjB,cAAc;QACd,iBAAiB;QACjB,eAAe;QACf,eAAe;KAChB,CAAC;IAEF,MAAM,YAAY,GAAoB;QACpC,eAAe;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;IAEF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,UAAU,CAGlD,KAAK,EAAE,YAAY,CAAC,CAAC;IAGvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,yBAAyB,CAAC,iCAAiC,CAAC,CAAC;QAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,yBAAyB,CAAC,MAAM,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yBAAyB,CACvB,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CACxD,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;QACpD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3B,yBAAyB,CAAC,MAAM,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAC1E,CAAC;IACJ,CAAC;IAED,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC3C,yBAAyB,CAAC,kCAAkC,CAAC,CAAC;IAC9D,yBAAyB,CACvB,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAC/D,CAAC;IACF,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IACxD,yBAAyB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7D,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;IACxD,yBAAyB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7D,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IACvD,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,YAAY,EAAE,CAAC;IAE5C,IAAI,CAAC;QAEH,MAAM,SAAS,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAG5E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,wBAAwB,EAAE;YACvD,GAAG,EAAE,MAAM,CAAC,eAAe;SAC5B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChC,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,kBAAkB;gBAC9B,OAAO,EACL,wIAAwI;gBAC1I,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,OAAO,IAAI,YAAY,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACxD,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAExD,MAAM,eAAe,GAAoB,IAAI,CAAC,KAAK,CACjD,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CACnC,CAAC;QAEF,MAAM,OAAO,GAAkB,IAAI,CAAC,KAAK,CACvC,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CACrC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,kBAAkB;YAC9B,OAAO,EAAE,+BAAgC,KAAe,CAAC,OAAO,EAAE;YAClE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACtE,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;QAC5C,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,6BAA6B;YACzC,OAAO,EAAE,yCAAyC;YAClD,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,YAAY,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,sBAAsB;gBAClC,OAAO,EAAE,6BAA6B;gBACtC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAiB,EAAE,CAAC;QAGtC,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;YACpC,YAAY,CAAC,QAAQ,GAAG;gBACtB,GAAG,YAAY,CAAC,QAAQ;gBACxB,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,UAAU;aACzC,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACnC,YAAY,CAAC,QAAQ,GAAG;gBACtB,GAAG,YAAY,CAAC,QAAQ;gBACxB,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;aACtC,CAAC;QACJ,CAAC;QAGD,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YACtC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,sBAAsB;YAClC,OAAO,EAAE,mCAAoC,KAAe,CAAC,OAAO,EAAE;YACtE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAC5D,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,0BAA0B,GAAG,CACjC,UAAyB,EACD,EAAE;YAC1B,MAAM,UAAU,GAA2B,EAAE,CAAC;YAE9C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAyB;wBACpC,IAAI,EAAE,KAAK;wBACX,IAAI,EAAE,IAAI,CAAC,EAAE;wBACb,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;oBAEF,IAAI,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC9C,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;oBACrB,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAyB;wBACrC,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,KAAK,EAAE,EAAE;qBACV,CAAC;oBAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAClC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;wBAC5B,CAAC;6BAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;4BACpC,QAAQ,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;wBACtD,CAAC;oBACH,CAAC;oBAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBACf,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;wBACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;4BACjC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gCAChC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oCAClB,IAAI,EAAE,KAAK;oCACX,IAAI,EAAE,OAAO;iCACd,CAAC,CAAC;4BACL,CAAC;iCAAM,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gCAClC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;oCAClB,IAAI,EAAE,KAAK;oCACX,IAAI,EAAE,OAAO,CAAC,EAAE;oCAChB,KAAK,EAAE,OAAO,CAAC,KAAK;iCACrB,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,GAAG;YAClB,GAAG,IAAI,CAAC,YAAY;YACpB,UAAU;SACX,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,iCAAiC,UAAU,CAAC,MAAM,mBAAmB,CACtE,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,8BAA+B,KAAe,CAAC,OAAO,EAAE;YACjE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjE,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,uBAAuB;gBACnC,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAC9D,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW;gBACtC,CAAC,CAAC,aAAa,UAAU,CAAC,WAAW,WAAW;gBAChD,CAAC,CAAC,2BAA2B,CAAC;YAEhC,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;YAE3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;YAE1D,OAAO;gBACL,IAAI,EAAE,MAAe;gBACrB,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,OAAO,EACL,qMAAqM;gBACvM,UAAU,EAAE,uBAAuB;gBACnC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO;gBACL,IAAI,EAAE,MAAe;gBACrB,EAAE,EAAE,OAAO;gBACX,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC;QACJ,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG;YAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,EAAE,CAAC;YACvC,GAAG,eAAe;SACnB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,uBAAuB;YACnC,OAAO,EAAE,oCAAqC,KAAe,CAAC,OAAO,EAAE;YACvE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAClE,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,uBAAuB;gBACnC,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,cAAqC,CAAC;YAGxE,IAAI,QAA4B,CAAC;YACjC,IAAI,QAA4B,CAAC;YACjC,IAAI,MAA0B,CAAC;YAC/B,IAAI,KAAyB,CAAC;YAE9B,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBAEvB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACzB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACzB,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC;iBAAM,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBAErC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;gBAC1C,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;gBAC1C,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG;oBACjC,IAAI,EAAE,OAAO;oBACb,QAAQ;oBACR,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBACxD,QAAQ;oBACR,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;iBAC1B,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5D,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvC,CAAC,CAAC,SAAS,CAAC;gBAEd,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG;oBACjC,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,WAAW,IAAI,QAAQ;iBACrC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG;oBACjC,IAAI,EAAE,QAAQ;oBACd,QAAQ;oBACR,MAAM;oBACN,QAAQ;oBACR,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;iBAC1B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACrC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,cAAc,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,iBAAiB,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,uBAAuB;YACnC,OAAO,EAAE,oCAAqC,KAAe,CAAC,OAAO,EAAE;YACvE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAoB,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACtE,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACjE,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,4BAA4B;gBACxC,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAGlC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG;gBAC1B,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAGD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACzD,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACtE,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;gBAC3D,OAAO,IAAI,CAAC;YACd,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CACrE,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,OAAO,EACL,6FAA6F;gBAC/F,UAAU,EAAE,4BAA4B;gBACxC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,OAAO,EACL,oEAAoE;gBACtE,UAAU,EAAE,4BAA4B;gBACxC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,kDAAkD;gBAC3D,UAAU,EAAE,4BAA4B;gBACxC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IACE,IAAI,CAAC,eAAe,CAAC,iBAAiB;YACtC,IAAI,CAAC,eAAe,CAAC,iBAAiB,KAAK,kBAAkB,EAC7D,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnB,OAAO,EACL,sEAAsE;gBACxE,UAAU,EAAE,4BAA4B;gBACxC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAGD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,4BAA4B;YACxC,OAAO,EAAE,yCAA0C,KAAe,CAAC,OAAO,EAAE;YAC5E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,MAAM,CAAC,eAAe,EACtB,mBAAmB,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,qBAAqB;gBACjC,OAAO,EAAE,6BAA6B;gBACtC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAGD,MAAM,iBAAiB,GAAG,MAAM,KAAK,CACnC,kDAAkD,CACnD,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5B,MAAM,kBAAkB,GAAG;YACzB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,cAAc;aACtB;YACD,YAAY,EAAE;gBACZ,MAAM,EAAE,iBAAiB,CAAC,OAAO,IAAI,QAAQ;gBAC7C,KAAK,EAAE,iBAAiB,CAAC,YAAY,CAAC,KAAK,IAAI,SAAS;gBACxD,WAAW,EAAE,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,SAAS;aACtE;YACD,eAAe,EAAE;gBACf,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,MAAM;gBACtB,kBAAkB,EAAE,MAAM;gBAC1B,UAAU,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,IAAI,IAAI;aACjE;SACF,CAAC;QAEF,MAAM,SAAS,CACb,eAAe,EACf,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5C,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,qBAAqB;YACjC,OAAO,EAAE,kCAAmC,KAAe,CAAC,OAAO,EAAE;YACrE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,MAAM,CAAC,eAAe,EACtB,oBAAoB,CACrB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,8BAA8B;gBACvC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,+EAA+E,CAChF,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5B,MAAM,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,iBAAiB;YAC7B,OAAO,EAAE,mCAAoC,KAAe,CAAC,OAAO,EAAE;YACtE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QAE1E,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,gCAAgC;gBAC5C,OAAO,EAAE,6BAA6B;gBACtC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CACnC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CACzC,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;YAC1C,kBAAkB,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,SAAS,CACb,eAAe,EACf,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5C,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,gCAAgC;YAC5C,OAAO,EAAE,6CAA8C,KAAe,CAAC,OAAO,EAAE;YAChF,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;YAClD,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,kBAAkB,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE;oBAC9D,UAAU,EAAE,qBAAqB;oBACjC,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,SAAS,UAAU,CAAC,MAAM,gCAAgC,CAC3D,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,qBAAqB;YACjC,OAAO,EAAE,kCAAmC,KAAe,CAAC,OAAO,EAAE;YACrE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE;IACxD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC;SACvD,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACvB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,oBAAoB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,KAAM,KAAe,CAAC,OAAO,EAAE;oBAC3G,UAAU,EAAE,mBAAmB;oBAC/B,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,gCAAiC,KAAe,CAAC,OAAO,EAAE;YACnE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAoB,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IAClE,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,YAAY,CAAC;gBACtB,UAAU,EAAE,mBAAmB;gBAC/B,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,MAAM,CAAC,eAAe,EACtB,wBAAwB,CACzB,CAAC;QAEF,MAAM,aAAa,GAAG,EAAE,CAAC;QAEzB,aAAa,CAAC,IAAI,CAAC;;;6FAGsE,CAAC,CAAC;QAE3F,aAAa,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QACpE,aAAa,CAAC,IAAI,CAChB,uCAAuC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAC5E,CAAC;QAEF,MAAM,SAAS,CACb,UAAU,EACV,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CACjE,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,YAAY,CAAC;YACtB,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,gCAAiC,KAAe,CAAC,OAAO,EAAE;YACnE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC","sourcesContent":["import {\n readFile,\n writeFile,\n stat,\n mkdir,\n rename,\n unlink,\n} from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport glob from \"fast-glob\";\nimport type {\n DevPortalConfig,\n DevPortalAuthConfig,\n SidebarConfig,\n} from \"@zuplo/types\";\nimport { format } from \"prettier\";\nimport { printDiagnosticsToConsole } from \"../../../common/output.js\";\nimport chalk from \"chalk\";\nimport { PluginResult, runPlugins } from \"./runner.js\";\nimport { stringifyConfig } from \"./stringify-config.js\";\nimport type {\n Arguments,\n MigrationConfig,\n MigrationData,\n MigrationPlugin,\n ZudokuConfig,\n ZudokuNavigationItem,\n} from \"./types.js\";\n\nconst exists = (path: string) =>\n stat(path)\n .then(() => true)\n .catch(() => false);\n\nconst deleteUndefinedValues = (obj: Record<string, unknown>) => {\n Object.entries(obj).forEach(([key, value]) => {\n if (value === undefined) {\n delete obj[key];\n }\n });\n};\n\nconst execAsync = promisify(exec);\n\nexport const migrateDevPortal = async (args: Arguments) => {\n const absoluteBaseDir = path.isAbsolute(args.dir)\n ? args.dir\n : path.join(process.cwd(), args.dir);\n\n const tasks = [\n checkGitStatus,\n loadInputFiles,\n validateDevPortalEnabled,\n convertBasicConfig,\n convertSidebar,\n handleApiReferences,\n handleAuthentication,\n handleAdditionalFeatures,\n updatePackageJsonWorkspaces,\n createPackageJson,\n createTsConfig,\n moveMarkdownFiles,\n writeConfigFile,\n cleanupOldFiles,\n ];\n\n const pluginConfig: MigrationConfig = {\n absoluteBaseDir,\n force: args.force,\n };\n\n const { errors, warnings, notes } = await runPlugins<\n MigrationConfig,\n MigrationData\n >(tasks, pluginConfig);\n\n // Handle plugin errors first (these are execution failures)\n if (errors.length > 0) {\n printDiagnosticsToConsole(\"❌ Migration failed with errors:\");\n errors.forEach((error) =>\n printDiagnosticsToConsole(`- [${error.pluginName}] ${error.message}`)\n );\n process.exit(1);\n }\n\n printDiagnosticsToConsole(\n chalk.green(\"\\n✅ Migration completed successfully! 🎉\")\n );\n\n if (notes.length > 0) {\n printDiagnosticsToConsole(\"\\n📝 Migration notes:\");\n notes.forEach((note) => printDiagnosticsToConsole(`- ${note}`));\n }\n\n if (warnings.length > 0) {\n printDiagnosticsToConsole(\"\\n⚠️ Plugin warnings:\");\n warnings.forEach((warning) =>\n printDiagnosticsToConsole(`- [${warning.pluginName}] ${warning.message}`)\n );\n }\n\n printDiagnosticsToConsole(\"\\nNext steps:\");\n printDiagnosticsToConsole(\"1. Switch to the docs directory:\");\n printDiagnosticsToConsole(\n ` ${chalk.cyan(`cd ${path.join(absoluteBaseDir, \"docs\")}`)}`\n );\n printDiagnosticsToConsole(\"\\n2. Install dependencies:\");\n printDiagnosticsToConsole(` ${chalk.cyan(\"npm install\")}`);\n printDiagnosticsToConsole(\"\\n3. Start the dev portal:\");\n printDiagnosticsToConsole(` ${chalk.cyan(\"npm run dev\")}`);\n printDiagnosticsToConsole(\"\");\n};\n\nconst checkGitStatus: MigrationPlugin = async (config) => {\n if (config.force) return new PluginResult();\n\n try {\n // Check if we're in a git repository first\n await execAsync(\"git rev-parse --git-dir\", { cwd: config.absoluteBaseDir });\n\n // Check for uncommitted changes\n const status = await execAsync(\"git status --porcelain\", {\n cwd: config.absoluteBaseDir,\n });\n if (status.stdout.trim() !== \"\") {\n return new PluginResult({\n pluginName: \"check-git-status\",\n message:\n \"There are uncommitted changes in the repository.\\nCommit or stash them before running the migration, or use --force to proceed anyway.\",\n severity: \"error\",\n });\n }\n } catch {\n // If git command fails, likely not a git repository - continue silently\n }\n return new PluginResult();\n};\n\nconst loadInputFiles: MigrationPlugin = async (config, { data }) => {\n const dir = config.absoluteBaseDir;\n\n try {\n const packageJson = JSON.parse(\n await readFile(path.join(dir, \"package.json\"), \"utf-8\")\n );\n const inputFile = path.join(dir, \"config/dev-portal.json\");\n const sidebarFile = path.join(dir, \"docs/sidebar.json\");\n\n const devPortalConfig: DevPortalConfig = JSON.parse(\n await readFile(inputFile, \"utf-8\")\n );\n\n const sidebar: SidebarConfig = JSON.parse(\n await readFile(sidebarFile, \"utf-8\")\n );\n\n data.packageJson = packageJson;\n data.devPortalConfig = devPortalConfig;\n data.sidebar = sidebar;\n\n return new PluginResult();\n } catch (error) {\n return new PluginResult({\n pluginName: \"load-input-files\",\n message: `Failed to load input files: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst validateDevPortalEnabled: MigrationPlugin = async (_, { data }) => {\n if (data.devPortalConfig?.enabled === false) {\n return new PluginResult({\n pluginName: \"validate-dev-portal-enabled\",\n message: \"Dev portal is not enabled in the config\",\n severity: \"error\",\n });\n }\n\n return new PluginResult();\n};\n\nconst convertBasicConfig: MigrationPlugin = async (_, { data }) => {\n try {\n if (!data.devPortalConfig) {\n return new PluginResult({\n pluginName: \"convert-basic-config\",\n message: \"Dev portal config not found\",\n severity: \"error\",\n });\n }\n\n const zudokuConfig: ZudokuConfig = {};\n\n // Map favicon\n if (data.devPortalConfig.faviconUrl) {\n zudokuConfig.metadata = {\n ...zudokuConfig.metadata,\n favicon: data.devPortalConfig.faviconUrl,\n };\n }\n\n // Map page title\n if (data.devPortalConfig.pageTitle) {\n zudokuConfig.metadata = {\n ...zudokuConfig.metadata,\n title: data.devPortalConfig.pageTitle,\n };\n }\n\n // Map site pathname to basePath\n if (data.devPortalConfig.sitePathname) {\n zudokuConfig.basePath = data.devPortalConfig.sitePathname;\n }\n\n data.zudokuConfig = zudokuConfig;\n return new PluginResult();\n } catch (error) {\n return new PluginResult({\n pluginName: \"convert-basic-config\",\n message: `Failed to convert basic config: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst convertSidebar: MigrationPlugin = async (_, { data }) => {\n try {\n if (!data.sidebar || !data.zudokuConfig) {\n return new PluginResult({\n pluginName: \"convert-sidebar\",\n message: \"Required data not found\",\n severity: \"error\",\n });\n }\n\n const convertSidebarToNavigation = (\n oldSidebar: SidebarConfig\n ): ZudokuNavigationItem[] => {\n const navigation: ZudokuNavigationItem[] = [];\n\n if (!oldSidebar.docs) {\n return navigation;\n }\n\n for (const item of oldSidebar.docs) {\n if (typeof item === \"string\") {\n navigation.push(item);\n } else if (item.type === \"doc\") {\n const docItem: ZudokuNavigationItem = {\n type: \"doc\",\n file: item.id,\n label: item.label,\n };\n\n if (\"defaultPage\" in item && item.defaultPage) {\n docItem.path = \"/\";\n }\n\n navigation.push(docItem);\n } else if (item.type === \"category\") {\n const category: ZudokuNavigationItem = {\n type: \"category\",\n label: item.label,\n items: [],\n };\n\n if (item.link) {\n if (typeof item.link === \"string\") {\n category.link = item.link;\n } else if (item.link.type === \"doc\") {\n category.link = { type: \"doc\", file: item.link.id };\n }\n }\n\n if (item.items) {\n category.items = [];\n for (const subItem of item.items) {\n if (typeof subItem === \"string\") {\n category.items.push({\n type: \"doc\",\n file: subItem,\n });\n } else if (subItem.type === \"doc\") {\n category.items.push({\n type: \"doc\",\n file: subItem.id,\n label: subItem.label,\n });\n }\n }\n }\n\n navigation.push(category);\n }\n }\n\n return navigation;\n };\n\n const navigation = convertSidebarToNavigation(data.sidebar);\n data.zudokuConfig = {\n ...data.zudokuConfig,\n navigation,\n };\n\n const result = new PluginResult();\n if (navigation.length > 0) {\n result.notes.push(\n `Converted sidebar navigation: ${navigation.length} navigation items`\n );\n }\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"convert-sidebar\",\n message: `Failed to convert sidebar: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst handleApiReferences: MigrationPlugin = async (_, { data }) => {\n try {\n if (!data.sidebar || !data.zudokuConfig) {\n return new PluginResult({\n pluginName: \"handle-api-references\",\n message: \"Required data not found\",\n severity: \"error\",\n });\n }\n\n const apiRefItems = data.sidebar.docs?.filter(\n (item) => typeof item !== \"string\" && item.type === \"api-ref\"\n );\n\n const result = new PluginResult();\n\n if (!apiRefItems || apiRefItems.length === 0) {\n return result;\n }\n\n data.zudokuConfig.apis = apiRefItems.map((apiRefItem, index) => {\n const specInput = apiRefItem.defaultSpec\n ? `../config/${apiRefItem.defaultSpec}.oas.json`\n : \"../config/routes.oas.json\";\n\n const apiPath = index === 0 ? \"/api\" : `/api-${index + 1}`;\n\n result.notes.push(`Migrated API reference to ${apiPath}`);\n\n return {\n type: \"file\" as const,\n input: specInput,\n path: apiPath,\n };\n });\n\n if (apiRefItems.length > 1) {\n result.warnings.push({\n message:\n \"Multiple API references found. Adding multiple links to the navigation. For advanced use cases you can use an API catalog. See: https://zuplo.com/docs/dev-portal/zudoku/configuration/api-catalog.\",\n pluginName: \"handle-api-references\",\n severity: \"warning\",\n });\n }\n\n const navigationLinks = apiRefItems.map((apiRefItem, index) => {\n const apiPath = index === 0 ? \"/api\" : `/api-${index + 1}`;\n return {\n type: \"link\" as const,\n to: apiPath,\n label: apiRefItem.label,\n };\n });\n\n // Add API navigation links to the existing navigation\n data.zudokuConfig.navigation = [\n ...(data.zudokuConfig.navigation || []),\n ...navigationLinks,\n ];\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"handle-api-references\",\n message: `Failed to handle API references: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst handleAuthentication: MigrationPlugin = async (_, { data }) => {\n try {\n if (!data.devPortalConfig || !data.zudokuConfig) {\n return new PluginResult({\n pluginName: \"handle-authentication\",\n message: \"Required data not found\",\n severity: \"error\",\n });\n }\n\n if (data.devPortalConfig.authentication) {\n const auth = data.devPortalConfig.authentication as DevPortalAuthConfig;\n\n // Extract client info - handle both current and legacy structures\n let clientId: string | undefined;\n let audience: string | undefined;\n let issuer: string | undefined;\n let scope: string | undefined;\n\n if (\"clientId\" in auth) {\n // Current format\n clientId = auth.clientId;\n audience = auth.audience;\n issuer = auth.issuer;\n scope = auth.scope;\n } else if (\"devPortalClient\" in auth) {\n // Legacy format\n clientId = auth.devPortalClient?.clientId;\n audience = auth.devPortalClient?.audience;\n issuer = auth.authority;\n }\n\n if (auth.provider === \"auth0\") {\n data.zudokuConfig.authentication = {\n type: \"auth0\",\n clientId,\n domain: issuer?.replace(\"https://\", \"\").replace(\"/\", \"\"),\n audience,\n scopes: scope?.split(\" \"),\n };\n } else if (auth.provider === \"clerk\") {\n const clerkPubKey = issuer?.match(/clerk\\.accounts\\.dev/)?.[0]\n ? issuer.split(\"://\")[1]?.split(\".\")[0]\n : undefined;\n\n data.zudokuConfig.authentication = {\n type: \"clerk\",\n clerkPubKey: clerkPubKey || clientId,\n };\n } else {\n // All other providers (azure-ad, okta, oidc, etc.) use OpenID Connect\n data.zudokuConfig.authentication = {\n type: \"openid\",\n clientId,\n issuer,\n audience,\n scopes: scope?.split(\" \"),\n };\n }\n }\n\n if (data.zudokuConfig.authentication) {\n deleteUndefinedValues(data.zudokuConfig.authentication);\n }\n\n const result = new PluginResult();\n if (data.zudokuConfig.authentication) {\n result.notes.push(\n `Configured ${data.zudokuConfig.authentication.type} authentication`\n );\n }\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"handle-authentication\",\n message: `Failed to handle authentication: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst handleAdditionalFeatures: MigrationPlugin = async (_, { data }) => {\n try {\n if (!data.devPortalConfig || !data.sidebar || !data.zudokuConfig) {\n return new PluginResult({\n pluginName: \"handle-additional-features\",\n message: \"Required data not found\",\n severity: \"error\",\n });\n }\n\n const result = new PluginResult();\n\n // Handle API keys\n if (data.devPortalConfig.apiKeys) {\n data.zudokuConfig.apiKeys = {\n enabled: true,\n };\n }\n\n // Check for unsupported specs filtering\n const hasSpecsFiltering = data.sidebar.docs?.some((item) => {\n if (typeof item === \"string\") return false;\n if (item.type === \"doc\" && \"specs\" in item && item.specs) return true;\n if (item.type === \"category\" && \"specs\" in item && item.specs)\n return true;\n if (item.type === \"category\" && item.items) {\n return item.items.some(\n (subItem) =>\n typeof subItem !== \"string\" && \"specs\" in subItem && subItem.specs\n );\n }\n return false;\n });\n\n if (hasSpecsFiltering) {\n result.warnings.push({\n message:\n \"The 'specs' property for filtering docs by OpenAPI specification is not supported in Zudoku\",\n pluginName: \"handle-additional-features\",\n severity: \"warning\",\n });\n }\n\n if (data.devPortalConfig.monetization) {\n result.warnings.push({\n message:\n \"Monetization configuration is not supported in the new dev portal.\",\n pluginName: \"handle-additional-features\",\n severity: \"warning\",\n });\n }\n if (data.devPortalConfig.enableMetering) {\n result.warnings.push({\n message: \"Metering is not supported in the new dev portal.\",\n pluginName: \"handle-additional-features\",\n severity: \"warning\",\n });\n }\n if (\n data.devPortalConfig.authorizePathname &&\n data.devPortalConfig.authorizePathname !== \"/oauth/authorize\"\n ) {\n result.warnings.push({\n message:\n \"Custom authorize pathname is not configurable in the new dev portal.\",\n pluginName: \"handle-additional-features\",\n severity: \"warning\",\n });\n }\n\n // Add notes for successfully configured features\n if (data.zudokuConfig.apiKeys?.enabled) {\n result.notes.push(\"Enabled API keys support\");\n }\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"handle-additional-features\",\n message: `Failed to handle additional features: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst createPackageJson: MigrationPlugin = async (config) => {\n try {\n const packageJsonFile = path.join(\n config.absoluteBaseDir,\n \"docs/package.json\"\n );\n\n if (!config.force && (await exists(packageJsonFile))) {\n return new PluginResult({\n pluginName: \"create-package-json\",\n message: \"package.json already exists\",\n severity: \"warning\",\n });\n }\n\n // get the version of zudoku from npm online:\n const zudokuPackageJson = await fetch(\n \"https://cdn.jsdelivr.net/npm/zudoku/package.json\"\n ).then((res) => res.json());\n\n const packageJsonContent = {\n name: \"docs\",\n version: \"1.0.0\",\n type: \"module\",\n private: true,\n scripts: {\n dev: \"zudoku dev\",\n build: \"zudoku build\",\n start: \"zudoku start\",\n },\n dependencies: {\n zudoku: zudokuPackageJson.version || \"latest\",\n react: zudokuPackageJson.dependencies.react || \"^19.0.0\",\n \"react-dom\": zudokuPackageJson.dependencies[\"react-dom\"] || \"^19.0.0\",\n },\n devDependencies: {\n \"@types/node\": \"^22\",\n \"@types/react\": \">=19\",\n \"@types/react-dom\": \">=19\",\n typescript: zudokuPackageJson.devDependencies.typescript || \"^5\",\n },\n };\n\n await writeFile(\n packageJsonFile,\n JSON.stringify(packageJsonContent, null, 2)\n );\n\n const result = new PluginResult();\n result.notes.push(\"Wrote docs/package.json\");\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"create-package-json\",\n message: `Failed to create package.json: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst createTsConfig: MigrationPlugin = async (config) => {\n try {\n const tsConfigFile = path.join(\n config.absoluteBaseDir,\n \"docs/tsconfig.json\"\n );\n\n if (!config.force && (await exists(tsConfigFile))) {\n return new PluginResult({\n pluginName: \"create-tsconfig\",\n message: \"tsconfig.json already exists\",\n severity: \"warning\",\n });\n }\n\n const tsConfigContent = await fetch(\n \"https://cdn.jsdelivr.net/npm/create-zudoku/dist/templates/zuplo/tsconfig.json\"\n ).then((res) => res.text());\n\n await writeFile(tsConfigFile, tsConfigContent);\n\n const result = new PluginResult();\n result.notes.push(\"Wrote docs/tsconfig.json\");\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"create-tsconfig\",\n message: `Failed to create tsconfig.json: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst updatePackageJsonWorkspaces: MigrationPlugin = async (config) => {\n try {\n const packageJsonFile = path.join(config.absoluteBaseDir, \"package.json\");\n\n if (!(await exists(packageJsonFile))) {\n return new PluginResult({\n pluginName: \"update-package-json-workspaces\",\n message: \"Root package.json not found\",\n severity: \"warning\",\n });\n }\n\n const packageJsonContent = JSON.parse(\n await readFile(packageJsonFile, \"utf-8\")\n );\n\n if (Array.isArray(packageJsonContent.workspaces)) {\n if (!packageJsonContent.workspaces.includes(\"docs\")) {\n packageJsonContent.workspaces.push(\"docs\");\n }\n } else if (!packageJsonContent.workspaces) {\n packageJsonContent.workspaces = [\"docs\"];\n }\n\n await writeFile(\n packageJsonFile,\n JSON.stringify(packageJsonContent, null, 2)\n );\n\n const result = new PluginResult();\n result.notes.push(\"Updated package.json workspaces\");\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"update-package-json-workspaces\",\n message: `Failed to update package.json workspaces: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst moveMarkdownFiles: MigrationPlugin = async (config) => {\n try {\n const docsDir = path.join(config.absoluteBaseDir, \"docs\");\n const pagesDir = path.join(docsDir, \"pages\");\n\n const markdownFiles = await glob([\"*.md\", \"*.mdx\"], {\n cwd: docsDir,\n absolute: false,\n });\n\n try {\n await mkdir(pagesDir, { recursive: true });\n } catch {\n // directory might already exist, that's okay\n }\n\n const result = new PluginResult();\n const movedFiles: string[] = [];\n\n for (const file of markdownFiles) {\n const sourcePath = path.join(docsDir, file);\n const targetPath = path.join(pagesDir, file);\n\n try {\n await rename(sourcePath, targetPath);\n movedFiles.push(file);\n } catch (error) {\n result.warnings.push({\n message: `Failed to move ${file}: ${(error as Error).message}`,\n pluginName: \"move-markdown-files\",\n severity: \"warning\",\n });\n }\n }\n\n if (movedFiles.length > 0) {\n result.notes.push(\n `Moved ${movedFiles.length} markdown files to docs/pages/`\n );\n }\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"move-markdown-files\",\n message: `Failed to move markdown files: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst cleanupOldFiles: MigrationPlugin = async (config) => {\n try {\n const filesToCleanup = [\n path.join(config.absoluteBaseDir, \"config/dev-portal.json\"),\n path.join(config.absoluteBaseDir, \"docs/sidebar.json\"),\n ];\n\n const result = new PluginResult();\n const cleanedFiles: string[] = [];\n\n for (const filePath of filesToCleanup) {\n try {\n if (await exists(filePath)) {\n await unlink(filePath);\n cleanedFiles.push(path.relative(config.absoluteBaseDir, filePath));\n }\n } catch (error) {\n result.warnings.push({\n message: `Failed to remove ${path.relative(config.absoluteBaseDir, filePath)}: ${(error as Error).message}`,\n pluginName: \"cleanup-old-files\",\n severity: \"warning\",\n });\n }\n }\n\n if (cleanedFiles.length > 0) {\n result.notes.push(`Cleaned up old files: ${cleanedFiles.join(\", \")}`);\n }\n\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"cleanup-old-files\",\n message: `Failed to cleanup old files: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n\nconst writeConfigFile: MigrationPlugin = async (config, { data }) => {\n try {\n if (!data.zudokuConfig) {\n return new PluginResult({\n pluginName: \"write-output-file\",\n message: \"Zudoku config not found\",\n severity: \"error\",\n });\n }\n\n const outputFile = path.join(\n config.absoluteBaseDir,\n \"docs/zudoku.config.tsx\"\n );\n\n const configContent = [];\n\n configContent.push(`// This file was generated by the Zuplo CLI migrate-dev-portal command.\n// It is used to configure the Zuplo dev portal.\n// You can edit this file to customize the dev portal.\n// For more information, see https://zuplo.com/docs/dev-portal/zudoku/configuration/overview`);\n\n configContent.push(`import type { ZudokuConfig } from \"zudoku\";\\n`);\n configContent.push(\n `export const config: ZudokuConfig = ${stringifyConfig(data.zudokuConfig)}`\n );\n\n await writeFile(\n outputFile,\n await format(configContent.join(\"\\n\"), { parser: \"typescript\" })\n );\n\n const result = new PluginResult();\n result.notes.push(\"Wrote docs/zudoku.config.tsx\");\n return result;\n } catch (error) {\n return new PluginResult({\n pluginName: \"write-output-file\",\n message: `Failed to write output file: ${(error as Error).message}`,\n severity: \"error\",\n });\n }\n};\n"]}
@@ -0,0 +1,43 @@
1
+ export interface PluginConfiguration {}
2
+ export type IssueSeverity = "error" | "warning" | "note";
3
+ export interface PluginIssue {
4
+ pluginName: string;
5
+ message: string;
6
+ severity: IssueSeverity;
7
+ }
8
+ export declare class PluginIssueError extends Error {
9
+ readonly issue: PluginIssue;
10
+ readonly pluginName?: string | undefined;
11
+ constructor(issue: PluginIssue, pluginName?: string | undefined);
12
+ }
13
+ export declare class PluginResult {
14
+ notes: string[];
15
+ errors: PluginIssue[];
16
+ warnings: PluginIssue[];
17
+ constructor(err?: PluginIssue);
18
+ }
19
+ export interface PluginRunResult<
20
+ TData extends Record<string, unknown> = Record<string, unknown>,
21
+ > {
22
+ data: TData;
23
+ notes: string[];
24
+ errors: PluginIssue[];
25
+ warnings: PluginIssue[];
26
+ }
27
+ export interface Plugin<
28
+ TConfig extends PluginConfiguration = PluginConfiguration,
29
+ TData extends Record<string, unknown> = Record<string, unknown>,
30
+ > {
31
+ (config: TConfig, results: PluginRunResult<TData>): Promise<PluginResult>;
32
+ }
33
+ export declare function runPlugins<
34
+ T extends PluginConfiguration = PluginConfiguration,
35
+ TData extends Record<string, unknown> = Record<string, unknown>,
36
+ >(
37
+ tasksToRun: Plugin<T, TData>[],
38
+ config: T,
39
+ options?: {
40
+ throwOnException: boolean;
41
+ }
42
+ ): Promise<PluginRunResult<TData>>;
43
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/runner.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,mBAAmB;CAAG;AAEvC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,KAAK,EAAE,WAAW;aAClB,UAAU,CAAC,EAAE,MAAM;gBADnB,KAAK,EAAE,WAAW,EAClB,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,qBAAa,YAAY;IAChB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,MAAM,EAAE,WAAW,EAAE,CAAM;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAM;gBAExB,GAAG,CAAC,EAAE,WAAW;CAK9B;AAED,MAAM,WAAW,eAAe,CAC9B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE/D,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,MAAM,CACrB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE/D,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3E;AAED,wBAAsB,UAAU,CAC9B,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACnD,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE/D,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAC9B,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE;IAAE,gBAAgB,EAAE,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAmDjC"}
@@ -0,0 +1,65 @@
1
+ export class PluginIssueError extends Error {
2
+ issue;
3
+ pluginName;
4
+ constructor(issue, pluginName) {
5
+ super(issue.message);
6
+ this.issue = issue;
7
+ this.pluginName = pluginName;
8
+ this.name = "PluginIssueError";
9
+ }
10
+ }
11
+ export class PluginResult {
12
+ notes = [];
13
+ errors = [];
14
+ warnings = [];
15
+ constructor(err) {
16
+ if (err) {
17
+ this.errors.push(err);
18
+ }
19
+ }
20
+ }
21
+ export async function runPlugins(tasksToRun, config, options) {
22
+ const warnings = [];
23
+ const errors = [];
24
+ const notes = [];
25
+ const data = {};
26
+ for await (const plugin of tasksToRun) {
27
+ try {
28
+ const pluginResult = await plugin(config, {
29
+ data,
30
+ notes,
31
+ errors,
32
+ warnings,
33
+ });
34
+ errors.push(...pluginResult.errors.map((err) => {
35
+ if (err.pluginName === "") {
36
+ err.pluginName = plugin.name;
37
+ }
38
+ return err;
39
+ }));
40
+ notes.push(...pluginResult.notes);
41
+ warnings.push(...pluginResult.warnings);
42
+ if (pluginResult.errors.length > 0) {
43
+ break;
44
+ }
45
+ }
46
+ catch (err) {
47
+ if (err instanceof PluginIssueError) {
48
+ errors.push({ ...err.issue, pluginName: err.pluginName ?? "unknown" });
49
+ }
50
+ else {
51
+ errors.push({
52
+ pluginName: plugin.name || "unknown",
53
+ message: err instanceof Error ? err.message : String(err),
54
+ severity: "error",
55
+ });
56
+ }
57
+ if (options?.throwOnException) {
58
+ throw err;
59
+ }
60
+ break;
61
+ }
62
+ }
63
+ return { errors, warnings, data, notes };
64
+ }
65
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/runner.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEvB;IACA;IAFlB,YACkB,KAAkB,EAClB,UAAmB;QAEnC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHL,UAAK,GAAL,KAAK,CAAa;QAClB,eAAU,GAAV,UAAU,CAAS;QAGnC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IAChB,KAAK,GAAa,EAAE,CAAC;IACrB,MAAM,GAAkB,EAAE,CAAC;IAC3B,QAAQ,GAAkB,EAAE,CAAC;IAEpC,YAAY,GAAiB;QAC3B,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAkBD,MAAM,CAAC,KAAK,UAAU,UAAU,CAI9B,UAA8B,EAC9B,MAAS,EACT,OAAuC;IAEvC,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,EAAW,CAAC;IAEzB,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE;gBACxC,IAAI;gBACJ,KAAK;gBACL,MAAM;gBACN,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjC,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;oBAC1B,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC/B,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,CAAC,CACH,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAGnC,MAAM;YACR,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBAEN,MAAM,CAAC,IAAI,CAAC;oBACV,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;oBACpC,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;oBACzD,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC;YAGD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface PluginConfiguration {}\n\nexport type IssueSeverity = \"error\" | \"warning\" | \"note\";\n\nexport interface PluginIssue {\n pluginName: string;\n message: string;\n severity: IssueSeverity;\n}\n\nexport class PluginIssueError extends Error {\n constructor(\n public readonly issue: PluginIssue,\n public readonly pluginName?: string\n ) {\n super(issue.message);\n this.name = \"PluginIssueError\";\n }\n}\n\nexport class PluginResult {\n public notes: string[] = [];\n public errors: PluginIssue[] = [];\n public warnings: PluginIssue[] = [];\n\n constructor(err?: PluginIssue) {\n if (err) {\n this.errors.push(err);\n }\n }\n}\n\nexport interface PluginRunResult<\n TData extends Record<string, unknown> = Record<string, unknown>,\n> {\n data: TData;\n notes: string[];\n errors: PluginIssue[];\n warnings: PluginIssue[];\n}\n\nexport interface Plugin<\n TConfig extends PluginConfiguration = PluginConfiguration,\n TData extends Record<string, unknown> = Record<string, unknown>,\n> {\n (config: TConfig, results: PluginRunResult<TData>): Promise<PluginResult>;\n}\n\nexport async function runPlugins<\n T extends PluginConfiguration = PluginConfiguration,\n TData extends Record<string, unknown> = Record<string, unknown>,\n>(\n tasksToRun: Plugin<T, TData>[],\n config: T,\n options?: { throwOnException: boolean }\n): Promise<PluginRunResult<TData>> {\n const warnings: PluginIssue[] = [];\n const errors: PluginIssue[] = [];\n const notes: string[] = [];\n const data = {} as TData;\n\n for await (const plugin of tasksToRun) {\n try {\n const pluginResult = await plugin(config, {\n data,\n notes,\n errors,\n warnings,\n });\n errors.push(\n ...pluginResult.errors.map((err) => {\n if (err.pluginName === \"\") {\n err.pluginName = plugin.name;\n }\n return err;\n })\n );\n notes.push(...pluginResult.notes);\n warnings.push(...pluginResult.warnings);\n if (pluginResult.errors.length > 0) {\n // Don't continue the build if any of the plugins fail\n // it will just create more errors that aren't useful\n break;\n }\n } catch (err) {\n if (err instanceof PluginIssueError) {\n errors.push({ ...err.issue, pluginName: err.pluginName ?? \"unknown\" });\n } else {\n // Handle generic errors by converting them to PluginIssue\n errors.push({\n pluginName: plugin.name || \"unknown\",\n message: err instanceof Error ? err.message : String(err),\n severity: \"error\",\n });\n }\n\n if (options?.throwOnException) {\n throw err;\n }\n // Don't continue the build if there is an exception\n // it will just create more errors that aren't useful\n break;\n }\n }\n\n return { errors, warnings, data, notes };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const stringifyConfig: (val: unknown) => string | undefined;
2
+ //# sourceMappingURL=stringify-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-config.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,eAAe,GAAI,KAAK,OAAO,uBAAgC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { stringify } from "javascript-stringify";
2
+ const ENV_REGEX = /\$env\(([a-zA-Z0-9_]+)\)/;
3
+ const replacer = (value, _indent, stringify) => {
4
+ if (typeof value === "string" && ENV_REGEX.test(value)) {
5
+ return value
6
+ .split(new RegExp(ENV_REGEX, "g"))
7
+ .map((varName, i) => i % 2 ? `process.env.${varName}` : varName && JSON.stringify(varName))
8
+ .filter(Boolean)
9
+ .join(" + ");
10
+ }
11
+ return stringify(value);
12
+ };
13
+ export const stringifyConfig = (val) => stringify(val, replacer, 2);
14
+ //# sourceMappingURL=stringify-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-config.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAM7C,MAAM,QAAQ,GAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK;aACT,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAElB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACtE;aACA,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC","sourcesContent":["import { stringify } from \"javascript-stringify\";\n\ntype ReplacerFn = NonNullable<Parameters<typeof stringify>[1]>;\n\nconst ENV_REGEX = /\\$env\\(([a-zA-Z0-9_]+)\\)/;\n\n/**\n * Turn \"prefix $env(NAME) suffix\"\n * into `\"prefix \" + process.env.NAME + \" suffix\"`\n */\nconst replacer: ReplacerFn = (value, _indent, stringify) => {\n if (typeof value === \"string\" && ENV_REGEX.test(value)) {\n return value\n .split(new RegExp(ENV_REGEX, \"g\"))\n .map((varName, i) =>\n // even indices → literal text, odd → env name\n i % 2 ? `process.env.${varName}` : varName && JSON.stringify(varName)\n )\n .filter(Boolean)\n .join(\" + \");\n }\n\n return stringify(value);\n};\n\nexport const stringifyConfig = (val: unknown) => stringify(val, replacer, 2);\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stringify-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-config.test.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ import { describe, it } from "node:test";
2
+ import { strictEqual } from "node:assert";
3
+ import { stringifyConfig } from "./stringify-config.js";
4
+ describe("stringifyConfig", () => {
5
+ it("should handle env var patterns", () => {
6
+ const config = {
7
+ enabled: true,
8
+ count: 42,
9
+ ratio: 3.14,
10
+ empty: null,
11
+ notDefined: undefined,
12
+ normalString: "regular string",
13
+ apiKey: "$env(API_KEY)",
14
+ dbUrl: "$env(DATABASE_URL)",
15
+ title: "$env(APP_TITLE) Portal",
16
+ baseUrl: "https://$env(DOMAIN)",
17
+ fullUrl: "https://$env(HOST):$env(PORT)/api",
18
+ message: "$env(APP_NAME) version $env(VERSION)",
19
+ secret: "$env(JWT_SECRET_KEY_123)",
20
+ description: 'App "with quotes" $env(APP_NAME)',
21
+ multiline: "Line1\nLine2 $env(VAR)",
22
+ metadata: {
23
+ favicon: "$env(FAVICON_URL)",
24
+ title: "Welcome to $env(SITE_NAME)",
25
+ },
26
+ navigation: [
27
+ "$env(HOME_PATH)",
28
+ "static/path",
29
+ "prefix $env(DYNAMIC_PATH)",
30
+ "$env(API_PATH) suffix",
31
+ ],
32
+ authentication: {
33
+ oauth: {
34
+ clientId: "$env(OAUTH_CLIENT_ID)",
35
+ issuer: "$env(OAUTH_ISSUER)/auth",
36
+ scopes: ["read", "$env(OAUTH_SCOPE)"],
37
+ },
38
+ },
39
+ };
40
+ const expected = `{
41
+ enabled: true,
42
+ count: 42,
43
+ ratio: 3.14,
44
+ empty: null,
45
+ notDefined: undefined,
46
+ normalString: 'regular string',
47
+ apiKey: process.env.API_KEY,
48
+ dbUrl: process.env.DATABASE_URL,
49
+ title: process.env.APP_TITLE + " Portal",
50
+ baseUrl: "https://" + process.env.DOMAIN,
51
+ fullUrl: "https://" + process.env.HOST + ":" + process.env.PORT + "/api",
52
+ message: process.env.APP_NAME + " version " + process.env.VERSION,
53
+ secret: process.env.JWT_SECRET_KEY_123,
54
+ description: "App \\"with quotes\\" " + process.env.APP_NAME,
55
+ multiline: "Line1\\nLine2 " + process.env.VAR,
56
+ metadata: {
57
+ favicon: process.env.FAVICON_URL,
58
+ title: "Welcome to " + process.env.SITE_NAME
59
+ },
60
+ navigation: [
61
+ process.env.HOME_PATH,
62
+ 'static/path',
63
+ "prefix " + process.env.DYNAMIC_PATH,
64
+ process.env.API_PATH + " suffix"
65
+ ],
66
+ authentication: {
67
+ oauth: {
68
+ clientId: process.env.OAUTH_CLIENT_ID,
69
+ issuer: process.env.OAUTH_ISSUER + "/auth",
70
+ scopes: [
71
+ 'read',
72
+ process.env.OAUTH_SCOPE
73
+ ]
74
+ }
75
+ }
76
+ }`;
77
+ strictEqual(stringifyConfig(config), expected);
78
+ });
79
+ });
80
+ //# sourceMappingURL=stringify-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-config.test.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG;YAEb,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,gBAAgB;YAG9B,MAAM,EAAE,eAAe;YACvB,KAAK,EAAE,oBAAoB;YAG3B,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,mCAAmC;YAG5C,OAAO,EAAE,sCAAsC;YAG/C,MAAM,EAAE,0BAA0B;YAGlC,WAAW,EAAE,kCAAkC;YAC/C,SAAS,EAAE,wBAAwB;YAGnC,QAAQ,EAAE;gBACR,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,4BAA4B;aACpC;YAGD,UAAU,EAAE;gBACV,iBAAiB;gBACjB,aAAa;gBACb,2BAA2B;gBAC3B,uBAAuB;aACxB;YAGD,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL,QAAQ,EAAE,uBAAuB;oBACjC,MAAM,EAAE,yBAAyB;oBACjC,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC;iBACtC;aACF;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCnB,CAAC;QAEC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it } from \"node:test\";\nimport { strictEqual } from \"node:assert\";\nimport { stringifyConfig } from \"./stringify-config.js\";\n\ndescribe(\"stringifyConfig\", () => {\n it(\"should handle env var patterns\", () => {\n const config = {\n // Simple values without env vars\n enabled: true,\n count: 42,\n ratio: 3.14,\n empty: null,\n notDefined: undefined,\n normalString: \"regular string\",\n\n // Env vars - complete replacement\n apiKey: \"$env(API_KEY)\",\n dbUrl: \"$env(DATABASE_URL)\",\n\n // Env vars with prefixes, suffixes, and both\n title: \"$env(APP_TITLE) Portal\",\n baseUrl: \"https://$env(DOMAIN)\",\n fullUrl: \"https://$env(HOST):$env(PORT)/api\",\n\n // Multiple env vars in one string\n message: \"$env(APP_NAME) version $env(VERSION)\",\n\n // Env vars with underscores and numbers\n secret: \"$env(JWT_SECRET_KEY_123)\",\n\n // Special characters in non-env parts\n description: 'App \"with quotes\" $env(APP_NAME)',\n multiline: \"Line1\\nLine2 $env(VAR)\",\n\n // Nested objects\n metadata: {\n favicon: \"$env(FAVICON_URL)\",\n title: \"Welcome to $env(SITE_NAME)\",\n },\n\n // Arrays with mixed content\n navigation: [\n \"$env(HOME_PATH)\",\n \"static/path\",\n \"prefix $env(DYNAMIC_PATH)\",\n \"$env(API_PATH) suffix\",\n ],\n\n // Deep nesting\n authentication: {\n oauth: {\n clientId: \"$env(OAUTH_CLIENT_ID)\",\n issuer: \"$env(OAUTH_ISSUER)/auth\",\n scopes: [\"read\", \"$env(OAUTH_SCOPE)\"],\n },\n },\n };\n\n const expected = `{\n enabled: true,\n count: 42,\n ratio: 3.14,\n empty: null,\n notDefined: undefined,\n normalString: 'regular string',\n apiKey: process.env.API_KEY,\n dbUrl: process.env.DATABASE_URL,\n title: process.env.APP_TITLE + \" Portal\",\n baseUrl: \"https://\" + process.env.DOMAIN,\n fullUrl: \"https://\" + process.env.HOST + \":\" + process.env.PORT + \"/api\",\n message: process.env.APP_NAME + \" version \" + process.env.VERSION,\n secret: process.env.JWT_SECRET_KEY_123,\n description: \"App \\\\\"with quotes\\\\\" \" + process.env.APP_NAME,\n multiline: \"Line1\\\\nLine2 \" + process.env.VAR,\n metadata: {\n favicon: process.env.FAVICON_URL,\n title: \"Welcome to \" + process.env.SITE_NAME\n },\n navigation: [\n process.env.HOME_PATH,\n 'static/path',\n \"prefix \" + process.env.DYNAMIC_PATH,\n process.env.API_PATH + \" suffix\"\n ],\n authentication: {\n oauth: {\n clientId: process.env.OAUTH_CLIENT_ID,\n issuer: process.env.OAUTH_ISSUER + \"/auth\",\n scopes: [\n 'read',\n process.env.OAUTH_SCOPE\n ]\n }\n }\n}`;\n\n strictEqual(stringifyConfig(config), expected);\n });\n});\n"]}
@@ -0,0 +1,83 @@
1
+ import type { DevPortalConfig, SidebarConfig } from "@zuplo/types";
2
+ import type { Plugin } from "./runner.js";
3
+ export interface Arguments {
4
+ dir: string;
5
+ force: boolean;
6
+ }
7
+ export interface ZudokuConfig {
8
+ metadata?: {
9
+ favicon?: string;
10
+ title?: string;
11
+ };
12
+ site?: {
13
+ title?: string;
14
+ };
15
+ navigation?: ZudokuNavigationItem[];
16
+ apis?: {
17
+ type: "file" | "url";
18
+ input: string;
19
+ path: string;
20
+ options?: {
21
+ examplesLanguage?: string;
22
+ disablePlayground?: boolean;
23
+ disableSidecar?: boolean;
24
+ showVersionSelect?: "if-available" | "always" | "hide";
25
+ expandAllTags?: boolean;
26
+ };
27
+ }[];
28
+ basePath?: string;
29
+ authentication?: {
30
+ type: string;
31
+ clientId?: string;
32
+ domain?: string;
33
+ audience?: string;
34
+ scopes?: string[];
35
+ tenantName?: string;
36
+ policyName?: string;
37
+ issuer?: string;
38
+ clerkPubKey?: string;
39
+ };
40
+ apiKeys?: {
41
+ enabled: boolean;
42
+ };
43
+ }
44
+ export type ZudokuNavigationItem =
45
+ | string
46
+ | {
47
+ type: "doc" | "category" | "link";
48
+ label?: string;
49
+ file?: string;
50
+ path?: string;
51
+ to?: string;
52
+ link?:
53
+ | string
54
+ | {
55
+ type: "doc";
56
+ file: string;
57
+ };
58
+ items?: ZudokuNavigationItem[];
59
+ icon?: string;
60
+ badge?: {
61
+ label: string;
62
+ color:
63
+ | "green"
64
+ | "blue"
65
+ | "yellow"
66
+ | "red"
67
+ | "purple"
68
+ | "indigo"
69
+ | "gray";
70
+ };
71
+ };
72
+ export interface MigrationConfig {
73
+ absoluteBaseDir: string;
74
+ force: boolean;
75
+ }
76
+ export type MigrationData = {
77
+ packageJson?: Record<string, unknown>;
78
+ devPortalConfig?: DevPortalConfig;
79
+ sidebar?: SidebarConfig;
80
+ zudokuConfig?: ZudokuConfig;
81
+ };
82
+ export type MigrationPlugin = Plugin<MigrationConfig, MigrationData>;
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;YAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;YACzB,iBAAiB,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;YACvD,aAAa,CAAC,EAAE,OAAO,CAAC;SACzB,CAAC;KACH,EAAE,CAAC;IACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN;IACE,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EACD,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,MAAM,CAAC;KACZ,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAGD,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { DevPortalConfig, SidebarConfig } from \"@zuplo/types\";\nimport type { Plugin } from \"./runner.js\";\n\nexport interface Arguments {\n dir: string;\n force: boolean;\n}\n\nexport interface ZudokuConfig {\n metadata?: {\n favicon?: string;\n title?: string;\n };\n site?: {\n title?: string;\n };\n navigation?: ZudokuNavigationItem[];\n apis?: {\n type: \"file\" | \"url\";\n input: string;\n path: string;\n options?: {\n examplesLanguage?: string;\n disablePlayground?: boolean;\n disableSidecar?: boolean;\n showVersionSelect?: \"if-available\" | \"always\" | \"hide\";\n expandAllTags?: boolean;\n };\n }[];\n basePath?: string;\n authentication?: {\n type: string;\n clientId?: string;\n domain?: string;\n audience?: string;\n scopes?: string[];\n tenantName?: string;\n policyName?: string;\n issuer?: string;\n clerkPubKey?: string;\n };\n apiKeys?: {\n enabled: boolean;\n };\n}\n\nexport type ZudokuNavigationItem =\n | string\n | {\n type: \"doc\" | \"category\" | \"link\";\n label?: string;\n file?: string;\n path?: string;\n to?: string;\n link?: string | { type: \"doc\"; file: string };\n items?: ZudokuNavigationItem[];\n icon?: string;\n badge?: {\n label: string;\n color:\n | \"green\"\n | \"blue\"\n | \"yellow\"\n | \"red\"\n | \"purple\"\n | \"indigo\"\n | \"gray\";\n };\n };\n\nexport interface MigrationConfig {\n absoluteBaseDir: string;\n force: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type MigrationData = {\n packageJson?: Record<string, unknown>;\n devPortalConfig?: DevPortalConfig;\n sidebar?: SidebarConfig;\n zudokuConfig?: ZudokuConfig;\n};\n\nexport type MigrationPlugin = Plugin<MigrationConfig, MigrationData>;\n"]}
@@ -0,0 +1,10 @@
1
+ import type { Argv } from "yargs";
2
+ import { groupHandler } from "../../common/handler.js";
3
+ declare const commands: {
4
+ describe: string;
5
+ command: string;
6
+ builder: (yargs: Argv<{}>) => Argv<{}>;
7
+ handler: typeof groupHandler;
8
+ };
9
+ export default commands;
10
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/cmds/source/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAiB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAOvD,QAAA,MAAM,QAAQ;;;;;CAkCW,CAAC;AAE1B,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { groupHandler } from "../../common/handler.js";
2
+ import setBlocking from "../../common/output.js";
3
+ import { identify } from "../../common/middleware/user-identification.js";
4
+ import { captureEvent } from "../../common/analytics/lib.js";
5
+ import { migrateDevPortal } from "./migrate/handler.js";
6
+ const commands = {
7
+ describe: "Migration commands",
8
+ command: "migrate",
9
+ builder: (yargs) => yargs
10
+ .command({
11
+ describe: "Migrates legacy dev portal configuration to the new dev portal format",
12
+ command: "dev-portal",
13
+ builder: (yargs) => yargs
14
+ .option("dir", {
15
+ type: "string",
16
+ describe: "The directory containing your Zuplo project and dev portal config",
17
+ default: ".",
18
+ normalize: true,
19
+ })
20
+ .option("force", {
21
+ type: "boolean",
22
+ describe: "Force overwrite of existing files",
23
+ default: false,
24
+ })
25
+ .middleware([setBlocking, identify]),
26
+ handler: async (argv) => {
27
+ await captureEvent({
28
+ argv,
29
+ event: "zuplo source migrate dev-portal",
30
+ });
31
+ await migrateDevPortal(argv);
32
+ },
33
+ })
34
+ .help(),
35
+ handler: groupHandler,
36
+ };
37
+ export default commands;
38
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cmds/source/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,QAAQ,GAAG;IACf,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,OAAO,CAAC;QACP,QAAQ,EACN,uEAAuE;QACzE,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,CAAC,KAAW,EAAE,EAAE,CACvB,KAAK;aACF,MAAM,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,mEAAmE;YACrE,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,MAAM,CAAC,OAAO,EAAE;YACf,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,mCAAmC;YAC7C,OAAO,EAAE,KAAK;SACf,CAAC;aACD,UAAU,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;YAC/B,MAAM,YAAY,CAAC;gBACjB,IAAI;gBACJ,KAAK,EAAE,iCAAiC;aACzC,CAAC,CAAC;YACH,MAAM,gBAAgB,CAAC,IAAiB,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;SACD,IAAI,EAAE;IACX,OAAO,EAAE,YAAY;CACE,CAAC;AAE1B,eAAe,QAAQ,CAAC","sourcesContent":["import type { Argv, CommandModule } from \"yargs\";\nimport { groupHandler } from \"../../common/handler.js\";\nimport setBlocking from \"../../common/output.js\";\nimport { identify } from \"../../common/middleware/user-identification.js\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { migrateDevPortal } from \"./migrate/handler.js\";\nimport type { Arguments } from \"./migrate/types.js\";\n\nconst commands = {\n describe: \"Migration commands\",\n command: \"migrate\",\n builder: (yargs) =>\n yargs\n .command({\n describe:\n \"Migrates legacy dev portal configuration to the new dev portal format\",\n command: \"dev-portal\",\n builder: (yargs: Argv) =>\n yargs\n .option(\"dir\", {\n type: \"string\",\n describe:\n \"The directory containing your Zuplo project and dev portal config\",\n default: \".\",\n normalize: true,\n })\n .option(\"force\", {\n type: \"boolean\",\n describe: \"Force overwrite of existing files\",\n default: false,\n })\n .middleware([setBlocking, identify]),\n handler: async (argv: unknown) => {\n await captureEvent({\n argv,\n event: \"zuplo source migrate dev-portal\",\n });\n await migrateDevPortal(argv as Arguments);\n },\n })\n .help(),\n handler: groupHandler,\n} satisfies CommandModule;\n\nexport default commands;\n"]}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-7e947de6.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/html.ts","../src/login/login.ts","../src/login/server.ts","../src/login/tokens.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.8.2"}
1
+ {"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/source/migrate/handler.ts","../src/cmds/source/migrate/runner.ts","../src/cmds/source/migrate/stringify-config.test.ts","../src/cmds/source/migrate/stringify-config.ts","../src/cmds/source/migrate/types.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-7e947de6.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/html.ts","../src/login/login.ts","../src/login/server.ts","../src/login/tokens.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuplo/cli",
3
- "version": "6.57.1",
3
+ "version": "6.57.2",
4
4
  "repository": "https://github.com/zuplo/zuplo",
5
5
  "author": "Zuplo, Inc.",
6
6
  "type": "module",
@@ -29,9 +29,9 @@
29
29
  "@opentelemetry/api": "1.9.0",
30
30
  "@sentry/node": "9.22.0",
31
31
  "@swc/core": "1.10.18",
32
- "@zuplo/core": "6.57.1",
33
- "@zuplo/openapi-tools": "6.57.1",
34
- "@zuplo/runtime": "6.57.1",
32
+ "@zuplo/core": "6.57.2",
33
+ "@zuplo/openapi-tools": "6.57.2",
34
+ "@zuplo/runtime": "6.57.2",
35
35
  "as-table": "1.0.55",
36
36
  "chalk": "5.4.1",
37
37
  "chokidar": "3.5.3",
@@ -45,6 +45,7 @@
45
45
  "fastify-plugin": "4.5.1",
46
46
  "fastify-sse-v2": "3.1.2",
47
47
  "ignore": "5.3.1",
48
+ "javascript-stringify": "2.1.0",
48
49
  "jose": "5.9.2",
49
50
  "js-yaml": "4.1.0",
50
51
  "jsonc-parser": "3.2.0",