@platforma-sdk/bootstrap 5.3.5 → 5.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +7 -13
  2. package/dist/block.cjs +2 -3
  3. package/dist/block.cjs.map +1 -1
  4. package/dist/block.js +1 -2
  5. package/dist/block.js.map +1 -1
  6. package/dist/cmd-opts.cjs +6 -7
  7. package/dist/cmd-opts.cjs.map +1 -1
  8. package/dist/cmd-opts.js +5 -6
  9. package/dist/cmd-opts.js.map +1 -1
  10. package/dist/commands/create-block.cjs +5 -6
  11. package/dist/commands/create-block.cjs.map +1 -1
  12. package/dist/commands/create-block.d.ts +2 -2
  13. package/dist/commands/create-block.d.ts.map +1 -0
  14. package/dist/commands/create-block.js +2 -4
  15. package/dist/commands/create-block.js.map +1 -1
  16. package/dist/commands/reset.cjs +5 -6
  17. package/dist/commands/reset.cjs.map +1 -1
  18. package/dist/commands/reset.d.ts +2 -2
  19. package/dist/commands/reset.d.ts.map +1 -0
  20. package/dist/commands/reset.js +1 -2
  21. package/dist/commands/reset.js.map +1 -1
  22. package/dist/commands/start/docker/s3.cjs +6 -7
  23. package/dist/commands/start/docker/s3.cjs.map +1 -1
  24. package/dist/commands/start/docker/s3.d.ts +22 -22
  25. package/dist/commands/start/docker/s3.d.ts.map +1 -0
  26. package/dist/commands/start/docker/s3.js +1 -2
  27. package/dist/commands/start/docker/s3.js.map +1 -1
  28. package/dist/commands/start/docker.cjs +6 -7
  29. package/dist/commands/start/docker.cjs.map +1 -1
  30. package/dist/commands/start/docker.d.ts +22 -22
  31. package/dist/commands/start/docker.d.ts.map +1 -0
  32. package/dist/commands/start/docker.js +1 -2
  33. package/dist/commands/start/docker.js.map +1 -1
  34. package/dist/commands/start/local/s3.cjs +7 -8
  35. package/dist/commands/start/local/s3.cjs.map +1 -1
  36. package/dist/commands/start/local/s3.d.ts +26 -26
  37. package/dist/commands/start/local/s3.d.ts.map +1 -0
  38. package/dist/commands/start/local/s3.js +1 -2
  39. package/dist/commands/start/local/s3.js.map +1 -1
  40. package/dist/commands/start/local.cjs +7 -8
  41. package/dist/commands/start/local.cjs.map +1 -1
  42. package/dist/commands/start/local.d.ts +24 -24
  43. package/dist/commands/start/local.d.ts.map +1 -0
  44. package/dist/commands/start/local.js +1 -2
  45. package/dist/commands/start/local.js.map +1 -1
  46. package/dist/commands/start.cjs +5 -6
  47. package/dist/commands/start.cjs.map +1 -1
  48. package/dist/commands/start.d.ts +2 -2
  49. package/dist/commands/start.d.ts.map +1 -0
  50. package/dist/commands/start.js +1 -2
  51. package/dist/commands/start.js.map +1 -1
  52. package/dist/commands/stop.cjs +6 -7
  53. package/dist/commands/stop.cjs.map +1 -1
  54. package/dist/commands/stop.d.ts +2 -2
  55. package/dist/commands/stop.d.ts.map +1 -0
  56. package/dist/commands/stop.js +1 -2
  57. package/dist/commands/stop.js.map +1 -1
  58. package/dist/commands/svc/create/arg-parser.cjs +1 -2
  59. package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
  60. package/dist/commands/svc/create/arg-parser.js +1 -1
  61. package/dist/commands/svc/create/arg-parser.js.map +1 -1
  62. package/dist/commands/svc/create/docker/s3.cjs +7 -8
  63. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  64. package/dist/commands/svc/create/docker/s3.d.ts +23 -23
  65. package/dist/commands/svc/create/docker/s3.d.ts.map +1 -0
  66. package/dist/commands/svc/create/docker/s3.js +1 -2
  67. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  68. package/dist/commands/svc/create/docker.cjs +7 -8
  69. package/dist/commands/svc/create/docker.cjs.map +1 -1
  70. package/dist/commands/svc/create/docker.d.ts +23 -23
  71. package/dist/commands/svc/create/docker.d.ts.map +1 -0
  72. package/dist/commands/svc/create/docker.js +1 -2
  73. package/dist/commands/svc/create/docker.js.map +1 -1
  74. package/dist/commands/svc/create/local/s3.cjs +8 -9
  75. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  76. package/dist/commands/svc/create/local/s3.d.ts +27 -27
  77. package/dist/commands/svc/create/local/s3.d.ts.map +1 -0
  78. package/dist/commands/svc/create/local/s3.js +1 -2
  79. package/dist/commands/svc/create/local/s3.js.map +1 -1
  80. package/dist/commands/svc/create/local.cjs +8 -9
  81. package/dist/commands/svc/create/local.cjs.map +1 -1
  82. package/dist/commands/svc/create/local.d.ts +25 -25
  83. package/dist/commands/svc/create/local.d.ts.map +1 -0
  84. package/dist/commands/svc/create/local.js +1 -2
  85. package/dist/commands/svc/create/local.js.map +1 -1
  86. package/dist/commands/svc/delete.cjs +5 -6
  87. package/dist/commands/svc/delete.cjs.map +1 -1
  88. package/dist/commands/svc/delete.d.ts +4 -4
  89. package/dist/commands/svc/delete.d.ts.map +1 -0
  90. package/dist/commands/svc/delete.js +1 -2
  91. package/dist/commands/svc/delete.js.map +1 -1
  92. package/dist/commands/svc/down.cjs +6 -7
  93. package/dist/commands/svc/down.cjs.map +1 -1
  94. package/dist/commands/svc/down.d.ts +3 -3
  95. package/dist/commands/svc/down.d.ts.map +1 -0
  96. package/dist/commands/svc/down.js +1 -2
  97. package/dist/commands/svc/down.js.map +1 -1
  98. package/dist/commands/svc/list.cjs +3 -4
  99. package/dist/commands/svc/list.cjs.map +1 -1
  100. package/dist/commands/svc/list.d.ts.map +1 -0
  101. package/dist/commands/svc/list.js +1 -2
  102. package/dist/commands/svc/list.js.map +1 -1
  103. package/dist/commands/svc/up.cjs +6 -7
  104. package/dist/commands/svc/up.cjs.map +1 -1
  105. package/dist/commands/svc/up.d.ts +3 -3
  106. package/dist/commands/svc/up.d.ts.map +1 -0
  107. package/dist/commands/svc/up.js +1 -2
  108. package/dist/commands/svc/up.js.map +1 -1
  109. package/dist/core.cjs +9 -10
  110. package/dist/core.cjs.map +1 -1
  111. package/dist/core.js +1 -2
  112. package/dist/core.js.map +1 -1
  113. package/dist/index.cjs +18 -19
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +1 -2
  117. package/dist/index.js.map +1 -1
  118. package/dist/package.cjs +2 -3
  119. package/dist/package.cjs.map +1 -1
  120. package/dist/package.js +1 -2
  121. package/dist/package.js.map +1 -1
  122. package/dist/platforma.cjs +3 -4
  123. package/dist/platforma.cjs.map +1 -1
  124. package/dist/platforma.js +1 -2
  125. package/dist/platforma.js.map +1 -1
  126. package/dist/run.cjs +3 -4
  127. package/dist/run.cjs.map +1 -1
  128. package/dist/run.js +1 -2
  129. package/dist/run.js.map +1 -1
  130. package/dist/state.cjs +4 -5
  131. package/dist/state.cjs.map +1 -1
  132. package/dist/state.js +1 -2
  133. package/dist/state.js.map +1 -1
  134. package/dist/templates/compose.cjs +2 -3
  135. package/dist/templates/compose.cjs.map +1 -1
  136. package/dist/templates/compose.js +1 -2
  137. package/dist/templates/compose.js.map +1 -1
  138. package/dist/templates/pl-config.cjs +5 -6
  139. package/dist/templates/pl-config.cjs.map +1 -1
  140. package/dist/templates/pl-config.js +1 -2
  141. package/dist/templates/pl-config.js.map +1 -1
  142. package/dist/templates/types.cjs +1 -2
  143. package/dist/templates/types.cjs.map +1 -1
  144. package/dist/templates/types.js +1 -1
  145. package/dist/util.cjs +2 -3
  146. package/dist/util.cjs.map +1 -1
  147. package/dist/util.js +1 -2
  148. package/dist/util.js.map +1 -1
  149. package/package.json +6 -6
package/dist/index.cjs CHANGED
@@ -1,21 +1,20 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_create_block = require('./commands/create-block.cjs');
3
- const require_reset = require('./commands/reset.cjs');
4
- const require_start = require('./commands/start.cjs');
5
- const require_stop = require('./commands/stop.cjs');
6
- const require_docker = require('./commands/start/docker.cjs');
7
- const require_local = require('./commands/start/local.cjs');
8
- const require_delete = require('./commands/svc/delete.cjs');
9
- const require_down = require('./commands/svc/down.cjs');
10
- const require_list = require('./commands/svc/list.cjs');
11
- const require_up = require('./commands/svc/up.cjs');
12
- const require_s3 = require('./commands/start/docker/s3.cjs');
13
- const require_s3$1 = require('./commands/start/local/s3.cjs');
14
- const require_docker$1 = require('./commands/svc/create/docker.cjs');
15
- const require_local$1 = require('./commands/svc/create/local.cjs');
16
- const require_s3$2 = require('./commands/svc/create/docker/s3.cjs');
17
- const require_s3$3 = require('./commands/svc/create/local/s3.cjs');
18
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_create_block = require("./commands/create-block.cjs");
3
+ const require_reset = require("./commands/reset.cjs");
4
+ const require_start = require("./commands/start.cjs");
5
+ const require_stop = require("./commands/stop.cjs");
6
+ const require_docker = require("./commands/start/docker.cjs");
7
+ const require_local = require("./commands/start/local.cjs");
8
+ const require_delete = require("./commands/svc/delete.cjs");
9
+ const require_down = require("./commands/svc/down.cjs");
10
+ const require_list = require("./commands/svc/list.cjs");
11
+ const require_up = require("./commands/svc/up.cjs");
12
+ const require_s3 = require("./commands/start/docker/s3.cjs");
13
+ const require_s3$1 = require("./commands/start/local/s3.cjs");
14
+ const require_docker$1 = require("./commands/svc/create/docker.cjs");
15
+ const require_local$1 = require("./commands/svc/create/local.cjs");
16
+ const require_s3$2 = require("./commands/svc/create/docker/s3.cjs");
17
+ const require_s3$3 = require("./commands/svc/create/local/s3.cjs");
19
18
  //#region src/index.ts
