@sap/joule-studio-dev-cli 0.1.20-alpha.3

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 (119) hide show
  1. package/LICENSE +38 -0
  2. package/README.md +53 -0
  3. package/dist/bin/commands/a2a.js +12 -0
  4. package/dist/bin/commands/a2a.js.map +1 -0
  5. package/dist/bin/commands/asset.js +20 -0
  6. package/dist/bin/commands/asset.js.map +1 -0
  7. package/dist/bin/commands/auth.js +16 -0
  8. package/dist/bin/commands/auth.js.map +1 -0
  9. package/dist/bin/commands/init.js +20 -0
  10. package/dist/bin/commands/init.js.map +1 -0
  11. package/dist/bin/commands/mcp.js +42 -0
  12. package/dist/bin/commands/mcp.js.map +1 -0
  13. package/dist/bin/commands/pro-code.js +12 -0
  14. package/dist/bin/commands/pro-code.js.map +1 -0
  15. package/dist/bin/commands/skills.js +27 -0
  16. package/dist/bin/commands/skills.js.map +1 -0
  17. package/dist/bin/commands/solution.js +52 -0
  18. package/dist/bin/commands/solution.js.map +1 -0
  19. package/dist/bin/help.js +42 -0
  20. package/dist/bin/help.js.map +1 -0
  21. package/dist/bin/jl.js +59 -0
  22. package/dist/bin/jl.js.map +1 -0
  23. package/dist/bin/login.js +60 -0
  24. package/dist/bin/login.js.map +1 -0
  25. package/dist/bin/logout.js +21 -0
  26. package/dist/bin/logout.js.map +1 -0
  27. package/dist/lib/a2a/message.js +74 -0
  28. package/dist/lib/a2a/message.js.map +1 -0
  29. package/dist/lib/asset/create.js +38 -0
  30. package/dist/lib/asset/create.js.map +1 -0
  31. package/dist/lib/asset/delete.js +57 -0
  32. package/dist/lib/asset/delete.js.map +1 -0
  33. package/dist/lib/asset/discover.js +46 -0
  34. package/dist/lib/asset/discover.js.map +1 -0
  35. package/dist/lib/auth-crypto.js +146 -0
  36. package/dist/lib/auth-crypto.js.map +1 -0
  37. package/dist/lib/auth.js +488 -0
  38. package/dist/lib/auth.js.map +1 -0
  39. package/dist/lib/context.js +35 -0
  40. package/dist/lib/context.js.map +1 -0
  41. package/dist/lib/errors.js +47 -0
  42. package/dist/lib/errors.js.map +1 -0
  43. package/dist/lib/fs-utils.js +34 -0
  44. package/dist/lib/fs-utils.js.map +1 -0
  45. package/dist/lib/init/agents.js +55 -0
  46. package/dist/lib/init/agents.js.map +1 -0
  47. package/dist/lib/init/shared.js +172 -0
  48. package/dist/lib/init/shared.js.map +1 -0
  49. package/dist/lib/mcp/call.js +158 -0
  50. package/dist/lib/mcp/call.js.map +1 -0
  51. package/dist/lib/mcp/client.js +100 -0
  52. package/dist/lib/mcp/client.js.map +1 -0
  53. package/dist/lib/mcp/list.js +20 -0
  54. package/dist/lib/mcp/list.js.map +1 -0
  55. package/dist/lib/mcp/start.js +120 -0
  56. package/dist/lib/mcp/start.js.map +1 -0
  57. package/dist/lib/mcp/tools.js +162 -0
  58. package/dist/lib/mcp/tools.js.map +1 -0
  59. package/dist/lib/plugin.js +77 -0
  60. package/dist/lib/plugin.js.map +1 -0
  61. package/dist/lib/plugins/agent/index.js +32 -0
  62. package/dist/lib/plugins/agent/index.js.map +1 -0
  63. package/dist/lib/plugins/agent/templates/asset.yaml.hbs +31 -0
  64. package/dist/lib/plugins/agent-extension/index.js +32 -0
  65. package/dist/lib/plugins/agent-extension/index.js.map +1 -0
  66. package/dist/lib/plugins/agent-extension/templates/asset.yaml.hbs +15 -0
  67. package/dist/lib/plugins/base-ui/index.js +32 -0
  68. package/dist/lib/plugins/base-ui/index.js.map +1 -0
  69. package/dist/lib/plugins/base-ui/templates/asset.yaml.hbs +8 -0
  70. package/dist/lib/plugins/cap-app/index.js +32 -0
  71. package/dist/lib/plugins/cap-app/index.js.map +1 -0
  72. package/dist/lib/plugins/cap-app/templates/asset.yaml.hbs +37 -0
  73. package/dist/lib/plugins/data-product/index.js +32 -0
  74. package/dist/lib/plugins/data-product/index.js.map +1 -0
  75. package/dist/lib/plugins/data-product/templates/asset.yaml.hbs +9 -0
  76. package/dist/lib/plugins/domain-model-extension/index.js +37 -0
  77. package/dist/lib/plugins/domain-model-extension/index.js.map +1 -0
  78. package/dist/lib/plugins/domain-model-extension/templates/asset.yaml.hbs +15 -0
  79. package/dist/lib/plugins/mcp-server/index.js +36 -0
  80. package/dist/lib/plugins/mcp-server/index.js.map +1 -0
  81. package/dist/lib/plugins/mcp-server/templates/asset.yaml.hbs +9 -0
  82. package/dist/lib/plugins/n8n-workflow/index.js +52 -0
  83. package/dist/lib/plugins/n8n-workflow/index.js.map +1 -0
  84. package/dist/lib/plugins/n8n-workflow/templates/asset.yaml.hbs +18 -0
  85. package/dist/lib/plugins/n8n-workflow/validation/asset-validator.js +62 -0
  86. package/dist/lib/plugins/n8n-workflow/validation/asset-validator.js.map +1 -0
  87. package/dist/lib/plugins/n8n-workflow/validation/yaml-validator.js +51 -0
  88. package/dist/lib/plugins/n8n-workflow/validation/yaml-validator.js.map +1 -0
  89. package/dist/lib/plugins/vercel-app/index.js +32 -0
  90. package/dist/lib/plugins/vercel-app/index.js.map +1 -0
  91. package/dist/lib/plugins/vercel-app/templates/asset.yaml.hbs +12 -0
  92. package/dist/lib/rule.js +2 -0
  93. package/dist/lib/rule.js.map +1 -0
  94. package/dist/lib/schemas/solution-schema.json +178 -0
  95. package/dist/lib/solution/build.js +186 -0
  96. package/dist/lib/solution/build.js.map +1 -0
  97. package/dist/lib/solution/create.js +42 -0
  98. package/dist/lib/solution/create.js.map +1 -0
  99. package/dist/lib/solution/deploy.js +66 -0
  100. package/dist/lib/solution/deploy.js.map +1 -0
  101. package/dist/lib/solution/list.js +21 -0
  102. package/dist/lib/solution/list.js.map +1 -0
  103. package/dist/lib/solution/logs.js +130 -0
  104. package/dist/lib/solution/logs.js.map +1 -0
  105. package/dist/lib/solution/status.js +161 -0
  106. package/dist/lib/solution/status.js.map +1 -0
  107. package/dist/lib/solution/templates/solution.yaml.hbs +9 -0
  108. package/dist/lib/solution/util/build-file.js +4 -0
  109. package/dist/lib/solution/util/build-file.js.map +1 -0
  110. package/dist/lib/template.js +74 -0
  111. package/dist/lib/template.js.map +1 -0
  112. package/dist/lib/term.js +16 -0
  113. package/dist/lib/term.js.map +1 -0
  114. package/dist/lib/validate.js +287 -0
  115. package/dist/lib/validate.js.map +1 -0
  116. package/dist/lib/yaml.js +33 -0
  117. package/dist/lib/yaml.js.map +1 -0
  118. package/dist/package.json +77 -0
  119. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../lib/solution/status.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,IAAI,MAAM,YAAY,CAAA;AAE7B,MAAM,IAAI,GAAG,mDAAmD,CAAA;AAMhE,SAAS,WAAW,CAAC,MAAM,GAAG,EAAE;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;IAC9B,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED,KAAK,UAAU,YAAY;IACvB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,8BAA8B,GAAG,CAAC,MAAM,IAAI,CAAA;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAA;IAC1D,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAG1F,CAAA;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,qBAAqB,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAChD,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;QAC7B,OAAO,CAAC,GAAG,CACP,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CACzG,CAAA;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;QAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,EAAE;YACrC,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACvB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,oBAAoB,CAAA;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IACtC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc,EAAE,UAAiC,EAAE;IACpF,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,IAAI,YAAgC,CAAA;IACpC,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,6DAA6D,CAAA;QACvE,CAAC;QAED,CAAC;QAAA,CAAC,EAAE,EAAE,YAAY,CAAC,GAAG,MAAM,YAAY,EAAE,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAA;IACzC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;QAC5D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAA;YAC5D,MAAM,QAAQ,GAAG,CACb,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CACrE,CAAA;YACd,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YACzB,OAAO;gBACH,CAAC,OAAO,KAAK,KAAK,QAAQ;oBACtB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,CAAG,KAAiC,EAAE,IAAe;wBACnD,KAAiC,EAAE,EAAa;wBAChD,KAAiC,EAAE,OAAkB,CAAC,CAAC,IAAI,MAAM,CAAA;QACjF,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,MAAM,CAAA;QACpB,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,aAAa,OAAO,EAAE,CAAA;IAClD,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvC,eAAe,CAAC,GAAG,MAAM,mBAAmB,CAAC;QAC7C,eAAe,CAAC,GAAG,MAAM,iBAAiB,CAAC;KAC9C,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACnD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAC1C;QAAA,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpC,eAAe,CAAC,GAAG,MAAM,mBAAmB,CAAC;YAC7C,eAAe,CAAC,GAAG,MAAM,iBAAiB,CAAC;SAC9C,CAAC,CAAA;IACN,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,mDAAmD,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5F,OAAM;IACV,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,oCAAoC,OAAO,CAAC,MAAM,IAAI,CAAA;IAChE,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,oCAAoC,OAAO,CAAC,MAAM,IAAI,CAAA;IAChE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAA;IAC9D,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAA;IAClE,MAAM,IAAI,GAAG,CACT,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CACpE,CAAA;IAE9B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,OAAO,GAAG,CAAC,EAAE,CAAC,CAAA;IAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAA;IACjE,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7D,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA;IACpD,IAAI,GAAG,EAAE,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,MAAoC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAA;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CACP,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CACvG,CAAA;QACL,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAA;IACtE,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;QACtB,QAAQ;QACR,kBAAkB;QAClB,OAAO;QACP,KAAK;QACL,QAAQ;QACR,UAAU;QACV,WAAW;QACX,YAAY;QACZ,cAAc;QACd,QAAQ;KACX,CAAC,CAAA;IACF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IACI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,CAAC,KAAK,IAAI;YACV,OAAO,CAAC,KAAK,WAAW;YACxB,OAAO,CAAC,KAAK,QAAQ,EACvB,CAAC;YACC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAA;QACzD,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAA;QAC3F,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAA;QAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAA;AACjB,CAAC"}