20
19
  const COMMANDS = {
21
20
  "create-block": require_create_block.default,
@@ -35,7 +34,7 @@ const COMMANDS = {
35
34
  "svc:create:docker:s3": require_s3$2.default,
36
35
  "svc:create:local:s3": require_s3$3.default
37
36
  };
38
-
39
37
  //#endregion
40
38
  exports.COMMANDS = COMMANDS;
39
+
41
40
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./commands/create-block\";\nimport Cmd1 from \"./commands/reset\";\nimport Cmd2 from \"./commands/start\";\nimport Cmd3 from \"./commands/stop\";\nimport Cmd4 from \"./commands/start/docker\";\nimport Cmd5 from \"./commands/start/local\";\nimport Cmd6 from \"./commands/svc/delete\";\nimport Cmd7 from \"./commands/svc/down\";\nimport Cmd8 from \"./commands/svc/list\";\nimport Cmd9 from \"./commands/svc/up\";\nimport Cmd10 from \"./commands/start/docker/s3\";\nimport Cmd11 from \"./commands/start/local/s3\";\nimport Cmd13 from \"./commands/svc/create/docker\";\nimport Cmd14 from \"./commands/svc/create/local\";\nimport Cmd15 from \"./commands/svc/create/docker/s3\";\nimport Cmd16 from \"./commands/svc/create/local/s3\";\n\nexport const COMMANDS = {\n \"create-block\": Cmd0,\n reset: Cmd1,\n start: Cmd2,\n stop: Cmd3,\n \"start:docker\": Cmd4,\n \"start:local\": Cmd5,\n \"svc:delete\": Cmd6,\n \"svc:down\": Cmd7,\n \"svc:list\": Cmd8,\n \"svc:up\": Cmd9,\n \"start:docker:s3\": Cmd10,\n \"start:local:s3\": Cmd11,\n \"svc:create:docker\": Cmd13,\n \"svc:create:local\": Cmd14,\n \"svc:create:docker:s3\": Cmd15,\n \"svc:create:local:s3\": Cmd16,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,MAAa,WAAW;CACtB,gBAAgBA;CAChB,OAAOC;CACP,OAAOC;CACP,MAAMC;CACN,gBAAgBC;CAChB,eAAeC;CACf,cAAcC;CACd,YAAYC;CACZ,YAAYC;CACZ,UAAUC;CACV,mBAAmBC;CACnB,kBAAkBC;CAClB,qBAAqBC;CACrB,oBAAoBC;CACpB,wBAAwBC;CACxB,uBAAuBC;CACxB"}
1
+ {"version":3,"file":"index.cjs","names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./commands/create-block\";\nimport Cmd1 from \"./commands/reset\";\nimport Cmd2 from \"./commands/start\";\nimport Cmd3 from \"./commands/stop\";\nimport Cmd4 from \"./commands/start/docker\";\nimport Cmd5 from \"./commands/start/local\";\nimport Cmd6 from \"./commands/svc/delete\";\nimport Cmd7 from \"./commands/svc/down\";\nimport Cmd8 from \"./commands/svc/list\";\nimport Cmd9 from \"./commands/svc/up\";\nimport Cmd10 from \"./commands/start/docker/s3\";\nimport Cmd11 from \"./commands/start/local/s3\";\nimport Cmd13 from \"./commands/svc/create/docker\";\nimport Cmd14 from \"./commands/svc/create/local\";\nimport Cmd15 from \"./commands/svc/create/docker/s3\";\nimport Cmd16 from \"./commands/svc/create/local/s3\";\n\nexport const COMMANDS = {\n \"create-block\": Cmd0,\n reset: Cmd1,\n start: Cmd2,\n stop: Cmd3,\n \"start:docker\": Cmd4,\n \"start:local\": Cmd5,\n \"svc:delete\": Cmd6,\n \"svc:down\": Cmd7,\n \"svc:list\": Cmd8,\n \"svc:up\": Cmd9,\n \"start:docker:s3\": Cmd10,\n \"start:local:s3\": Cmd11,\n \"svc:create:docker\": Cmd13,\n \"svc:create:local\": Cmd14,\n \"svc:create:docker:s3\": Cmd15,\n \"svc:create:local:s3\": Cmd16,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAa,WAAW;CACtB,gBAAgBA,qBAAAA;CAChB,OAAOC,cAAAA;CACP,OAAOC,cAAAA;CACP,MAAMC,aAAAA;CACN,gBAAgBC,eAAAA;CAChB,eAAeC,cAAAA;CACf,cAAcC,eAAAA;CACd,YAAYC,aAAAA;CACZ,YAAYC,aAAAA;CACZ,UAAUC,WAAAA;CACV,mBAAmBC,WAAAA;CACnB,kBAAkBC,aAAAA;CAClB,qBAAqBC,iBAAAA;CACrB,oBAAoBC,gBAAAA;CACpB,wBAAwBC,aAAAA;CACxB,uBAAuBC,aAAAA;CACxB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;cAmBa,QAAA"}
package/dist/index.js CHANGED
@@ -14,7 +14,6 @@ import Docker$1 from "./commands/svc/create/docker.js";
14
14
  import Local$1 from "./commands/svc/create/local.js";
15
15
  import S3$2 from "./commands/svc/create/docker/s3.js";
16
16
  import Local$2 from "./commands/svc/create/local/s3.js";
17
-
18
17
  //#region src/index.ts
19
18
  const COMMANDS = {
20
19
  "create-block": CreateBlock,
@@ -34,7 +33,7 @@ const COMMANDS = {
34
33
  "svc:create:docker:s3": S3$2,
35
34
  "svc:create:local:s3": Local$2
36
35
  };
37
-
38
36
  //#endregion
39
37
  export { COMMANDS };
38
+
40
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./commands/create-block\";\nimport Cmd1 from \"./commands/reset\";\nimport Cmd2 from \"./commands/start\";\nimport Cmd3 from \"./commands/stop\";\nimport Cmd4 from \"./commands/start/docker\";\nimport Cmd5 from \"./commands/start/local\";\nimport Cmd6 from \"./commands/svc/delete\";\nimport Cmd7 from \"./commands/svc/down\";\nimport Cmd8 from \"./commands/svc/list\";\nimport Cmd9 from \"./commands/svc/up\";\nimport Cmd10 from \"./commands/start/docker/s3\";\nimport Cmd11 from \"./commands/start/local/s3\";\nimport Cmd13 from \"./commands/svc/create/docker\";\nimport Cmd14 from \"./commands/svc/create/local\";\nimport Cmd15 from \"./commands/svc/create/docker/s3\";\nimport Cmd16 from \"./commands/svc/create/local/s3\";\n\nexport const COMMANDS = {\n \"create-block\": Cmd0,\n reset: Cmd1,\n start: Cmd2,\n stop: Cmd3,\n \"start:docker\": Cmd4,\n \"start:local\": Cmd5,\n \"svc:delete\": Cmd6,\n \"svc:down\": Cmd7,\n \"svc:list\": Cmd8,\n \"svc:up\": Cmd9,\n \"start:docker:s3\": Cmd10,\n \"start:local:s3\": Cmd11,\n \"svc:create:docker\": Cmd13,\n \"svc:create:local\": Cmd14,\n \"svc:create:docker:s3\": Cmd15,\n \"svc:create:local:s3\": Cmd16,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAa,WAAW;CACtB,gBAAgBA;CAChB,OAAOC;CACP,OAAOC;CACP,MAAMC;CACN,gBAAgBC;CAChB,eAAeC;CACf,cAAcC;CACd,YAAYC;CACZ,YAAYC;CACZ,UAAUC;CACV,mBAAmBC;CACnB,kBAAkBC;CAClB,qBAAqBC;CACrB,oBAAoBC;CACpB,wBAAwBC;CACxB,uBAAuBC;CACxB"}
1
+ {"version":3,"file":"index.js","names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from \"./commands/create-block\";\nimport Cmd1 from \"./commands/reset\";\nimport Cmd2 from \"./commands/start\";\nimport Cmd3 from \"./commands/stop\";\nimport Cmd4 from \"./commands/start/docker\";\nimport Cmd5 from \"./commands/start/local\";\nimport Cmd6 from \"./commands/svc/delete\";\nimport Cmd7 from \"./commands/svc/down\";\nimport Cmd8 from \"./commands/svc/list\";\nimport Cmd9 from \"./commands/svc/up\";\nimport Cmd10 from \"./commands/start/docker/s3\";\nimport Cmd11 from \"./commands/start/local/s3\";\nimport Cmd13 from \"./commands/svc/create/docker\";\nimport Cmd14 from \"./commands/svc/create/local\";\nimport Cmd15 from \"./commands/svc/create/docker/s3\";\nimport Cmd16 from \"./commands/svc/create/local/s3\";\n\nexport const COMMANDS = {\n \"create-block\": Cmd0,\n reset: Cmd1,\n start: Cmd2,\n stop: Cmd3,\n \"start:docker\": Cmd4,\n \"start:local\": Cmd5,\n \"svc:delete\": Cmd6,\n \"svc:down\": Cmd7,\n \"svc:list\": Cmd8,\n \"svc:up\": Cmd9,\n \"start:docker:s3\": Cmd10,\n \"start:local:s3\": Cmd11,\n \"svc:create:docker\": Cmd13,\n \"svc:create:local\": Cmd14,\n \"svc:create:docker:s3\": Cmd15,\n \"svc:create:local:s3\": Cmd16,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAa,WAAW;CACtB,gBAAgBA;CAChB,OAAOC;CACP,OAAOC;CACP,MAAMC;CACN,gBAAgBC;CAChB,eAAeC;CACf,cAAcC;CACd,YAAYC;CACZ,YAAYC;CACZ,UAAUC;CACV,mBAAmBC;CACnB,kBAAkBC;CAClB,qBAAqBC;CACrB,oBAAoBC;CACpB,wBAAwBC;CACxB,uBAAuBC;CACxB"}
package/dist/package.cjs CHANGED
@@ -1,10 +1,9 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_runtime.__toESM(node_fs);
4
4
  let node_path = require("node:path");
5
5
  let _milaboratories_pl_deployments = require("@milaboratories/pl-deployments");
6
6
  let node_url = require("node:url");
7
-
8
7
  //#region src/package.ts
9
8
  const __dirname$1 = (0, node_path.dirname)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href));
10
9
  function path(...p) {
@@ -20,9 +19,9 @@ function plImageTag(version) {
20
19
  if (!version) version = (0, _milaboratories_pl_deployments.getDefaultPlVersion)();
21
20
  return `quay.io/milaboratories/platforma:${version}`;
22
21
  }
23
-
24
22
  //#endregion
25
23
  exports.assets = assets;
26
24
  exports.plImageTag = plImageTag;
27
25
  exports.readFileSync = readFileSync;
26
+
28
27
  //# sourceMappingURL=package.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.cjs","names":["__dirname","fs"],"sources":["../src/package.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith(\"compose-\") && entry.endsWith(\".yaml\");\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"mappings":";;;;;;;;AAMA,MAAMA,+GAAkD,CAAC;AAEzD,SAAgB,KAAK,GAAG,GAAqB;AAC3C,+BAAeA,aAAW,MAAM,GAAG,EAAE;;AAOvC,SAAgB,OAAO,GAAG,GAAqB;AAC7C,QAAO,KAAK,UAAU,GAAG,EAAE;;AAY7B,SAAgB,aAAa,GAAG,GAAqB;AACnD,QAAOC,QAAG,aAAa,KAAK,GAAG,EAAE,CAAC;;AAGpC,SAAgB,WAAW,SAA0B;AACnD,KAAI,CAAC,QACH,oEAA+B;AAGjC,QAAO,oCAAoC"}
1
+ {"version":3,"file":"package.cjs","names":["__dirname","fs"],"sources":["../src/package.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith(\"compose-\") && entry.endsWith(\".yaml\");\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"mappings":";;;;;;;AAMA,MAAMA,eAAAA,GAAAA,UAAAA,UAAAA,GAAAA,SAAAA,eAAAA,QAAAA,MAAAA,CAAAA,cAAAA,WAAAA,CAAAA,KAAkD,CAAC;AAEzD,SAAgB,KAAK,GAAG,GAAqB;AAC3C,SAAA,GAAA,UAAA,SAAeA,aAAW,MAAM,GAAG,EAAE;;AAOvC,SAAgB,OAAO,GAAG,GAAqB;AAC7C,QAAO,KAAK,UAAU,GAAG,EAAE;;AAY7B,SAAgB,aAAa,GAAG,GAAqB;AACnD,QAAOC,QAAG,aAAa,KAAK,GAAG,EAAE,CAAC;;AAGpC,SAAgB,WAAW,SAA0B;AACnD,KAAI,CAAC,QACH,YAAA,GAAA,+BAAA,sBAA+B;AAGjC,QAAO,oCAAoC"}
package/dist/package.js CHANGED
@@ -2,7 +2,6 @@ import * as fs$1 from "node:fs";
2
2
  import { dirname, resolve } from "node:path";
3
3
  import { getDefaultPlVersion } from "@milaboratories/pl-deployments";
4
4
  import { fileURLToPath } from "node:url";
5
-
6
5
  //#region src/package.ts
7
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
7
  function path$1(...p) {
@@ -18,7 +17,7 @@ function plImageTag(version) {
18
17
  if (!version) version = getDefaultPlVersion();
19
18
  return `quay.io/milaboratories/platforma:${version}`;
20
19
  }
21
-
22
20
  //#endregion
23
21
  export { assets, plImageTag, readFileSync };
22
+
24
23
  //# sourceMappingURL=package.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","names":["path","fs"],"sources":["../src/package.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith(\"compose-\") && entry.endsWith(\".yaml\");\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"mappings":";;;;;;AAMA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAEzD,SAAgBA,OAAK,GAAG,GAAqB;AAC3C,QAAO,QAAQ,WAAW,MAAM,GAAG,EAAE;;AAOvC,SAAgB,OAAO,GAAG,GAAqB;AAC7C,QAAOA,OAAK,UAAU,GAAG,EAAE;;AAY7B,SAAgB,aAAa,GAAG,GAAqB;AACnD,QAAOC,KAAG,aAAaD,OAAK,GAAG,EAAE,CAAC;;AAGpC,SAAgB,WAAW,SAA0B;AACnD,KAAI,CAAC,QACH,WAAU,qBAAqB;AAGjC,QAAO,oCAAoC"}
1
+ {"version":3,"file":"package.js","names":["path","fs"],"sources":["../src/package.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport * as fs from \"node:fs\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\nimport { dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, \"..\", ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path(\"dist\", ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path(\"assets\", ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith(\"compose-\") && entry.endsWith(\".yaml\");\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"mappings":";;;;;AAMA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAEzD,SAAgBA,OAAK,GAAG,GAAqB;AAC3C,QAAO,QAAQ,WAAW,MAAM,GAAG,EAAE;;AAOvC,SAAgB,OAAO,GAAG,GAAqB;AAC7C,QAAOA,OAAK,UAAU,GAAG,EAAE;;AAY7B,SAAgB,aAAa,GAAG,GAAqB;AACnD,QAAOC,KAAG,aAAaD,OAAK,GAAG,EAAE,CAAC;;AAGpC,SAAgB,WAAW,SAA0B;AACnD,KAAI,CAAC,QACH,WAAU,qBAAqB;AAGjC,QAAO,oCAAoC"}
@@ -1,5 +1,5 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_state = require('./state.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_state = require("./state.cjs");
3
3
  let node_os = require("node:os");
4
4
  node_os = require_runtime.__toESM(node_os);
5
5
  let node_fs = require("node:fs");
@@ -11,7 +11,6 @@ let https = require("https");
11
11
  https = require_runtime.__toESM(https);
12
12
  let tar = require("tar");
13
13
  tar = require_runtime.__toESM(tar);
14
-
15
14
  //#region src/platforma.ts
16
15
  const OSes = [
17
16
  "linux",
@@ -133,8 +132,8 @@ function trimExtension(filename) {
133
132
  if (lastDotIndex === -1) return filename;
134
133
  return filename.slice(0, lastDotIndex);
135
134
  }
136
-
137
135
  //#endregion
138
136
  exports.binaryPath = binaryPath;
139
137
  exports.getBinary = getBinary;
138
+
140
139
  //# sourceMappingURL=platforma.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.cjs","names":["os","state","fs","path"],"sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"platforma.cjs","names":["os","state","fs","path"],"sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"mappings":"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"}
package/dist/platforma.js CHANGED
@@ -5,7 +5,6 @@ import path from "node:path";
5
5
  import { getDefaultPlVersion } from "@milaboratories/pl-deployments";
6
6
  import https from "https";
7
7
  import * as tar from "tar";
8
-
9
8
  //#region src/platforma.ts
10
9
  const OSes = [
11
10
  "linux",
@@ -127,7 +126,7 @@ function trimExtension(filename) {
127
126
  if (lastDotIndex === -1) return filename;
128
127
  return filename.slice(0, lastDotIndex);
129
128
  }
130
-
131
129
  //#endregion
132
130
  export { binaryPath, getBinary };
131
+
133
132
  //# sourceMappingURL=platforma.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.js","names":["state"],"sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"mappings":";;;;;;;;;AAUA,MAAa,OAAO;CAAC;CAAS;CAAS;CAAU;AAGjD,SAAgB,UAAU,QAAyB;CACjD,MAAM,WAAW,UAAU,GAAG,UAAU;AAExC,SAAQ,UAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,QACE,OAAM,IAAI,MACR,qBAAqB,SAAS,qFAC5B,KAAK,UAAU,KAAK,CACvB;;;AAIP,MAAa,SAAS,CAAC,SAAS,QAAQ;AAGxC,SAAgB,YAAY,UAA6B;CACvD,MAAM,OAAO,YAAY,GAAG,MAAM;AAElC,SAAQ,MAAR;EACE,KAAK,QACH,QAAO;EACT,KAAK,MACH,QAAO;EACT,QACE,OAAM,IAAI,MACR,2BAA2B,KAAK,8FAC9B,KAAK,UAAU,OAAO,CACzB;;;AAIP,SAAgB,gBACd,QACA,SAMiB;CACjB,MAAM,UAAU,SAAS,WAAW,qBAAqB;CACzD,MAAM,eAAe,SAAS,gBAAgB,QAAQ,OAAO;CAE7D,MAAM,cAAc,MAAM,QAAQ,GAAG,aAAa,CAAC;CACnD,MAAM,cACJ,SAAS,eAAe,yCAAyC,WAAW,CAAC,GAAG;CAElF,MAAM,kBAAkB,SAAS,UAAUA,cAAM,SAAS,YAAY;AACtE,KAAI,GAAG,WAAW,gBAAgB,EAAE;AAClC,SAAO,KAAK,gDAAgD,gBAAgB,kBAAkB;AAC9F,SAAO,QAAQ,QAAQ,gBAAgB;;AAGzC,IAAG,UAAU,KAAK,QAAQ,gBAAgB,EAAE,EAAE,WAAW,MAAM,CAAC;AAEhE,QAAO,KACL,sDAAsD,YAAY,eAAe,kBAClF;CAED,MAAM,UAAU,MAAM,IAAI,YAAY;AAEtC,QAAO,IAAI,SAAS,SAAS,WAAW;AACtC,UAAQ,GAAG,aAAa,aAAa;AACnC,OAAI,CAAC,SAAS,YAAY;IACxB,MAAM,sBAAM,IAAI,MACd,0EACD;AACD,YAAQ,SAAS;AACjB,WAAO,IAAI;AACX;;AAEF,OAAI,SAAS,eAAe,KAAK;IAC/B,MAAM,sBAAM,IAAI,MACd,+BAA+B,SAAS,WAAW,GAAG,SAAS,gBAChE;AACD,YAAQ,SAAS;AACjB,WAAO,IAAI;AACX;;GAGF,MAAM,aAAa,SAAS,SAAS,QAAQ,qBAAqB,KAAK,GAAG;GAC1E,IAAI,kBAAkB;GAEtB,MAAM,UAAU,GAAG,kBAAkB,gBAAgB;AAErD,YAAS,KAAK,QAAQ;AACtB,YAAS,GAAG,SAAS,UAAU;AAC7B,uBAAmB,MAAM;IACzB,MAAM,WAAY,kBAAkB,aAAc;AAClD,QAAI,aACF,SAAQ,OAAO,MAAM,kBAAkB,SAAS,QAAQ,EAAE,CAAC,KAAK;KAElE;AAEF,YAAS,GAAG,UAAU,QAAe;AACnC,OAAG,WAAW,gBAAgB;AAC9B,WAAO,MAAM,wCAAwC,IAAI,UAAU;AACnE,YAAQ,SAAS;AACjB,WAAO,IAAI;KACX;AAEF,WAAQ,GAAG,gBAAgB;AACzB,YAAQ,OAAO;AACf,WAAO,KAAK,uBAAuB;AACnC,YAAQ,SAAS;AACjB,YAAQ,gBAAgB;KACxB;IACF;GACF;;AAGJ,SAAgB,eACd,QACA,SAKQ;AACR,QAAO,MAAM,wBAAwB;CAErC,MAAM,UAAU,SAAS,WAAW,qBAAqB;AACzD,QAAO,MAAM,eAAe,QAAQ,GAAG;CACvC,MAAM,cAAc,GAAG,cAAc,EAAE,SAAS,CAAC,CAAC;CAElD,MAAM,cAAc,SAAS,eAAeA,cAAM,SAAS,YAAY;AACvE,QAAO,MAAM,oBAAoB,YAAY,GAAG;CAEhD,MAAM,YAAY,SAAS,aAAa,cAAc,YAAY;AAClE,QAAO,MAAM,kBAAkB,UAAU,GAAG;AAE5C,KAAI,GAAG,WAAW,UAAU,EAAE;AAC5B,SAAO,KAAK,+CAA+C,UAAU,UAAU;AAC/E,SAAO;;AAGT,KAAI,CAAC,GAAG,WAAW,YAAY,EAAE;EAC/B,MAAM,MAAM,kDAAkD,YAAY;AAC1E,SAAO,MAAM,IAAI;AACjB,QAAM,IAAI,MAAM,IAAI;;AAGtB,KAAI,CAAC,GAAG,WAAW,UAAU,EAAE;AAC7B,SAAO,MAAM,0BAA0B,UAAU,GAAG;AACpD,KAAG,UAAU,WAAW,EAAE,WAAW,MAAM,CAAC;;AAG9C,QAAO,KACL,sDAAsD,YAAY,kBAAkB,YACrF;AAED,KAAI,EAAE;EACJ,MAAM;EACN,KAAK;EACL,MAAM;EACN,MAAM;EACP,CAAC;AAEF,QAAO,KAAK,qBAAqB;AAEjC,QAAO;;AAGT,SAAgB,UACd,QACA,SACiB;AACjB,QAAO,gBAAgB,QAAQ,QAAQ,CAAC,MAAM,gBAC5C,eAAe,QAAQ,EAAE,aAAa,CAAC,CACxC;;AAGH,SAAS,cAAc,SAAwC;AAE7D,QAAO,MADS,SAAS,WAAW,qBAAqB,CACpC,GAAG,aAAa;;AAGvC,SAAgB,WAAW,SAAkB,GAAG,GAAqB;AACnE,QAAOA,cAAM,SAAS,cAAc,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE;;AAGzD,SAAS,cAAc,UAA0B;CAC/C,MAAM,eAAe,SAAS,YAAY,IAAI;AAC9C,KAAI,iBAAiB,GACnB,QAAO;AAET,QAAO,SAAS,MAAM,GAAG,aAAa"}
1
+ {"version":3,"file":"platforma.js","names":["state"],"sources":["../src/platforma.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport https from \"https\";\nimport path from \"node:path\";\n\nimport * as tar from \"tar\";\nimport type winston from \"winston\";\nimport state from \"./state\";\nimport { getDefaultPlVersion } from \"@milaboratories/pl-deployments\";\n\nexport const OSes = [\"linux\", \"macos\", \"windows\"] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case \"darwin\":\n return \"macos\";\n case \"linux\":\n return \"linux\";\n case \"win32\":\n return \"windows\";\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +\n JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = [\"amd64\", \"arm64\"] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case \"arm64\":\n return \"arm64\";\n case \"x64\":\n return \"amd64\";\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +\n JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL =\n options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(\n `Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`,\n );\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on(\"response\", (response) => {\n if (!response.statusCode) {\n const err = new Error(\n \"failed to download archive: no HTTP status code in response from server\",\n );\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(\n `failed to download archive: ${response.statusCode} ${response.statusMessage}`,\n );\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers[\"content-length\"] || \"0\", 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on(\"data\", (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on(\"error\", (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on(\"finish\", () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug(\"extracting archive...\");\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(\n `Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`,\n );\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) =>\n extractArchive(logger, { archivePath }),\n );\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf(\".\");\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"mappings":"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"}
package/dist/run.cjs CHANGED
@@ -1,7 +1,6 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- require('./state.cjs');
1
+ require("./_virtual/_rolldown/runtime.cjs");
2
+ require("./state.cjs");
3
3
  let node_child_process = require("node:child_process");
4
-
5
4
  //#region src/run.ts
6
5
  function runCommands(logger, cmds, options) {
7
6
  const buffers = [];
@@ -59,7 +58,7 @@ function runSync(logger, cmd, args, options) {
59
58
  };
60
59
  return (0, node_child_process.spawnSync)(cmd, args, options);
61
60
  }
62
-
63
61
  //#endregion
64
62
  exports.runCommands = runCommands;
63
+
65
64
  //# sourceMappingURL=run.cjs.map
package/dist/run.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.cjs","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,sCAAc,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,0CAAiB,KAAK,MAAM,QAAQ"}
1
+ {"version":3,"file":"run.cjs","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,SAAA,GAAA,mBAAA,OAAc,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,SAAA,GAAA,mBAAA,WAAiB,KAAK,MAAM,QAAQ"}
package/dist/run.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import "./state.js";
2
2
  import { spawn, spawnSync } from "node:child_process";
3
-
4
3
  //#region src/run.ts
5
4
  function runCommands(logger, cmds, options) {
6
5
  const buffers = [];
@@ -58,7 +57,7 @@ function runSync(logger, cmd, args, options) {
58
57
  };
59
58
  return spawnSync(cmd, args, options);
60
59
  }
61
-
62
60
  //#endregion
63
61
  export { runCommands };
62
+
64
63
  //# sourceMappingURL=run.js.map
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,UAAU,KAAK,MAAM,QAAQ"}
1
+ {"version":3,"file":"run.js","names":[],"sources":["../src/run.ts"],"sourcesContent":["import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from \"node:child_process\";\nimport { spawnSync, spawn } from \"node:child_process\";\nimport type { instanceCommand } from \"./state\";\nimport state from \"./state\";\nimport type winston from \"winston\";\n\ntype runResult = {\n executed: SpawnSyncReturns<Buffer>[];\n spawned: ChildProcess[];\n};\n\nexport function runCommands(\n logger: winston.Logger,\n cmds: instanceCommand[],\n options?: SpawnOptions,\n): runResult {\n const buffers: SpawnSyncReturns<Buffer>[] = [];\n const children: ChildProcess[] = [];\n for (const cmd of cmds) {\n const opts = {\n cwd: cmd.workdir,\n env: {\n ...cmd.envs,\n ...options?.env,\n },\n ...cmd.runOpts,\n ...options,\n };\n\n if (cmd.async) {\n const child = run(logger, cmd.cmd, cmd.args, opts);\n children.push(child);\n } else {\n const result = runSync(logger, cmd.cmd, cmd.args, opts);\n buffers.push(result);\n if (result.error || result.status !== 0) {\n break;\n }\n }\n }\n\n return {\n executed: buffers,\n spawned: children,\n };\n}\n\nexport function rerunLast(logger: winston.Logger, options: SpawnOptions): runResult {\n const instance = state.currentInstance;\n\n if (!instance) {\n throw new Error(\"no previous run info found: this is the first run after package installation\");\n }\n\n return runCommands(logger, instance.upCommands, options);\n}\n\nexport function run(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n wd: ${options.cwd?.toString()}`,\n );\n\n options.env = { ...process.env, ...options.env };\n logger.debug(\" spawning child process\");\n const child = spawn(cmd, args, options);\n let exitAfterChild: boolean = false;\n\n //\n // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.\n //\n const sigintHandler = () => {\n child.kill(\"SIGINT\");\n exitAfterChild = true;\n };\n\n logger.debug(\" setting up signal handler\");\n process.on(\"SIGINT\", sigintHandler);\n\n child.on(\"close\", (code) => {\n process.removeListener(\"SIGINT\", sigintHandler);\n if (exitAfterChild) {\n process.exit(code);\n }\n });\n\n return child;\n}\n\nexport function runSync(\n logger: winston.Logger,\n cmd: string,\n args: readonly string[],\n options: SpawnOptions,\n): SpawnSyncReturns<Buffer> {\n logger.debug(\n `Running:\\n cmd: ${JSON.stringify([cmd, ...args])}\\n opts: ${JSON.stringify(options)}`,\n );\n\n options.env = { ...process.env, ...options.env };\n return spawnSync(cmd, args, options);\n}\n"],"mappings":";;;AAWA,SAAgB,YACd,QACA,MACA,SACW;CACX,MAAM,UAAsC,EAAE;CAC9C,MAAM,WAA2B,EAAE;AACnC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO;GACX,KAAK,IAAI;GACT,KAAK;IACH,GAAG,IAAI;IACP,GAAG,SAAS;IACb;GACD,GAAG,IAAI;GACP,GAAG;GACJ;AAED,MAAI,IAAI,OAAO;GACb,MAAM,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AAClD,YAAS,KAAK,MAAM;SACf;GACL,MAAM,SAAS,QAAQ,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK;AACvD,WAAQ,KAAK,OAAO;AACpB,OAAI,OAAO,SAAS,OAAO,WAAW,EACpC;;;AAKN,QAAO;EACL,UAAU;EACV,SAAS;EACV;;AAaH,SAAgB,IACd,QACA,KACA,MACA,SACc;AACd,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,QAAQ,KAAK,UAAU,GACrF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,MAAM,2BAA2B;CACxC,MAAM,QAAQ,MAAM,KAAK,MAAM,QAAQ;CACvC,IAAI,iBAA0B;CAK9B,MAAM,sBAAsB;AAC1B,QAAM,KAAK,SAAS;AACpB,mBAAiB;;AAGnB,QAAO,MAAM,8BAA8B;AAC3C,SAAQ,GAAG,UAAU,cAAc;AAEnC,OAAM,GAAG,UAAU,SAAS;AAC1B,UAAQ,eAAe,UAAU,cAAc;AAC/C,MAAI,eACF,SAAQ,KAAK,KAAK;GAEpB;AAEF,QAAO;;AAGT,SAAgB,QACd,QACA,KACA,MACA,SAC0B;AAC1B,QAAO,MACL,oBAAoB,KAAK,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,YAAY,KAAK,UAAU,QAAQ,GACvF;AAED,SAAQ,MAAM;EAAE,GAAG,QAAQ;EAAK,GAAG,QAAQ;EAAK;AAChD,QAAO,UAAU,KAAK,MAAM,QAAQ"}
package/dist/state.cjs CHANGED
@@ -1,13 +1,12 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_util = require('./util.cjs');
3
- const require_package = require('./package.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_util = require("./util.cjs");
3
+ const require_package = require("./package.cjs");
4
4
  let node_os = require("node:os");
5
5
  node_os = require_runtime.__toESM(node_os);
6
6
  let node_fs = require("node:fs");
7
7
  node_fs = require_runtime.__toESM(node_fs);
8
8
  let node_path = require("node:path");
9
9
  node_path = require_runtime.__toESM(node_path);
10
-
11
10
  //#region src/state.ts
12
11
  var State = class State {
13
12
  static instance;
@@ -112,7 +111,7 @@ function isValidPID(pid) {
112
111
  return processName === "platforma" || processName.endsWith("/platforma") || processName.endsWith("\\platforma");
113
112
  }
114
113
  var state_default = State.getStateInstance();
115
-
116
114
  //#endregion
117
115
  exports.default = state_default;
116
+
118
117
  //# sourceMappingURL=state.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.cjs","names":["path","os","fs"],"sources":["../src/state.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as util from \"./util\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport type * as types from \"./templates/types\";\n\nexport type runInfo = {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n};\n\nexport type instanceCommand = {\n async?: boolean;\n cmd: string;\n args: readonly string[];\n envs?: NodeJS.ProcessEnv;\n workdir?: string;\n runOpts: SpawnOptions;\n};\n\nexport type commmonInstanceInfo = {\n name: string;\n upCommands: instanceCommand[];\n downCommands: instanceCommand[];\n cleanupCommands: instanceCommand[];\n runInfo?: runInfo;\n};\n\nexport type dockerInstanceInfo = commmonInstanceInfo & {\n type: \"docker\";\n};\nexport type processInstanceInfo = commmonInstanceInfo & {\n type: \"process\";\n pid?: number;\n};\n\nexport type instanceInfo = dockerInstanceInfo | processInstanceInfo;\nexport type jsonInstanceInfo =\n | Omit<dockerInstanceInfo, \"name\" | \"isActive\">\n | Omit<processInstanceInfo, \"name\" | \"isActive\">;\n\nexport function reset() {\n fs.rmSync(State.getStateInstance().filePath);\n}\n\ntype state = {\n currentInstance: string;\n};\n\nclass State {\n private static instance: State;\n\n private state: state = {\n currentInstance: \"\",\n };\n\n public readonly filePath: string;\n private readonly dirPath: string;\n\n constructor(stateDir?: string) {\n stateDir = stateDir ?? path.resolve(os.homedir(), \".config\", \"pl-bootstrap\");\n\n const stateFile = path.join(stateDir, \"state.json\");\n\n this.dirPath = stateDir;\n this.filePath = stateFile;\n\n if (!fs.existsSync(stateDir)) {\n fs.mkdirSync(stateDir, { recursive: true });\n }\n\n if (fs.existsSync(stateFile)) {\n this.state = JSON.parse(pkg.readFileSync(stateFile).toString()) as state;\n }\n }\n\n public static getStateInstance(): State {\n if (!State.instance) {\n State.instance = new State();\n }\n\n return State.instance;\n }\n\n public path(...p: string[]): string {\n return path.join(this.dirPath, ...p);\n }\n\n public instanceDir(name?: string, ...p: string[]): string {\n if (name) {\n return this.path(\"data\", name, ...p);\n }\n\n return this.path(\"data\");\n }\n\n public binaries(...p: string[]): string {\n return this.path(\"binaries\", ...p);\n }\n\n private writeState() {\n fs.writeFileSync(this.filePath, JSON.stringify(this.state));\n }\n\n get instanceList(): string[] {\n if (!fs.existsSync(this.instanceDir())) {\n return [];\n }\n\n const list = fs.readdirSync(this.instanceDir());\n\n return list.filter((iName) => this.instanceExists(iName));\n }\n\n instanceExists(name: string): boolean {\n return fs.existsSync(this.instanceDir(name, \"instance.json\"));\n }\n\n public getInstanceInfo(name: string): instanceInfo {\n const instanceInfoFile = this.instanceDir(name, \"instance.json\");\n if (!fs.existsSync(instanceInfoFile)) {\n throw new Error(`platforma backend instance '${name}' does not exist or is corrupted`);\n }\n\n const jsonInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as jsonInstanceInfo;\n return {\n name: name,\n ...jsonInfo,\n };\n }\n\n public setInstanceInfo(instanceName: string, info: jsonInstanceInfo) {\n if (!fs.existsSync(this.instanceDir(instanceName))) {\n fs.mkdirSync(this.instanceDir(instanceName), { recursive: true });\n }\n\n const instanceInfoFile = this.instanceDir(instanceName, \"instance.json\");\n let oldInfo: object = {};\n\n if (fs.existsSync(instanceInfoFile)) {\n oldInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as object;\n }\n\n fs.writeFileSync(instanceInfoFile, JSON.stringify({ ...oldInfo, ...info }));\n }\n\n public isInstanceActive(instance: instanceInfo): boolean {\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n const i = util.getDockerComposeInfo(`pl-${instance.name}`);\n if (!i) {\n return false;\n }\n return i.Status.trim().startsWith(\"running\");\n }\n\n case \"process\": {\n if (!instance.pid) {\n return false;\n }\n return isValidPID(instance.pid);\n }\n\n default:\n util.assertNever(iType);\n throw new Error(\"cli logic error: unknown service type, cannot check its state\");\n }\n }\n\n get isActive(): boolean {\n for (const iName of this.instanceList) {\n const instance = this.getInstanceInfo(iName);\n if (this.isInstanceActive(instance)) {\n return true;\n }\n }\n\n return false;\n }\n\n public isValidPID(pid: number): boolean {\n return isValidPID(pid);\n }\n\n get currentInstance(): instanceInfo | undefined {\n const name = this.state.currentInstance;\n if (name && this.instanceExists(name)) {\n return this.getInstanceInfo(name);\n }\n\n return undefined;\n }\n\n get currentInstanceName(): string {\n return this.state.currentInstance;\n }\n\n set currentInstanceName(name: string) {\n this.state.currentInstance = name;\n this.writeState();\n }\n\n selectInstance(name: string) {\n if (!this.instanceExists(name)) {\n throw new Error(`instance '${name}' does not exist`);\n }\n this.state.currentInstance = name;\n this.writeState();\n }\n}\n\nfunction isValidPID(pid: number): boolean {\n const processName = util.getProcessName(pid);\n return (\n processName === \"platforma\" ||\n processName.endsWith(\"/platforma\") ||\n processName.endsWith(\"\\\\platforma\")\n );\n}\n\nexport default State.getStateInstance();\n"],"mappings":"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"}
1
+ {"version":3,"file":"state.cjs","names":["path","os","fs"],"sources":["../src/state.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as util from \"./util\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport type * as types from \"./templates/types\";\n\nexport type runInfo = {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n};\n\nexport type instanceCommand = {\n async?: boolean;\n cmd: string;\n args: readonly string[];\n envs?: NodeJS.ProcessEnv;\n workdir?: string;\n runOpts: SpawnOptions;\n};\n\nexport type commmonInstanceInfo = {\n name: string;\n upCommands: instanceCommand[];\n downCommands: instanceCommand[];\n cleanupCommands: instanceCommand[];\n runInfo?: runInfo;\n};\n\nexport type dockerInstanceInfo = commmonInstanceInfo & {\n type: \"docker\";\n};\nexport type processInstanceInfo = commmonInstanceInfo & {\n type: \"process\";\n pid?: number;\n};\n\nexport type instanceInfo = dockerInstanceInfo | processInstanceInfo;\nexport type jsonInstanceInfo =\n | Omit<dockerInstanceInfo, \"name\" | \"isActive\">\n | Omit<processInstanceInfo, \"name\" | \"isActive\">;\n\nexport function reset() {\n fs.rmSync(State.getStateInstance().filePath);\n}\n\ntype state = {\n currentInstance: string;\n};\n\nclass State {\n private static instance: State;\n\n private state: state = {\n currentInstance: \"\",\n };\n\n public readonly filePath: string;\n private readonly dirPath: string;\n\n constructor(stateDir?: string) {\n stateDir = stateDir ?? path.resolve(os.homedir(), \".config\", \"pl-bootstrap\");\n\n const stateFile = path.join(stateDir, \"state.json\");\n\n this.dirPath = stateDir;\n this.filePath = stateFile;\n\n if (!fs.existsSync(stateDir)) {\n fs.mkdirSync(stateDir, { recursive: true });\n }\n\n if (fs.existsSync(stateFile)) {\n this.state = JSON.parse(pkg.readFileSync(stateFile).toString()) as state;\n }\n }\n\n public static getStateInstance(): State {\n if (!State.instance) {\n State.instance = new State();\n }\n\n return State.instance;\n }\n\n public path(...p: string[]): string {\n return path.join(this.dirPath, ...p);\n }\n\n public instanceDir(name?: string, ...p: string[]): string {\n if (name) {\n return this.path(\"data\", name, ...p);\n }\n\n return this.path(\"data\");\n }\n\n public binaries(...p: string[]): string {\n return this.path(\"binaries\", ...p);\n }\n\n private writeState() {\n fs.writeFileSync(this.filePath, JSON.stringify(this.state));\n }\n\n get instanceList(): string[] {\n if (!fs.existsSync(this.instanceDir())) {\n return [];\n }\n\n const list = fs.readdirSync(this.instanceDir());\n\n return list.filter((iName) => this.instanceExists(iName));\n }\n\n instanceExists(name: string): boolean {\n return fs.existsSync(this.instanceDir(name, \"instance.json\"));\n }\n\n public getInstanceInfo(name: string): instanceInfo {\n const instanceInfoFile = this.instanceDir(name, \"instance.json\");\n if (!fs.existsSync(instanceInfoFile)) {\n throw new Error(`platforma backend instance '${name}' does not exist or is corrupted`);\n }\n\n const jsonInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as jsonInstanceInfo;\n return {\n name: name,\n ...jsonInfo,\n };\n }\n\n public setInstanceInfo(instanceName: string, info: jsonInstanceInfo) {\n if (!fs.existsSync(this.instanceDir(instanceName))) {\n fs.mkdirSync(this.instanceDir(instanceName), { recursive: true });\n }\n\n const instanceInfoFile = this.instanceDir(instanceName, \"instance.json\");\n let oldInfo: object = {};\n\n if (fs.existsSync(instanceInfoFile)) {\n oldInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as object;\n }\n\n fs.writeFileSync(instanceInfoFile, JSON.stringify({ ...oldInfo, ...info }));\n }\n\n public isInstanceActive(instance: instanceInfo): boolean {\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n const i = util.getDockerComposeInfo(`pl-${instance.name}`);\n if (!i) {\n return false;\n }\n return i.Status.trim().startsWith(\"running\");\n }\n\n case \"process\": {\n if (!instance.pid) {\n return false;\n }\n return isValidPID(instance.pid);\n }\n\n default:\n util.assertNever(iType);\n throw new Error(\"cli logic error: unknown service type, cannot check its state\");\n }\n }\n\n get isActive(): boolean {\n for (const iName of this.instanceList) {\n const instance = this.getInstanceInfo(iName);\n if (this.isInstanceActive(instance)) {\n return true;\n }\n }\n\n return false;\n }\n\n public isValidPID(pid: number): boolean {\n return isValidPID(pid);\n }\n\n get currentInstance(): instanceInfo | undefined {\n const name = this.state.currentInstance;\n if (name && this.instanceExists(name)) {\n return this.getInstanceInfo(name);\n }\n\n return undefined;\n }\n\n get currentInstanceName(): string {\n return this.state.currentInstance;\n }\n\n set currentInstanceName(name: string) {\n this.state.currentInstance = name;\n this.writeState();\n }\n\n selectInstance(name: string) {\n if (!this.instanceExists(name)) {\n throw new Error(`instance '${name}' does not exist`);\n }\n this.state.currentInstance = name;\n this.writeState();\n }\n}\n\nfunction isValidPID(pid: number): boolean {\n const processName = util.getProcessName(pid);\n return (\n processName === \"platforma\" ||\n processName.endsWith(\"/platforma\") ||\n processName.endsWith(\"\\\\platforma\")\n );\n}\n\nexport default State.getStateInstance();\n"],"mappings":"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"}
package/dist/state.js CHANGED
@@ -3,7 +3,6 @@ import { readFileSync } from "./package.js";
3
3
  import os from "node:os";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
-
7
6
  //#region src/state.ts
8
7
  var State = class State {
9
8
  static instance;
@@ -108,7 +107,7 @@ function isValidPID(pid) {
108
107
  return processName === "platforma" || processName.endsWith("/platforma") || processName.endsWith("\\platforma");
109
108
  }
110
109
  var state_default = State.getStateInstance();
111
-
112
110
  //#endregion
113
111
  export { state_default as default };
112
+
114
113
  //# sourceMappingURL=state.js.map
package/dist/state.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","names":["pkg.readFileSync","util.getDockerComposeInfo","util.getProcessName"],"sources":["../src/state.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as util from \"./util\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport type * as types from \"./templates/types\";\n\nexport type runInfo = {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n};\n\nexport type instanceCommand = {\n async?: boolean;\n cmd: string;\n args: readonly string[];\n envs?: NodeJS.ProcessEnv;\n workdir?: string;\n runOpts: SpawnOptions;\n};\n\nexport type commmonInstanceInfo = {\n name: string;\n upCommands: instanceCommand[];\n downCommands: instanceCommand[];\n cleanupCommands: instanceCommand[];\n runInfo?: runInfo;\n};\n\nexport type dockerInstanceInfo = commmonInstanceInfo & {\n type: \"docker\";\n};\nexport type processInstanceInfo = commmonInstanceInfo & {\n type: \"process\";\n pid?: number;\n};\n\nexport type instanceInfo = dockerInstanceInfo | processInstanceInfo;\nexport type jsonInstanceInfo =\n | Omit<dockerInstanceInfo, \"name\" | \"isActive\">\n | Omit<processInstanceInfo, \"name\" | \"isActive\">;\n\nexport function reset() {\n fs.rmSync(State.getStateInstance().filePath);\n}\n\ntype state = {\n currentInstance: string;\n};\n\nclass State {\n private static instance: State;\n\n private state: state = {\n currentInstance: \"\",\n };\n\n public readonly filePath: string;\n private readonly dirPath: string;\n\n constructor(stateDir?: string) {\n stateDir = stateDir ?? path.resolve(os.homedir(), \".config\", \"pl-bootstrap\");\n\n const stateFile = path.join(stateDir, \"state.json\");\n\n this.dirPath = stateDir;\n this.filePath = stateFile;\n\n if (!fs.existsSync(stateDir)) {\n fs.mkdirSync(stateDir, { recursive: true });\n }\n\n if (fs.existsSync(stateFile)) {\n this.state = JSON.parse(pkg.readFileSync(stateFile).toString()) as state;\n }\n }\n\n public static getStateInstance(): State {\n if (!State.instance) {\n State.instance = new State();\n }\n\n return State.instance;\n }\n\n public path(...p: string[]): string {\n return path.join(this.dirPath, ...p);\n }\n\n public instanceDir(name?: string, ...p: string[]): string {\n if (name) {\n return this.path(\"data\", name, ...p);\n }\n\n return this.path(\"data\");\n }\n\n public binaries(...p: string[]): string {\n return this.path(\"binaries\", ...p);\n }\n\n private writeState() {\n fs.writeFileSync(this.filePath, JSON.stringify(this.state));\n }\n\n get instanceList(): string[] {\n if (!fs.existsSync(this.instanceDir())) {\n return [];\n }\n\n const list = fs.readdirSync(this.instanceDir());\n\n return list.filter((iName) => this.instanceExists(iName));\n }\n\n instanceExists(name: string): boolean {\n return fs.existsSync(this.instanceDir(name, \"instance.json\"));\n }\n\n public getInstanceInfo(name: string): instanceInfo {\n const instanceInfoFile = this.instanceDir(name, \"instance.json\");\n if (!fs.existsSync(instanceInfoFile)) {\n throw new Error(`platforma backend instance '${name}' does not exist or is corrupted`);\n }\n\n const jsonInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as jsonInstanceInfo;\n return {\n name: name,\n ...jsonInfo,\n };\n }\n\n public setInstanceInfo(instanceName: string, info: jsonInstanceInfo) {\n if (!fs.existsSync(this.instanceDir(instanceName))) {\n fs.mkdirSync(this.instanceDir(instanceName), { recursive: true });\n }\n\n const instanceInfoFile = this.instanceDir(instanceName, \"instance.json\");\n let oldInfo: object = {};\n\n if (fs.existsSync(instanceInfoFile)) {\n oldInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as object;\n }\n\n fs.writeFileSync(instanceInfoFile, JSON.stringify({ ...oldInfo, ...info }));\n }\n\n public isInstanceActive(instance: instanceInfo): boolean {\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n const i = util.getDockerComposeInfo(`pl-${instance.name}`);\n if (!i) {\n return false;\n }\n return i.Status.trim().startsWith(\"running\");\n }\n\n case \"process\": {\n if (!instance.pid) {\n return false;\n }\n return isValidPID(instance.pid);\n }\n\n default:\n util.assertNever(iType);\n throw new Error(\"cli logic error: unknown service type, cannot check its state\");\n }\n }\n\n get isActive(): boolean {\n for (const iName of this.instanceList) {\n const instance = this.getInstanceInfo(iName);\n if (this.isInstanceActive(instance)) {\n return true;\n }\n }\n\n return false;\n }\n\n public isValidPID(pid: number): boolean {\n return isValidPID(pid);\n }\n\n get currentInstance(): instanceInfo | undefined {\n const name = this.state.currentInstance;\n if (name && this.instanceExists(name)) {\n return this.getInstanceInfo(name);\n }\n\n return undefined;\n }\n\n get currentInstanceName(): string {\n return this.state.currentInstance;\n }\n\n set currentInstanceName(name: string) {\n this.state.currentInstance = name;\n this.writeState();\n }\n\n selectInstance(name: string) {\n if (!this.instanceExists(name)) {\n throw new Error(`instance '${name}' does not exist`);\n }\n this.state.currentInstance = name;\n this.writeState();\n }\n}\n\nfunction isValidPID(pid: number): boolean {\n const processName = util.getProcessName(pid);\n return (\n processName === \"platforma\" ||\n processName.endsWith(\"/platforma\") ||\n processName.endsWith(\"\\\\platforma\")\n );\n}\n\nexport default State.getStateInstance();\n"],"mappings":"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"}
1
+ {"version":3,"file":"state.js","names":["pkg.readFileSync","util.getDockerComposeInfo","util.getProcessName"],"sources":["../src/state.ts"],"sourcesContent":["import os from \"node:os\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as pkg from \"./package\";\nimport * as util from \"./util\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport type * as types from \"./templates/types\";\n\nexport type runInfo = {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n};\n\nexport type instanceCommand = {\n async?: boolean;\n cmd: string;\n args: readonly string[];\n envs?: NodeJS.ProcessEnv;\n workdir?: string;\n runOpts: SpawnOptions;\n};\n\nexport type commmonInstanceInfo = {\n name: string;\n upCommands: instanceCommand[];\n downCommands: instanceCommand[];\n cleanupCommands: instanceCommand[];\n runInfo?: runInfo;\n};\n\nexport type dockerInstanceInfo = commmonInstanceInfo & {\n type: \"docker\";\n};\nexport type processInstanceInfo = commmonInstanceInfo & {\n type: \"process\";\n pid?: number;\n};\n\nexport type instanceInfo = dockerInstanceInfo | processInstanceInfo;\nexport type jsonInstanceInfo =\n | Omit<dockerInstanceInfo, \"name\" | \"isActive\">\n | Omit<processInstanceInfo, \"name\" | \"isActive\">;\n\nexport function reset() {\n fs.rmSync(State.getStateInstance().filePath);\n}\n\ntype state = {\n currentInstance: string;\n};\n\nclass State {\n private static instance: State;\n\n private state: state = {\n currentInstance: \"\",\n };\n\n public readonly filePath: string;\n private readonly dirPath: string;\n\n constructor(stateDir?: string) {\n stateDir = stateDir ?? path.resolve(os.homedir(), \".config\", \"pl-bootstrap\");\n\n const stateFile = path.join(stateDir, \"state.json\");\n\n this.dirPath = stateDir;\n this.filePath = stateFile;\n\n if (!fs.existsSync(stateDir)) {\n fs.mkdirSync(stateDir, { recursive: true });\n }\n\n if (fs.existsSync(stateFile)) {\n this.state = JSON.parse(pkg.readFileSync(stateFile).toString()) as state;\n }\n }\n\n public static getStateInstance(): State {\n if (!State.instance) {\n State.instance = new State();\n }\n\n return State.instance;\n }\n\n public path(...p: string[]): string {\n return path.join(this.dirPath, ...p);\n }\n\n public instanceDir(name?: string, ...p: string[]): string {\n if (name) {\n return this.path(\"data\", name, ...p);\n }\n\n return this.path(\"data\");\n }\n\n public binaries(...p: string[]): string {\n return this.path(\"binaries\", ...p);\n }\n\n private writeState() {\n fs.writeFileSync(this.filePath, JSON.stringify(this.state));\n }\n\n get instanceList(): string[] {\n if (!fs.existsSync(this.instanceDir())) {\n return [];\n }\n\n const list = fs.readdirSync(this.instanceDir());\n\n return list.filter((iName) => this.instanceExists(iName));\n }\n\n instanceExists(name: string): boolean {\n return fs.existsSync(this.instanceDir(name, \"instance.json\"));\n }\n\n public getInstanceInfo(name: string): instanceInfo {\n const instanceInfoFile = this.instanceDir(name, \"instance.json\");\n if (!fs.existsSync(instanceInfoFile)) {\n throw new Error(`platforma backend instance '${name}' does not exist or is corrupted`);\n }\n\n const jsonInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as jsonInstanceInfo;\n return {\n name: name,\n ...jsonInfo,\n };\n }\n\n public setInstanceInfo(instanceName: string, info: jsonInstanceInfo) {\n if (!fs.existsSync(this.instanceDir(instanceName))) {\n fs.mkdirSync(this.instanceDir(instanceName), { recursive: true });\n }\n\n const instanceInfoFile = this.instanceDir(instanceName, \"instance.json\");\n let oldInfo: object = {};\n\n if (fs.existsSync(instanceInfoFile)) {\n oldInfo = JSON.parse(pkg.readFileSync(instanceInfoFile).toString()) as object;\n }\n\n fs.writeFileSync(instanceInfoFile, JSON.stringify({ ...oldInfo, ...info }));\n }\n\n public isInstanceActive(instance: instanceInfo): boolean {\n const iType = instance.type;\n switch (iType) {\n case \"docker\": {\n const i = util.getDockerComposeInfo(`pl-${instance.name}`);\n if (!i) {\n return false;\n }\n return i.Status.trim().startsWith(\"running\");\n }\n\n case \"process\": {\n if (!instance.pid) {\n return false;\n }\n return isValidPID(instance.pid);\n }\n\n default:\n util.assertNever(iType);\n throw new Error(\"cli logic error: unknown service type, cannot check its state\");\n }\n }\n\n get isActive(): boolean {\n for (const iName of this.instanceList) {\n const instance = this.getInstanceInfo(iName);\n if (this.isInstanceActive(instance)) {\n return true;\n }\n }\n\n return false;\n }\n\n public isValidPID(pid: number): boolean {\n return isValidPID(pid);\n }\n\n get currentInstance(): instanceInfo | undefined {\n const name = this.state.currentInstance;\n if (name && this.instanceExists(name)) {\n return this.getInstanceInfo(name);\n }\n\n return undefined;\n }\n\n get currentInstanceName(): string {\n return this.state.currentInstance;\n }\n\n set currentInstanceName(name: string) {\n this.state.currentInstance = name;\n this.writeState();\n }\n\n selectInstance(name: string) {\n if (!this.instanceExists(name)) {\n throw new Error(`instance '${name}' does not exist`);\n }\n this.state.currentInstance = name;\n this.writeState();\n }\n}\n\nfunction isValidPID(pid: number): boolean {\n const processName = util.getProcessName(pid);\n return (\n processName === \"platforma\" ||\n processName.endsWith(\"/platforma\") ||\n processName.endsWith(\"\\\\platforma\")\n );\n}\n\nexport default State.getStateInstance();\n"],"mappings":";;;;;;AAyDA,IAAM,QAAN,MAAM,MAAM;CACV,OAAe;CAEf,QAAuB,EACrB,iBAAiB,IAClB;CAED;CACA;CAEA,YAAY,UAAmB;AAC7B,aAAW,YAAY,KAAK,QAAQ,GAAG,SAAS,EAAE,WAAW,eAAe;EAE5E,MAAM,YAAY,KAAK,KAAK,UAAU,aAAa;AAEnD,OAAK,UAAU;AACf,OAAK,WAAW;AAEhB,MAAI,CAAC,GAAG,WAAW,SAAS,CAC1B,IAAG,UAAU,UAAU,EAAE,WAAW,MAAM,CAAC;AAG7C,MAAI,GAAG,WAAW,UAAU,CAC1B,MAAK,QAAQ,KAAK,MAAMA,aAAiB,UAAU,CAAC,UAAU,CAAC;;CAInE,OAAc,mBAA0B;AACtC,MAAI,CAAC,MAAM,SACT,OAAM,WAAW,IAAI,OAAO;AAG9B,SAAO,MAAM;;CAGf,KAAY,GAAG,GAAqB;AAClC,SAAO,KAAK,KAAK,KAAK,SAAS,GAAG,EAAE;;CAGtC,YAAmB,MAAe,GAAG,GAAqB;AACxD,MAAI,KACF,QAAO,KAAK,KAAK,QAAQ,MAAM,GAAG,EAAE;AAGtC,SAAO,KAAK,KAAK,OAAO;;CAG1B,SAAgB,GAAG,GAAqB;AACtC,SAAO,KAAK,KAAK,YAAY,GAAG,EAAE;;CAGpC,aAAqB;AACnB,KAAG,cAAc,KAAK,UAAU,KAAK,UAAU,KAAK,MAAM,CAAC;;CAG7D,IAAI,eAAyB;AAC3B,MAAI,CAAC,GAAG,WAAW,KAAK,aAAa,CAAC,CACpC,QAAO,EAAE;AAKX,SAFa,GAAG,YAAY,KAAK,aAAa,CAAC,CAEnC,QAAQ,UAAU,KAAK,eAAe,MAAM,CAAC;;CAG3D,eAAe,MAAuB;AACpC,SAAO,GAAG,WAAW,KAAK,YAAY,MAAM,gBAAgB,CAAC;;CAG/D,gBAAuB,MAA4B;EACjD,MAAM,mBAAmB,KAAK,YAAY,MAAM,gBAAgB;AAChE,MAAI,CAAC,GAAG,WAAW,iBAAiB,CAClC,OAAM,IAAI,MAAM,+BAA+B,KAAK,kCAAkC;AAIxF,SAAO;GACC;GACN,GAHe,KAAK,MAAMA,aAAiB,iBAAiB,CAAC,UAAU,CAAC;GAIzE;;CAGH,gBAAuB,cAAsB,MAAwB;AACnE,MAAI,CAAC,GAAG,WAAW,KAAK,YAAY,aAAa,CAAC,CAChD,IAAG,UAAU,KAAK,YAAY,aAAa,EAAE,EAAE,WAAW,MAAM,CAAC;EAGnE,MAAM,mBAAmB,KAAK,YAAY,cAAc,gBAAgB;EACxE,IAAI,UAAkB,EAAE;AAExB,MAAI,GAAG,WAAW,iBAAiB,CACjC,WAAU,KAAK,MAAMA,aAAiB,iBAAiB,CAAC,UAAU,CAAC;AAGrE,KAAG,cAAc,kBAAkB,KAAK,UAAU;GAAE,GAAG;GAAS,GAAG;GAAM,CAAC,CAAC;;CAG7E,iBAAwB,UAAiC;EACvD,MAAM,QAAQ,SAAS;AACvB,UAAQ,OAAR;GACE,KAAK,UAAU;IACb,MAAM,IAAIC,qBAA0B,MAAM,SAAS,OAAO;AAC1D,QAAI,CAAC,EACH,QAAO;AAET,WAAO,EAAE,OAAO,MAAM,CAAC,WAAW,UAAU;;GAG9C,KAAK;AACH,QAAI,CAAC,SAAS,IACZ,QAAO;AAET,WAAO,WAAW,SAAS,IAAI;GAGjC;AACE,gBAAiB,MAAM;AACvB,UAAM,IAAI,MAAM,gEAAgE;;;CAItF,IAAI,WAAoB;AACtB,OAAK,MAAM,SAAS,KAAK,cAAc;GACrC,MAAM,WAAW,KAAK,gBAAgB,MAAM;AAC5C,OAAI,KAAK,iBAAiB,SAAS,CACjC,QAAO;;AAIX,SAAO;;CAGT,WAAkB,KAAsB;AACtC,SAAO,WAAW,IAAI;;CAGxB,IAAI,kBAA4C;EAC9C,MAAM,OAAO,KAAK,MAAM;AACxB,MAAI,QAAQ,KAAK,eAAe,KAAK,CACnC,QAAO,KAAK,gBAAgB,KAAK;;CAMrC,IAAI,sBAA8B;AAChC,SAAO,KAAK,MAAM;;CAGpB,IAAI,oBAAoB,MAAc;AACpC,OAAK,MAAM,kBAAkB;AAC7B,OAAK,YAAY;;CAGnB,eAAe,MAAc;AAC3B,MAAI,CAAC,KAAK,eAAe,KAAK,CAC5B,OAAM,IAAI,MAAM,aAAa,KAAK,kBAAkB;AAEtD,OAAK,MAAM,kBAAkB;AAC7B,OAAK,YAAY;;;AAIrB,SAAS,WAAW,KAAsB;CACxC,MAAM,cAAcC,eAAoB,IAAI;AAC5C,QACE,gBAAgB,eAChB,YAAY,SAAS,aAAa,IAClC,YAAY,SAAS,cAAc;;AAIvC,IAAA,gBAAe,MAAM,kBAAkB"}
@@ -1,9 +1,8 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_runtime.__toESM(node_fs);
4
4
  let yaml = require("yaml");
5
5
  yaml = require_runtime.__toESM(yaml);
6
-
7
6
  //#region src/templates/compose.ts
8
7
  function render(composeSource, composeDest, deployName, services, options) {
9
8
  const composeSrcData = node_fs.default.readFileSync(composeSource, { encoding: "utf-8" });
@@ -37,7 +36,7 @@ function render(composeSource, composeDest, deployName, services, options) {
37
36
  if (options?.dropVolumes) delete compose.volumes;
38
37
  node_fs.default.writeFileSync(composeDest, yaml.default.stringify(compose));
39
38
  }
40
-
41
39
  //#endregion
42
40
  exports.render = render;
41
+
43
42
  //# sourceMappingURL=compose.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose.cjs","names":["fs","YAML"],"sources":["../../src/templates/compose.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport YAML from \"yaml\";\n\nexport type VolumeMountOption = {\n hostPath: string;\n containerPath: string;\n};\n\nexport type ServiceOptions = {\n platform?: string;\n envs?: NodeJS.ProcessEnv;\n mounts?: VolumeMountOption[];\n commands?: string[];\n};\n\ntype ComposeYamlSpec = {\n name: string;\n services: Record<\n string,\n {\n platform?: string;\n environment?: string[];\n volumes?: string[];\n command?: string[];\n }\n >;\n\n volumes?: unknown;\n};\n\nexport function render(\n composeSource: string,\n composeDest: string,\n deployName: string,\n services?: Map<string, ServiceOptions>,\n options?: {\n dropVolumes: boolean;\n },\n) {\n const composeSrcData = fs.readFileSync(composeSource, { encoding: \"utf-8\" });\n const compose = YAML.parse(composeSrcData.toString()) as ComposeYamlSpec;\n\n if (!compose.services) {\n throw new Error(\n `file '${composeSource}' seems to be not a docker-compose file or has unsupported version`,\n );\n }\n\n if (services) {\n for (const svcName of Object.keys(compose.services)) {\n if (!services.has(svcName)) {\n delete compose.services[svcName];\n }\n }\n }\n\n compose.name = deployName;\n\n for (const [svcName, options] of services?.entries() ?? []) {\n const svcSpec = compose.services[svcName];\n\n if (!svcSpec) {\n throw new Error(\n `docker compose '${composeSource}' has no declaration of service '${svcName}'`,\n );\n }\n\n if (options.platform) {\n svcSpec.platform = options.platform;\n }\n\n if (options.envs) {\n if (!svcSpec.environment) {\n svcSpec.environment = [];\n }\n for (let envSpecI = 0; envSpecI < (svcSpec?.environment.length ?? 0); ) {\n const envSpec: string = svcSpec.environment[envSpecI];\n const envName = envSpec.split(\"=\")[0];\n if (options.envs[envName]) {\n // Drop env expression from list as we will replace it later by our custom configuration\n const last = svcSpec.environment.pop();\n\n // Do not insert back last element we just removed.\n if (last && svcSpec.environment.length !== envSpecI) {\n svcSpec.environment[envSpecI] = last;\n }\n } else {\n envSpecI++;\n }\n }\n\n for (const [envName, envValue] of Object.entries(options.envs)) {\n svcSpec.environment.push(`${envName}=${envValue}`);\n }\n }\n\n if (options.mounts) {\n if (!svcSpec.volumes) {\n svcSpec.volumes = [];\n }\n for (const mount of options.mounts) {\n svcSpec.volumes.push(`${mount.hostPath}:${mount.containerPath}`);\n }\n }\n\n if (options.commands) {\n svcSpec.command = options.commands;\n }\n }\n\n if (options?.dropVolumes) {\n delete compose.volumes;\n }\n\n fs.writeFileSync(composeDest, YAML.stringify(compose));\n}\n"],"mappings":";;;;;;;AA8BA,SAAgB,OACd,eACA,aACA,YACA,UACA,SAGA;CACA,MAAM,iBAAiBA,gBAAG,aAAa,eAAe,EAAE,UAAU,SAAS,CAAC;CAC5E,MAAM,UAAUC,aAAK,MAAM,eAAe,UAAU,CAAC;AAErD,KAAI,CAAC,QAAQ,SACX,OAAM,IAAI,MACR,SAAS,cAAc,oEACxB;AAGH,KAAI,UACF;OAAK,MAAM,WAAW,OAAO,KAAK,QAAQ,SAAS,CACjD,KAAI,CAAC,SAAS,IAAI,QAAQ,CACxB,QAAO,QAAQ,SAAS;;AAK9B,SAAQ,OAAO;AAEf,MAAK,MAAM,CAAC,SAAS,YAAY,UAAU,SAAS,IAAI,EAAE,EAAE;EAC1D,MAAM,UAAU,QAAQ,SAAS;AAEjC,MAAI,CAAC,QACH,OAAM,IAAI,MACR,mBAAmB,cAAc,mCAAmC,QAAQ,GAC7E;AAGH,MAAI,QAAQ,SACV,SAAQ,WAAW,QAAQ;AAG7B,MAAI,QAAQ,MAAM;AAChB,OAAI,CAAC,QAAQ,YACX,SAAQ,cAAc,EAAE;AAE1B,QAAK,IAAI,WAAW,GAAG,YAAY,SAAS,YAAY,UAAU,KAAM;IAEtE,MAAM,UADkB,QAAQ,YAAY,UACpB,MAAM,IAAI,CAAC;AACnC,QAAI,QAAQ,KAAK,UAAU;KAEzB,MAAM,OAAO,QAAQ,YAAY,KAAK;AAGtC,SAAI,QAAQ,QAAQ,YAAY,WAAW,SACzC,SAAQ,YAAY,YAAY;UAGlC;;AAIJ,QAAK,MAAM,CAAC,SAAS,aAAa,OAAO,QAAQ,QAAQ,KAAK,CAC5D,SAAQ,YAAY,KAAK,GAAG,QAAQ,GAAG,WAAW;;AAItD,MAAI,QAAQ,QAAQ;AAClB,OAAI,CAAC,QAAQ,QACX,SAAQ,UAAU,EAAE;AAEtB,QAAK,MAAM,SAAS,QAAQ,OAC1B,SAAQ,QAAQ,KAAK,GAAG,MAAM,SAAS,GAAG,MAAM,gBAAgB;;AAIpE,MAAI,QAAQ,SACV,SAAQ,UAAU,QAAQ;;AAI9B,KAAI,SAAS,YACX,QAAO,QAAQ;AAGjB,iBAAG,cAAc,aAAaA,aAAK,UAAU,QAAQ,CAAC"}
1
+ {"version":3,"file":"compose.cjs","names":["fs","YAML"],"sources":["../../src/templates/compose.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport YAML from \"yaml\";\n\nexport type VolumeMountOption = {\n hostPath: string;\n containerPath: string;\n};\n\nexport type ServiceOptions = {\n platform?: string;\n envs?: NodeJS.ProcessEnv;\n mounts?: VolumeMountOption[];\n commands?: string[];\n};\n\ntype ComposeYamlSpec = {\n name: string;\n services: Record<\n string,\n {\n platform?: string;\n environment?: string[];\n volumes?: string[];\n command?: string[];\n }\n >;\n\n volumes?: unknown;\n};\n\nexport function render(\n composeSource: string,\n composeDest: string,\n deployName: string,\n services?: Map<string, ServiceOptions>,\n options?: {\n dropVolumes: boolean;\n },\n) {\n const composeSrcData = fs.readFileSync(composeSource, { encoding: \"utf-8\" });\n const compose = YAML.parse(composeSrcData.toString()) as ComposeYamlSpec;\n\n if (!compose.services) {\n throw new Error(\n `file '${composeSource}' seems to be not a docker-compose file or has unsupported version`,\n );\n }\n\n if (services) {\n for (const svcName of Object.keys(compose.services)) {\n if (!services.has(svcName)) {\n delete compose.services[svcName];\n }\n }\n }\n\n compose.name = deployName;\n\n for (const [svcName, options] of services?.entries() ?? []) {\n const svcSpec = compose.services[svcName];\n\n if (!svcSpec) {\n throw new Error(\n `docker compose '${composeSource}' has no declaration of service '${svcName}'`,\n );\n }\n\n if (options.platform) {\n svcSpec.platform = options.platform;\n }\n\n if (options.envs) {\n if (!svcSpec.environment) {\n svcSpec.environment = [];\n }\n for (let envSpecI = 0; envSpecI < (svcSpec?.environment.length ?? 0); ) {\n const envSpec: string = svcSpec.environment[envSpecI];\n const envName = envSpec.split(\"=\")[0];\n if (options.envs[envName]) {\n // Drop env expression from list as we will replace it later by our custom configuration\n const last = svcSpec.environment.pop();\n\n // Do not insert back last element we just removed.\n if (last && svcSpec.environment.length !== envSpecI) {\n svcSpec.environment[envSpecI] = last;\n }\n } else {\n envSpecI++;\n }\n }\n\n for (const [envName, envValue] of Object.entries(options.envs)) {\n svcSpec.environment.push(`${envName}=${envValue}`);\n }\n }\n\n if (options.mounts) {\n if (!svcSpec.volumes) {\n svcSpec.volumes = [];\n }\n for (const mount of options.mounts) {\n svcSpec.volumes.push(`${mount.hostPath}:${mount.containerPath}`);\n }\n }\n\n if (options.commands) {\n svcSpec.command = options.commands;\n }\n }\n\n if (options?.dropVolumes) {\n delete compose.volumes;\n }\n\n fs.writeFileSync(composeDest, YAML.stringify(compose));\n}\n"],"mappings":";;;;;;AA8BA,SAAgB,OACd,eACA,aACA,YACA,UACA,SAGA;CACA,MAAM,iBAAiBA,QAAAA,QAAG,aAAa,eAAe,EAAE,UAAU,SAAS,CAAC;CAC5E,MAAM,UAAUC,KAAAA,QAAK,MAAM,eAAe,UAAU,CAAC;AAErD,KAAI,CAAC,QAAQ,SACX,OAAM,IAAI,MACR,SAAS,cAAc,oEACxB;AAGH,KAAI;OACG,MAAM,WAAW,OAAO,KAAK,QAAQ,SAAS,CACjD,KAAI,CAAC,SAAS,IAAI,QAAQ,CACxB,QAAO,QAAQ,SAAS;;AAK9B,SAAQ,OAAO;AAEf,MAAK,MAAM,CAAC,SAAS,YAAY,UAAU,SAAS,IAAI,EAAE,EAAE;EAC1D,MAAM,UAAU,QAAQ,SAAS;AAEjC,MAAI,CAAC,QACH,OAAM,IAAI,MACR,mBAAmB,cAAc,mCAAmC,QAAQ,GAC7E;AAGH,MAAI,QAAQ,SACV,SAAQ,WAAW,QAAQ;AAG7B,MAAI,QAAQ,MAAM;AAChB,OAAI,CAAC,QAAQ,YACX,SAAQ,cAAc,EAAE;AAE1B,QAAK,IAAI,WAAW,GAAG,YAAY,SAAS,YAAY,UAAU,KAAM;IAEtE,MAAM,UADkB,QAAQ,YAAY,UACpB,MAAM,IAAI,CAAC;AACnC,QAAI,QAAQ,KAAK,UAAU;KAEzB,MAAM,OAAO,QAAQ,YAAY,KAAK;AAGtC,SAAI,QAAQ,QAAQ,YAAY,WAAW,SACzC,SAAQ,YAAY,YAAY;UAGlC;;AAIJ,QAAK,MAAM,CAAC,SAAS,aAAa,OAAO,QAAQ,QAAQ,KAAK,CAC5D,SAAQ,YAAY,KAAK,GAAG,QAAQ,GAAG,WAAW;;AAItD,MAAI,QAAQ,QAAQ;AAClB,OAAI,CAAC,QAAQ,QACX,SAAQ,UAAU,EAAE;AAEtB,QAAK,MAAM,SAAS,QAAQ,OAC1B,SAAQ,QAAQ,KAAK,GAAG,MAAM,SAAS,GAAG,MAAM,gBAAgB;;AAIpE,MAAI,QAAQ,SACV,SAAQ,UAAU,QAAQ;;AAI9B,KAAI,SAAS,YACX,QAAO,QAAQ;AAGjB,SAAA,QAAG,cAAc,aAAaA,KAAAA,QAAK,UAAU,QAAQ,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import fs from "node:fs";
2
2
  import YAML from "yaml";
3
-
4
3
  //#region src/templates/compose.ts
5
4
  function render(composeSource, composeDest, deployName, services, options) {
6
5
  const composeSrcData = fs.readFileSync(composeSource, { encoding: "utf-8" });
@@ -34,7 +33,7 @@ function render(composeSource, composeDest, deployName, services, options) {
34
33
  if (options?.dropVolumes) delete compose.volumes;
35
34
  fs.writeFileSync(composeDest, YAML.stringify(compose));
36
35
  }
37
-
38
36
  //#endregion
39
37
  export { render };
38
+
40
39
  //# sourceMappingURL=compose.js.map