@@ -0,0 +1,9 @@
1
+ apiVersion: solution.sap/v1
2
+ kind: Solution
3
+
4
+ metadata:
5
+ name: {{name}}
6
+ version: 1.0.0
7
+ description: {{description}}
8
+
9
+ assets: []
@@ -0,0 +1,4 @@
1
+ export const UUID_PATTERN = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
2
+ export const UUID_RE = new RegExp(`^${UUID_PATTERN}$`);
3
+ export const BUILD_FILE_RE = new RegExp(`^solution_id=${UUID_PATTERN}$`, 'm');
4
+ //# sourceMappingURL=build-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-file.js","sourceRoot":"","sources":["../../../../lib/solution/util/build-file.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,8DAA8D,CAAA;AAC1F,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAA;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,gBAAgB,YAAY,GAAG,EAAE,GAAG,CAAC,CAAA"}
@@ -0,0 +1,74 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import fsUtils from './fs-utils.js';
4
+ /**
5
+ * Minimal renderer for .hbs template strings. Supports:
6
+ * {{#section}}...{{/section}} — conditional block (truthy check only)
7
+ * {{{key}}} — unescaped interpolation
8
+ * {{key}} — HTML-escaped interpolation
9
+ */
10
+ function renderString(template, values) {
11
+ let out = template.replace(/\{\{#(\w+)\}\}([\s\S]*?)\{\{\/\1\}\}/g, (_, key, body) => (values[key] ? body : ''));
12
+ out = out.replace(/\{\{\{(\w+)\}\}\}/g, (_, key) => {
13
+ const val = values[key];
14
+ if (typeof val !== 'string' && typeof val !== 'number' && typeof val !== 'boolean') {
15
+ return '';
16
+ }
17
+ return String(val);
18
+ });
19
+ out = out.replace(/\{\{(\w+)\}\}/g, (_, key) => {
20
+ const val = values[key];
21
+ if (typeof val !== 'string' && typeof val !== 'number' && typeof val !== 'boolean') {
22
+ return '';
23
+ }
24
+ return String(val)
25
+ .replaceAll('&', '&')
26
+ .replaceAll('"', '"')
27
+ .replaceAll('<', '&lt;')
28
+ .replaceAll('>', '&gt;');
29
+ });
30
+ return out;
31
+ }
32
+ /**
33
+ * Renders a single .hbs template file and returns the string.
34
+ */
35
+ export function render(templatePath, values = {}) {
36
+ const content = fsUtils.readFile(templatePath);
37
+ return renderString(content, values);
38
+ }
39
+ /**
40
+ * Walks fromDir recursively:
41
+ * - .hbs files are rendered and written without the .hbs extension
42
+ * - other files are copied as-is
43
+ * - directory and file names can themselves contain {{expressions}}
44
+ *
45
+ * Adapted from @sap/cds-dk lib/init/template.js lines 5-46
46
+ */
47
+ export async function renderAndCopy(fromDir, intoDir, replacements = {}, overwrite = false) {
48
+ const srcRoot = path.resolve(fromDir);
49
+ const destRoot = path.resolve(intoDir);
50
+ function walk(src, dest) {
51
+ if (fsUtils.isDir(src)) {
52
+ fsUtils.mkdirp(dest);
53
+ const entries = fs.readdirSync(src);
54
+ for (const name of entries) {
55
+ const renderedName = renderString(name, replacements);
56
+ walk(path.join(src, name), path.join(dest, renderedName));
57
+ }
58
+ return;
59
+ }
60
+ const ext = path.extname(src);
61
+ if (ext === '.hbs') {
62
+ const destFile = dest.replace(/\.hbs$/, '');
63
+ if (overwrite || !fsUtils.exists(destFile)) {
64
+ const content = render(src, replacements);
65
+ fsUtils.writeFile(destFile, content);
66
+ }
67
+ }
68
+ else if (overwrite || !fsUtils.exists(dest)) {
69
+ fsUtils.copyFile(src, dest);
70
+ }
71
+ }
72
+ walk(srcRoot, destRoot);
73
+ }
74
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../lib/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ const NO_COLOR = 'NO_COLOR' in process.env || !process.stdout.isTTY;
2
+ const _c = (code) => {
3
+ if (NO_COLOR) {
4
+ return s => s;
5
+ }
6
+ return s => `\x1b[${code}m${s}\x1b[0m`;
7
+ };
8
+ export default {
9
+ bold: _c('1'),
10
+ dim: _c('2'),
11
+ green: _c('32'),
12
+ red: _c('31'),
13
+ yellow: _c('33'),
14
+ cyan: _c('36'),
15
+ };
16
+ //# sourceMappingURL=term.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"term.js","sourceRoot":"","sources":["../../lib/term.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;AAEnE,MAAM,EAAE,GAAG,CAAC,IAAY,EAA2B,EAAE;IACjD,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAA;AAC1C,CAAC,CAAA;AAED,eAAe;IACX,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;IACb,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;IACZ,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC;IACf,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;IACb,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;IAChB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;CACjB,CAAA"}
@@ -0,0 +1,287 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { Ajv } from 'ajv';
5
+ import { getPlugin } from './asset/discover.js';
6
+ import Plugin from './plugin.js';
7
+ import term from './term.js';
8
+ import yaml from './yaml.js';
9
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
+ const solutionSchema = JSON.parse(fs.readFileSync(path.join(__dirname, 'schemas', 'solution-schema.json'), 'utf8'));
11
+ const ajv = new Ajv({ allErrors: true, strict: false });
12
+ const ajvValidate = ajv.compile(solutionSchema);
13
+ function errMsg(e) {
14
+ return e instanceof Error ? e.message : String(e);
15
+ }
16
+ async function resolvePlugin(type) {
17
+ try {
18
+ const PluginClass = await getPlugin(type);
19
+ return new PluginClass();
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ async function checkEachAsset(ctx, options) {
26
+ const assetsDir = path.join(ctx.solutionDir, 'assets');
27
+ if (!fs.existsSync(assetsDir)) {
28
+ return { pass: true, message: `assets/ missing — ${options.skip}` };
29
+ }
30
+ if (ctx.assetDirs.length === 0) {
31
+ return { pass: true, message: 'no asset subdirectories' };
32
+ }
33
+ const errors = [];
34
+ for (const dir of ctx.assetDirs) {
35
+ const yamlPath = path.join(assetsDir, dir, 'asset.yaml');
36
+ if (!fs.existsSync(yamlPath)) {
37
+ continue;
38
+ }
39
+ let assetYaml;
40
+ try {
41
+ assetYaml = yaml.readYAML(yamlPath);
42
+ }
43
+ catch (e) {
44
+ errors.push(errMsg(e));
45
+ continue;
46
+ }
47
+ await options.process(dir, assetYaml, errors);
48
+ }
49
+ const pass = errors.length === 0;
50
+ return { pass, message: pass ? options.success : errors.join(' | ') };
51
+ }
52
+ export const rules = [
53
+ {
54
+ id: 'solution-yaml-exists',
55
+ description: 'solution.yaml exists in solution root',
56
+ severity: 'error',
57
+ check(ctx) {
58
+ const filePath = path.join(ctx.solutionDir, 'solution.yaml');
59
+ const pass = fs.existsSync(filePath);
60
+ return { pass, message: pass ? 'solution.yaml found' : `solution.yaml not found at ${filePath}` };
61
+ },
62
+ },
63
+ {
64
+ id: 'solution-yaml-valid',
65
+ description: 'solution.yaml has required fields (apiVersion, kind, metadata.name, metadata.version)',
66
+ severity: 'error',
67
+ check(ctx) {
68
+ if (!ctx.solutionYaml) {
69
+ return { pass: false, message: 'cannot validate — solution.yaml missing or invalid' };
70
+ }
71
+ const y = ctx.solutionYaml;
72
+ const metadata = y.metadata;
73
+ const missing = [];
74
+ if (y.apiVersion !== 'solution.sap/v1') {
75
+ missing.push(`apiVersion must be 'solution.sap/v1' (got '${y.apiVersion}')`);
76
+ }
77
+ if (y.kind !== 'Solution') {
78
+ missing.push(`kind must be 'Solution' (got '${y.kind}')`);
79
+ }
80
+ if (!metadata?.name) {
81
+ missing.push('metadata.name is missing');
82
+ }
83
+ if (!metadata?.version) {
84
+ missing.push('metadata.version is missing');
85
+ }
86
+ const pass = missing.length === 0;
87
+ return { pass, message: pass ? 'all required fields present' : missing.join('; ') };
88
+ },
89
+ },
90
+ {
91
+ id: 'solution-yaml-schema',
92
+ description: 'solution.yaml conforms to the JSON schema (solution-schema.json)',
93
+ severity: 'error',
94
+ check(ctx) {
95
+ if (!ctx.solutionYaml) {
96
+ return { pass: false, message: 'cannot validate — solution.yaml missing or invalid' };
97
+ }
98
+ const pass = ajvValidate(ctx.solutionYaml);
99
+ if (pass) {
100
+ return { pass: true, message: 'schema validation passed' };
101
+ }
102
+ const errors = (ajvValidate.errors ?? []).map(e => `${e.instancePath || '/'} ${e.message}`).join('; ');
103
+ return { pass: false, message: errors };
104
+ },
105
+ },
106
+ {
107
+ id: 'assets-dir-exists',
108
+ description: 'assets/ directory exists',
109
+ severity: 'error',
110
+ check(ctx) {
111
+ const dirPath = path.join(ctx.solutionDir, 'assets');
112
+ const pass = fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();
113
+ return { pass, message: pass ? 'assets/ directory found' : 'assets/ directory not found' };
114
+ },
115
+ },
116
+ {
117
+ id: 'asset-refs-resolve',
118
+ description: 'every ref in assets[] points to an existing file',
119
+ severity: 'error',
120
+ check(ctx) {
121
+ if (!ctx.solutionYaml) {
122
+ return { pass: true, message: 'skipped — no solution.yaml' };
123
+ }
124
+ const assets = ctx.solutionYaml.assets;
125
+ if (!Array.isArray(assets) || assets.length === 0) {
126
+ return { pass: true, message: 'no asset refs to check' };
127
+ }
128
+ const broken = [];
129
+ for (const entry of assets) {
130
+ if (!entry?.ref) {
131
+ broken.push('(entry missing ref)');
132
+ continue;
133
+ }
134
+ const refPath = path.resolve(ctx.solutionDir, entry.ref);
135
+ if (!fs.existsSync(refPath)) {
136
+ broken.push(entry.ref);
137
+ }
138
+ }
139
+ const pass = broken.length === 0;
140
+ return {
141
+ pass,
142
+ message: pass ? `all ${assets.length} asset ref(s) resolve` : `broken refs: ${broken.join(', ')}`,
143
+ };
144
+ },
145
+ },
146
+ {
147
+ id: 'asset-dirs-have-yaml',
148
+ description: 'every subdirectory in assets/ contains an asset.yaml',
149
+ severity: 'warning',
150
+ check(ctx) {
151
+ const assetsDir = path.join(ctx.solutionDir, 'assets');
152
+ if (!fs.existsSync(assetsDir)) {
153
+ return { pass: true, message: 'assets/ missing — skipped' };
154
+ }
155
+ if (ctx.assetDirs.length === 0) {
156
+ return { pass: true, message: 'no asset subdirectories' };
157
+ }
158
+ const missing = ctx.assetDirs.filter(dir => !fs.existsSync(path.join(assetsDir, dir, 'asset.yaml')));
159
+ const pass = missing.length === 0;
160
+ return {
161
+ pass,
162
+ message: pass
163
+ ? `all ${ctx.assetDirs.length} asset dir(s) contain asset.yaml`
164
+ : `missing asset.yaml in: ${missing.join(', ')}`,
165
+ };
166
+ },
167
+ },
168
+ {
169
+ id: 'asset-yaml-valid',
170
+ description: 'every asset.yaml has required envelope fields (apiVersion, kind, metadata.name, type)',
171
+ severity: 'error',
172
+ check(ctx) {
173
+ return checkEachAsset(ctx, {
174
+ skip: 'asset yaml validation skipped',
175
+ success: `all ${ctx.assetDirs.length} asset.yaml file(s) are valid`,
176
+ async process(dir, assetYaml, errors) {
177
+ if (!assetYaml.type) {
178
+ errors.push(`${dir}/asset.yaml: type is missing`);
179
+ return;
180
+ }
181
+ const plugin = (await resolvePlugin(assetYaml.type)) ?? new Plugin();
182
+ try {
183
+ const issues = await plugin.checkAssetYaml(assetYaml, path.join(ctx.solutionDir, 'assets', dir));
184
+ if (issues.length > 0) {
185
+ errors.push(`${dir}/asset.yaml: ${issues.join('; ')}`);
186
+ }
187
+ }
188
+ catch (e) {
189
+ errors.push(`${dir}/asset.yaml: validation threw error: ${errMsg(e)}`);
190
+ }
191
+ },
192
+ });
193
+ },
194
+ },
195
+ {
196
+ id: 'asset-valid',
197
+ description: 'every asset passes its plugin-specific validation',
198
+ severity: 'error',
199
+ check(ctx) {
200
+ return checkEachAsset(ctx, {
201
+ skip: 'asset validation skipped',
202
+ success: `all ${ctx.assetDirs.length} asset(s) pass plugin validation`,
203
+ async process(dir, assetYaml, errors) {
204
+ if (!assetYaml.type) {
205
+ return;
206
+ }
207
+ const plugin = await resolvePlugin(assetYaml.type);
208
+ if (!plugin) {
209
+ return;
210
+ }
211
+ try {
212
+ const pluginErrors = await plugin.checkAsset(assetYaml, path.join(ctx.solutionDir, 'assets', dir));
213
+ if (pluginErrors.length > 0) {
214
+ errors.push(`${dir}: ${pluginErrors.join('; ')}`);
215
+ }
216
+ }
217
+ catch (e) {
218
+ errors.push(`${dir}: validate threw error: ${errMsg(e)}`);
219
+ }
220
+ },
221
+ });
222
+ },
223
+ },
224
+ ];
225
+ export async function validateSolution(_args, _options = {}) {
226
+ const solutionDir = process.cwd();
227
+ console.log(`\nValidating solution at: ${term.bold(solutionDir)}\n`);
228
+ const solutionYamlPath = path.join(solutionDir, 'solution.yaml');
229
+ let solutionYaml = null;
230
+ if (fs.existsSync(solutionYamlPath)) {
231
+ try {
232
+ solutionYaml = yaml.readYAML(solutionYamlPath);
233
+ const metadata = solutionYaml?.metadata;
234
+ if (metadata && !metadata.description) {
235
+ metadata.description = '';
236
+ }
237
+ }
238
+ catch (e) {
239
+ console.log(` ${term.red('✗ [error]')} solution.yaml could not be read`);
240
+ console.log(` ${term.dim(errMsg(e))}`);
241
+ console.log();
242
+ console.log(term.red('Validation failed.'));
243
+ process.exitCode = 1;
244
+ return;
245
+ }
246
+ }
247
+ const assetsDir = path.join(solutionDir, 'assets');
248
+ const assetDirs = fs.existsSync(assetsDir)
249
+ ? fs
250
+ .readdirSync(assetsDir, { withFileTypes: true })
251
+ .filter(d => d.isDirectory())
252
+ .map(d => d.name)
253
+ : [];
254
+ const ctx = { solutionDir, solutionYaml, assetDirs };
255
+ let hasErrors = false;
256
+ for (const rule of rules) {
257
+ const result = await rule.check(ctx);
258
+ let icon;
259
+ let label;
260
+ if (result.pass) {
261
+ icon = term.green('✓');
262
+ label = '';
263
+ }
264
+ else if (rule.severity === 'error') {
265
+ icon = term.red('✗');
266
+ label = term.red(' [error]');
267
+ hasErrors = true;
268
+ }
269
+ else {
270
+ icon = term.yellow('!');
271
+ label = term.yellow(' [warning]');
272
+ }
273
+ console.log(` ${icon}${label} ${rule.description}`);
274
+ if (!result.pass) {
275
+ console.log(` ${term.dim(result.message)}`);
276
+ }
277
+ }
278
+ console.log();
279
+ if (hasErrors) {
280
+ console.log(term.red('Validation failed.'));
281
+ process.exitCode = 1;
282
+ }
283
+ else {
284
+ console.log(term.green('Validation passed.'));
285
+ }
286
+ }
287
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../lib/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import YAML from 'yaml';
2
+ import fs from 'node:fs';
3
+ export default {
4
+ readYAML(filePath) {
5
+ const doc = YAML.parseDocument(fs.readFileSync(filePath, 'utf8'));
6
+ if (doc.errors.length > 0) {
7
+ throw `${filePath}: ${doc.errors[0].message.split('\n')[0]}`;
8
+ }
9
+ const unknownTag = doc.warnings.find(w => w.code === 'TAG_RESOLVE_FAILED');
10
+ if (unknownTag) {
11
+ throw `${filePath}: unsafe YAML tag rejected (${unknownTag.message.split('\n')[0]})`;
12
+ }
13
+ const result = doc.toJS();
14
+ if (result === null || typeof result !== 'object' || Array.isArray(result)) {
15
+ throw `${filePath}: expected a YAML mapping at the document root`;
16
+ }
17
+ return result;
18
+ },
19
+ writeYAML(filePath, obj) {
20
+ const content = YAML.stringify(obj, {
21
+ collectionStyle: 'block',
22
+ lineWidth: 150,
23
+ directives: false,
24
+ });
25
+ fs.writeFileSync(filePath, content, 'utf8');
26
+ },
27
+ updateYAML(filePath, mutatorFn) {
28
+ const obj = this.readYAML(filePath);
29
+ mutatorFn(obj);
30
+ this.writeYAML(filePath, obj);
31
+ },
32
+ };
33
+ //# sourceMappingURL=yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../lib/yaml.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,eAAe;IACX,QAAQ,CAAC,QAAgB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QACjE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChE,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA;QAC1E,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,GAAG,QAAQ,+BAA+B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACxF,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACzB,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzE,MAAM,GAAG,QAAQ,gDAAgD,CAAA;QACrE,CAAC;QACD,OAAO,MAAiC,CAAA;IAC5C,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,GAA4B;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YAChC,eAAe,EAAE,OAAO;YACxB,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,KAAK;SACpB,CAAC,CAAA;QACF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,SAAiD;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACnC,SAAS,CAAC,GAAG,CAAC,CAAA;QACd,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;CACJ,CAAA"}
@@ -0,0 +1,77 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@sap/joule-studio-dev-cli",
4
+ "version": "0.1.20-alpha.3",
5
+ "description": "Joule Studio Dev CLI tools to create, manage and deploy Joule Studio solutions",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "bin": {
8
+ "jl": "dist/bin/jl.js"
9
+ },
10
+ "main": "dist/lib/plugin.js",
11
+ "dependencies": {
12
+ "ajv": "8.20.0",
13
+ "commander": "14.0.3",
14
+ "yaml": "2.9.0"
15
+ },
16
+ "devDependencies": {
17
+ "@cyclonedx/cyclonedx-npm": "4.2.1",
18
+ "@types/jest": "^30.0.0",
19
+ "@types/node": "^24",
20
+ "@typescript-eslint/eslint-plugin": "^8.59.4",
21
+ "@typescript-eslint/parser": "^8.59.4",
22
+ "eslint": "^10",
23
+ "eslint-config-prettier": "^10.1.8",
24
+ "eslint-plugin-jest": "^29",
25
+ "eslint-plugin-jsdoc": "^62",
26
+ "globals": "^15",
27
+ "jest": "^30",
28
+ "prettier": "^3",
29
+ "ts-jest": "^29.4.10",
30
+ "typescript": "^6",
31
+ "vitepress": "^1"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc && node scripts/copy-assets.js",
35
+ "prepare": "npm run build",
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "eslint '{bin,lib}/**/*.ts'",
38
+ "lint:fix": "eslint '{bin,lib}/**/*.ts' --fix",
39
+ "format": "prettier --write '{bin,lib}/**/*.ts'",
40
+ "format:check": "prettier --check '{bin,lib}/**/*.ts'",
41
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --colors --coverage --coverageReporters=lcov --coverageReporters=text",
42
+ "sbom": "cyclonedx-npm --output-file bom.json --output-format JSON",
43
+ "test:e2e": "node --env-file-if-exists=.env test/integration/e2e-test.js",
44
+ "docs:dev": "vitepress dev docs",
45
+ "docs:build": "vitepress build docs",
46
+ "docs:preview": "vitepress preview docs"
47
+ },
48
+ "jest": {
49
+ "extensionsToTreatAsEsm": [
50
+ ".ts"
51
+ ],
52
+ "transform": {
53
+ "^.+\\.ts$": [
54
+ "ts-jest",
55
+ {
56
+ "useESM": true
57
+ }
58
+ ]
59
+ },
60
+ "moduleNameMapper": {
61
+ "^(\\.{1,2}/.*)\\.js$": "$1"
62
+ },
63
+ "collectCoverageFrom": [
64
+ "lib/**/*.ts",
65
+ "bin/**/*.ts",
66
+ "!lib/**/*.d.ts"
67
+ ]
68
+ },
69
+ "engines": {
70
+ "node": ">=24"
71
+ },
72
+ "files": [
73
+ "dist/",
74
+ "LICENSE",
75
+ "README.md"
76
+ ]
77
+ }
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@sap/joule-studio-dev-cli",
4
+ "version": "0.1.20-alpha.3",
5
+ "description": "Joule Studio Dev CLI tools to create, manage and deploy Joule Studio solutions",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "bin": {
8
+ "jl": "dist/bin/jl.js"
9
+ },
10
+ "main": "dist/lib/plugin.js",
11
+ "dependencies": {
12
+ "ajv": "8.20.0",
13
+ "commander": "14.0.3",
14
+ "yaml": "2.9.0"
15
+ },
16
+ "devDependencies": {
17
+ "@cyclonedx/cyclonedx-npm": "4.2.1",
18
+ "@types/jest": "^30.0.0",
19
+ "@types/node": "^24",
20
+ "@typescript-eslint/eslint-plugin": "^8.59.4",
21
+ "@typescript-eslint/parser": "^8.59.4",
22
+ "eslint": "^10",
23
+ "eslint-config-prettier": "^10.1.8",
24
+ "eslint-plugin-jest": "^29",
25
+ "eslint-plugin-jsdoc": "^62",
26
+ "globals": "^15",
27
+ "jest": "^30",
28
+ "prettier": "^3",
29
+ "ts-jest": "^29.4.10",
30
+ "typescript": "^6",
31
+ "vitepress": "^1"
32
+ },
33
+ "scripts": {
34
+ "build": "tsc && node scripts/copy-assets.js",
35
+ "prepare": "npm run build",
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "eslint '{bin,lib}/**/*.ts'",
38
+ "lint:fix": "eslint '{bin,lib}/**/*.ts' --fix",
39
+ "format": "prettier --write '{bin,lib}/**/*.ts'",
40
+ "format:check": "prettier --check '{bin,lib}/**/*.ts'",
41
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --colors --coverage --coverageReporters=lcov --coverageReporters=text",
42
+ "sbom": "cyclonedx-npm --output-file bom.json --output-format JSON",
43
+ "test:e2e": "node --env-file-if-exists=.env test/integration/e2e-test.js",
44
+ "docs:dev": "vitepress dev docs",
45
+ "docs:build": "vitepress build docs",
46
+ "docs:preview": "vitepress preview docs"
47
+ },
48
+ "jest": {
49
+ "extensionsToTreatAsEsm": [
50
+ ".ts"
51
+ ],
52
+ "transform": {
53
+ "^.+\\.ts$": [
54
+ "ts-jest",
55
+ {
56
+ "useESM": true
57
+ }
58
+ ]
59
+ },
60
+ "moduleNameMapper": {
61
+ "^(\\.{1,2}/.*)\\.js$": "$1"
62
+ },
63
+ "collectCoverageFrom": [
64
+ "lib/**/*.ts",
65
+ "bin/**/*.ts",
66
+ "!lib/**/*.d.ts"
67
+ ]
68
+ },
69
+ "engines": {
70
+ "node": ">=24"
71
+ },
72
+ "files": [
73
+ "dist/",
74
+ "LICENSE",
75
+ "README.md"
76
+ ]
77
+ }