@platforma-sdk/bootstrap 5.2.41 → 5.2.43

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 (168) hide show
  1. package/README.md +10 -2
  2. package/assets/compose-backend.yaml +2 -2
  3. package/bin/run.js +3 -3
  4. package/dist/block.cjs +36 -31
  5. package/dist/block.cjs.map +1 -1
  6. package/dist/block.d.ts +2 -2
  7. package/dist/block.d.ts.map +1 -1
  8. package/dist/block.js +36 -31
  9. package/dist/block.js.map +1 -1
  10. package/dist/cmd-opts.cjs +74 -74
  11. package/dist/cmd-opts.cjs.map +1 -1
  12. package/dist/cmd-opts.d.ts +23 -23
  13. package/dist/cmd-opts.d.ts.map +1 -1
  14. package/dist/cmd-opts.js +74 -74
  15. package/dist/cmd-opts.js.map +1 -1
  16. package/dist/commands/create-block.cjs +3 -3
  17. package/dist/commands/create-block.cjs.map +1 -1
  18. package/dist/commands/create-block.d.ts +2 -2
  19. package/dist/commands/create-block.d.ts.map +1 -1
  20. package/dist/commands/create-block.js +3 -3
  21. package/dist/commands/create-block.js.map +1 -1
  22. package/dist/commands/reset.cjs +3 -3
  23. package/dist/commands/reset.cjs.map +1 -1
  24. package/dist/commands/reset.d.ts +2 -2
  25. package/dist/commands/reset.d.ts.map +1 -1
  26. package/dist/commands/reset.js +3 -3
  27. package/dist/commands/reset.js.map +1 -1
  28. package/dist/commands/start/docker/s3.cjs +18 -18
  29. package/dist/commands/start/docker/s3.cjs.map +1 -1
  30. package/dist/commands/start/docker/s3.d.ts +15 -15
  31. package/dist/commands/start/docker/s3.d.ts.map +1 -1
  32. package/dist/commands/start/docker/s3.js +18 -18
  33. package/dist/commands/start/docker/s3.js.map +1 -1
  34. package/dist/commands/start/docker.cjs +18 -18
  35. package/dist/commands/start/docker.cjs.map +1 -1
  36. package/dist/commands/start/docker.d.ts +16 -16
  37. package/dist/commands/start/docker.d.ts.map +1 -1
  38. package/dist/commands/start/docker.js +18 -18
  39. package/dist/commands/start/docker.js.map +1 -1
  40. package/dist/commands/start/local/s3.cjs +36 -34
  41. package/dist/commands/start/local/s3.cjs.map +1 -1
  42. package/dist/commands/start/local/s3.d.ts +18 -18
  43. package/dist/commands/start/local/s3.d.ts.map +1 -1
  44. package/dist/commands/start/local/s3.js +36 -34
  45. package/dist/commands/start/local/s3.js.map +1 -1
  46. package/dist/commands/start/local.cjs +32 -30
  47. package/dist/commands/start/local.cjs.map +1 -1
  48. package/dist/commands/start/local.d.ts +16 -16
  49. package/dist/commands/start/local.d.ts.map +1 -1
  50. package/dist/commands/start/local.js +32 -30
  51. package/dist/commands/start/local.js.map +1 -1
  52. package/dist/commands/start.cjs +3 -3
  53. package/dist/commands/start.cjs.map +1 -1
  54. package/dist/commands/start.d.ts +2 -2
  55. package/dist/commands/start.js +3 -3
  56. package/dist/commands/start.js.map +1 -1
  57. package/dist/commands/stop.cjs +4 -4
  58. package/dist/commands/stop.cjs.map +1 -1
  59. package/dist/commands/stop.d.ts +2 -2
  60. package/dist/commands/stop.js +4 -4
  61. package/dist/commands/stop.js.map +1 -1
  62. package/dist/commands/svc/create/arg-parser.cjs +13 -13
  63. package/dist/commands/svc/create/arg-parser.cjs.map +1 -1
  64. package/dist/commands/svc/create/arg-parser.d.ts +1 -1
  65. package/dist/commands/svc/create/arg-parser.js +13 -13
  66. package/dist/commands/svc/create/arg-parser.js.map +1 -1
  67. package/dist/commands/svc/create/docker/s3.cjs +27 -27
  68. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  69. package/dist/commands/svc/create/docker/s3.d.ts +15 -15
  70. package/dist/commands/svc/create/docker/s3.d.ts.map +1 -1
  71. package/dist/commands/svc/create/docker/s3.js +27 -27
  72. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  73. package/dist/commands/svc/create/docker.cjs +35 -35
  74. package/dist/commands/svc/create/docker.cjs.map +1 -1
  75. package/dist/commands/svc/create/docker.d.ts +16 -16
  76. package/dist/commands/svc/create/docker.js +35 -35
  77. package/dist/commands/svc/create/docker.js.map +1 -1
  78. package/dist/commands/svc/create/local/s3.cjs +37 -35
  79. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  80. package/dist/commands/svc/create/local/s3.d.ts +18 -18
  81. package/dist/commands/svc/create/local/s3.d.ts.map +1 -1
  82. package/dist/commands/svc/create/local/s3.js +37 -35
  83. package/dist/commands/svc/create/local/s3.js.map +1 -1
  84. package/dist/commands/svc/create/local.cjs +35 -35
  85. package/dist/commands/svc/create/local.cjs.map +1 -1
  86. package/dist/commands/svc/create/local.d.ts +16 -16
  87. package/dist/commands/svc/create/local.d.ts.map +1 -1
  88. package/dist/commands/svc/create/local.js +35 -35
  89. package/dist/commands/svc/create/local.js.map +1 -1
  90. package/dist/commands/svc/delete.cjs +4 -4
  91. package/dist/commands/svc/delete.cjs.map +1 -1
  92. package/dist/commands/svc/delete.d.ts +2 -2
  93. package/dist/commands/svc/delete.js +4 -4
  94. package/dist/commands/svc/delete.js.map +1 -1
  95. package/dist/commands/svc/down.cjs +3 -3
  96. package/dist/commands/svc/down.cjs.map +1 -1
  97. package/dist/commands/svc/down.d.ts +2 -2
  98. package/dist/commands/svc/down.js +3 -3
  99. package/dist/commands/svc/down.js.map +1 -1
  100. package/dist/commands/svc/list.cjs +5 -5
  101. package/dist/commands/svc/list.cjs.map +1 -1
  102. package/dist/commands/svc/list.d.ts +1 -1
  103. package/dist/commands/svc/list.d.ts.map +1 -1
  104. package/dist/commands/svc/list.js +5 -5
  105. package/dist/commands/svc/list.js.map +1 -1
  106. package/dist/commands/svc/up.cjs +5 -5
  107. package/dist/commands/svc/up.cjs.map +1 -1
  108. package/dist/commands/svc/up.d.ts +2 -2
  109. package/dist/commands/svc/up.d.ts.map +1 -1
  110. package/dist/commands/svc/up.js +5 -5
  111. package/dist/commands/svc/up.js.map +1 -1
  112. package/dist/core.cjs +261 -231
  113. package/dist/core.cjs.map +1 -1
  114. package/dist/core.d.ts +10 -10
  115. package/dist/core.d.ts.map +1 -1
  116. package/dist/core.js +261 -231
  117. package/dist/core.js.map +1 -1
  118. package/dist/index.cjs +16 -16
  119. package/dist/index.cjs.map +1 -1
  120. package/dist/index.d.ts +29 -29
  121. package/dist/index.js +16 -16
  122. package/dist/index.js.map +1 -1
  123. package/dist/package.cjs +2 -2
  124. package/dist/package.cjs.map +1 -1
  125. package/dist/package.js +2 -2
  126. package/dist/package.js.map +1 -1
  127. package/dist/platforma.cjs +24 -24
  128. package/dist/platforma.cjs.map +1 -1
  129. package/dist/platforma.d.ts +1 -1
  130. package/dist/platforma.d.ts.map +1 -1
  131. package/dist/platforma.js +24 -24
  132. package/dist/platforma.js.map +1 -1
  133. package/dist/run.cjs +6 -6
  134. package/dist/run.cjs.map +1 -1
  135. package/dist/run.d.ts +3 -3
  136. package/dist/run.d.ts.map +1 -1
  137. package/dist/run.js +6 -6
  138. package/dist/run.js.map +1 -1
  139. package/dist/state.cjs +16 -14
  140. package/dist/state.cjs.map +1 -1
  141. package/dist/state.d.ts +5 -5
  142. package/dist/state.d.ts.map +1 -1
  143. package/dist/state.js +16 -14
  144. package/dist/state.js.map +1 -1
  145. package/dist/templates/compose.cjs +2 -2
  146. package/dist/templates/compose.cjs.map +1 -1
  147. package/dist/templates/compose.d.ts.map +1 -1
  148. package/dist/templates/compose.js +2 -2
  149. package/dist/templates/compose.js.map +1 -1
  150. package/dist/templates/pl-config.cjs +49 -49
  151. package/dist/templates/pl-config.cjs.map +1 -1
  152. package/dist/templates/pl-config.d.ts +2 -2
  153. package/dist/templates/pl-config.d.ts.map +1 -1
  154. package/dist/templates/pl-config.js +49 -49
  155. package/dist/templates/pl-config.js.map +1 -1
  156. package/dist/templates/types.cjs +12 -12
  157. package/dist/templates/types.cjs.map +1 -1
  158. package/dist/templates/types.d.ts +6 -6
  159. package/dist/templates/types.d.ts.map +1 -1
  160. package/dist/templates/types.js +12 -12
  161. package/dist/templates/types.js.map +1 -1
  162. package/dist/util.cjs +19 -17
  163. package/dist/util.cjs.map +1 -1
  164. package/dist/util.d.ts +2 -2
  165. package/dist/util.d.ts.map +1 -1
  166. package/dist/util.js +19 -17
  167. package/dist/util.js.map +1 -1
  168. package/package.json +23 -22
@@ -27,32 +27,32 @@ function _interopNamespaceDefault(e) {
27
27
 
28
28
  var tar__namespace = /*#__PURE__*/_interopNamespaceDefault(tar);
29
29
 
30
- const OSes = ['linux', 'macos', 'windows'];
30
+ const OSes = ["linux", "macos", "windows"];
31
31
  function archiveOS(osName) {
32
32
  const platform = os.platform();
33
33
  switch (platform) {
34
- case 'darwin':
35
- return 'macos';
36
- case 'linux':
37
- return 'linux';
38
- case 'win32':
39
- return 'windows';
34
+ case "darwin":
35
+ return "macos";
36
+ case "linux":
37
+ return "linux";
38
+ case "win32":
39
+ return "windows";
40
40
  default:
41
- throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: `
42
- + JSON.stringify(OSes));
41
+ throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +
42
+ JSON.stringify(OSes));
43
43
  }
44
44
  }
45
- const Arches = ['amd64', 'arm64'];
45
+ const Arches = ["amd64", "arm64"];
46
46
  function archiveArch(archName) {
47
47
  const arch = os.arch();
48
48
  switch (arch) {
49
- case 'arm64':
50
- return 'arm64';
51
- case 'x64':
52
- return 'amd64';
49
+ case "arm64":
50
+ return "arm64";
51
+ case "x64":
52
+ return "amd64";
53
53
  default:
54
- throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `
55
- + JSON.stringify(Arches));
54
+ throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +
55
+ JSON.stringify(Arches));
56
56
  }
57
57
  }
58
58
  function downloadArchive(logger, options) {
@@ -69,9 +69,9 @@ function downloadArchive(logger, options) {
69
69
  logger.info(`Downloading Platforma Backend archive:\n URL: ${downloadURL}\n Save to: ${archiveFilePath}`);
70
70
  const request = https.get(downloadURL);
71
71
  return new Promise((resolve, reject) => {
72
- request.on('response', (response) => {
72
+ request.on("response", (response) => {
73
73
  if (!response.statusCode) {
74
- const err = new Error('failed to download archive: no HTTP status code in response from server');
74
+ const err = new Error("failed to download archive: no HTTP status code in response from server");
75
75
  request.destroy();
76
76
  reject(err);
77
77
  return;
@@ -82,24 +82,24 @@ function downloadArchive(logger, options) {
82
82
  reject(err);
83
83
  return;
84
84
  }
85
- const totalBytes = parseInt(response.headers['content-length'] || '0', 10);
85
+ const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
86
86
  let downloadedBytes = 0;
87
87
  const archive = fs.createWriteStream(archiveFilePath);
88
88
  response.pipe(archive);
89
- response.on('data', (chunk) => {
89
+ response.on("data", (chunk) => {
90
90
  downloadedBytes += chunk.length;
91
91
  const progress = (downloadedBytes / totalBytes) * 100;
92
92
  if (showProgress) {
93
93
  process.stdout.write(` downloading: ${progress.toFixed(2)}%\r`);
94
94
  }
95
95
  });
96
- response.on('error', (err) => {
96
+ response.on("error", (err) => {
97
97
  fs.unlinkSync(archiveFilePath);
98
98
  logger.error(`Failed to download Platforma Binary: ${err.message}`);
99
99
  request.destroy();
100
100
  reject(err);
101
101
  });
102
- archive.on('finish', () => {
102
+ archive.on("finish", () => {
103
103
  archive.close();
104
104
  logger.info(` ... download done.`);
105
105
  request.destroy();
@@ -109,7 +109,7 @@ function downloadArchive(logger, options) {
109
109
  });
110
110
  }
111
111
  function extractArchive(logger, options) {
112
- logger.debug('extracting archive...');
112
+ logger.debug("extracting archive...");
113
113
  const version = options?.version ?? plDeployments.getDefaultPlVersion();
114
114
  logger.debug(` version: '${version}'`);
115
115
  const archiveName = `${binaryDirName({ version })}.tgz`;
@@ -151,7 +151,7 @@ function binaryPath(version, ...p) {
151
151
  return state.binaries(binaryDirName({ version }), ...p);
152
152
  }
153
153
  function trimExtension(filename) {
154
- const lastDotIndex = filename.lastIndexOf('.');
154
+ const lastDotIndex = filename.lastIndexOf(".");
155
155
  if (lastDotIndex === -1) {
156
156
  return filename;
157
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.cjs","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 = 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(`Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`);\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('failed to download archive: no HTTP status code in response from server');\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(`failed to download archive: ${response.statusCode} ${response.statusMessage}`);\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(`Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`);\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) => extractArchive(logger, { archivePath }));\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"],"names":["getDefaultPlVersion","tar"],"mappings":"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"}
1
+ {"version":3,"file":"platforma.cjs","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"],"names":["getDefaultPlVersion","tar"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type winston from 'winston';
1
+ import type winston from "winston";
2
2
  export declare const OSes: readonly ["linux", "macos", "windows"];
3
3
  export type OSType = (typeof OSes)[number];
4
4
  export declare function archiveOS(osName?: string): OSType;
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.d.ts","sourceRoot":"","sources":["../src/platforma.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,eAAO,MAAM,IAAI,wCAAyC,CAAC;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3C,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,eAAO,MAAM,MAAM,6BAA8B,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAcvD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CA+DjB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,MAAM,CAyCR;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACrD,OAAO,CAAC,MAAM,CAAC,CAEjB;AAOD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAEnE"}
1
+ {"version":3,"file":"platforma.d.ts","sourceRoot":"","sources":["../src/platforma.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,eAAO,MAAM,IAAI,wCAAyC,CAAC;AAC3D,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3C,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,eAAO,MAAM,MAAM,6BAA8B,CAAC;AAClD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAcvD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,MAAM,CAAC,CAsEjB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACA,MAAM,CA2CR;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACrD,OAAO,CAAC,MAAM,CAAC,CAIjB;AAOD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAEnE"}
package/dist/platforma.js CHANGED
@@ -6,32 +6,32 @@ import * as tar from 'tar';
6
6
  import state from './state.js';
7
7
  import { getDefaultPlVersion } from '@milaboratories/pl-deployments';
8
8
 
9
- const OSes = ['linux', 'macos', 'windows'];
9
+ const OSes = ["linux", "macos", "windows"];
10
10
  function archiveOS(osName) {
11
11
  const platform = os__default.platform();
12
12
  switch (platform) {
13
- case 'darwin':
14
- return 'macos';
15
- case 'linux':
16
- return 'linux';
17
- case 'win32':
18
- return 'windows';
13
+ case "darwin":
14
+ return "macos";
15
+ case "linux":
16
+ return "linux";
17
+ case "win32":
18
+ return "windows";
19
19
  default:
20
- throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: `
21
- + JSON.stringify(OSes));
20
+ throw new Error(`operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: ` +
21
+ JSON.stringify(OSes));
22
22
  }
23
23
  }
24
- const Arches = ['amd64', 'arm64'];
24
+ const Arches = ["amd64", "arm64"];
25
25
  function archiveArch(archName) {
26
26
  const arch = os__default.arch();
27
27
  switch (arch) {
28
- case 'arm64':
29
- return 'arm64';
30
- case 'x64':
31
- return 'amd64';
28
+ case "arm64":
29
+ return "arm64";
30
+ case "x64":
31
+ return "amd64";
32
32
  default:
33
- throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `
34
- + JSON.stringify(Arches));
33
+ throw new Error(`processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: ` +
34
+ JSON.stringify(Arches));
35
35
  }
36
36
  }
37
37
  function downloadArchive(logger, options) {
@@ -48,9 +48,9 @@ function downloadArchive(logger, options) {
48
48
  logger.info(`Downloading Platforma Backend archive:\n URL: ${downloadURL}\n Save to: ${archiveFilePath}`);
49
49
  const request = https.get(downloadURL);
50
50
  return new Promise((resolve, reject) => {
51
- request.on('response', (response) => {
51
+ request.on("response", (response) => {
52
52
  if (!response.statusCode) {
53
- const err = new Error('failed to download archive: no HTTP status code in response from server');
53
+ const err = new Error("failed to download archive: no HTTP status code in response from server");
54
54
  request.destroy();
55
55
  reject(err);
56
56
  return;
@@ -61,24 +61,24 @@ function downloadArchive(logger, options) {
61
61
  reject(err);
62
62
  return;
63
63
  }
64
- const totalBytes = parseInt(response.headers['content-length'] || '0', 10);
64
+ const totalBytes = parseInt(response.headers["content-length"] || "0", 10);
65
65
  let downloadedBytes = 0;
66
66
  const archive = fs__default.createWriteStream(archiveFilePath);
67
67
  response.pipe(archive);
68
- response.on('data', (chunk) => {
68
+ response.on("data", (chunk) => {
69
69
  downloadedBytes += chunk.length;
70
70
  const progress = (downloadedBytes / totalBytes) * 100;
71
71
  if (showProgress) {
72
72
  process.stdout.write(` downloading: ${progress.toFixed(2)}%\r`);
73
73
  }
74
74
  });
75
- response.on('error', (err) => {
75
+ response.on("error", (err) => {
76
76
  fs__default.unlinkSync(archiveFilePath);
77
77
  logger.error(`Failed to download Platforma Binary: ${err.message}`);
78
78
  request.destroy();
79
79
  reject(err);
80
80
  });
81
- archive.on('finish', () => {
81
+ archive.on("finish", () => {
82
82
  archive.close();
83
83
  logger.info(` ... download done.`);
84
84
  request.destroy();
@@ -88,7 +88,7 @@ function downloadArchive(logger, options) {
88
88
  });
89
89
  }
90
90
  function extractArchive(logger, options) {
91
- logger.debug('extracting archive...');
91
+ logger.debug("extracting archive...");
92
92
  const version = options?.version ?? getDefaultPlVersion();
93
93
  logger.debug(` version: '${version}'`);
94
94
  const archiveName = `${binaryDirName({ version })}.tgz`;
@@ -130,7 +130,7 @@ function binaryPath(version, ...p) {
130
130
  return state.binaries(binaryDirName({ version }), ...p);
131
131
  }
132
132
  function trimExtension(filename) {
133
- const lastDotIndex = filename.lastIndexOf('.');
133
+ const lastDotIndex = filename.lastIndexOf(".");
134
134
  if (lastDotIndex === -1) {
135
135
  return filename;
136
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.js","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 = 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(`Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`);\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('failed to download archive: no HTTP status code in response from server');\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(`failed to download archive: ${response.statusCode} ${response.statusMessage}`);\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(`Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`);\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) => extractArchive(logger, { archivePath }));\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"],"names":["os","fs"],"mappings":"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"}
1
+ {"version":3,"file":"platforma.js","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"],"names":["os","fs"],"mappings":"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"}
package/dist/run.cjs CHANGED
@@ -36,20 +36,20 @@ function runCommands(logger, cmds, options) {
36
36
  function run(logger, cmd, args, options) {
37
37
  logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n wd: ${options.cwd?.toString()}`);
38
38
  options.env = { ...process.env, ...options.env };
39
- logger.debug(' spawning child process');
39
+ logger.debug(" spawning child process");
40
40
  const child = node_child_process.spawn(cmd, args, options);
41
41
  let exitAfterChild = false;
42
42
  //
43
43
  // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.
44
44
  //
45
45
  const sigintHandler = () => {
46
- child.kill('SIGINT');
46
+ child.kill("SIGINT");
47
47
  exitAfterChild = true;
48
48
  };
49
- logger.debug(' setting up signal handler');
50
- process.on('SIGINT', sigintHandler);
51
- child.on('close', (code) => {
52
- process.removeListener('SIGINT', sigintHandler);
49
+ logger.debug(" setting up signal handler");
50
+ process.on("SIGINT", sigintHandler);
51
+ child.on("close", (code) => {
52
+ process.removeListener("SIGINT", sigintHandler);
53
53
  if (exitAfterChild) {
54
54
  process.exit(code);
55
55
  }
package/dist/run.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.cjs","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(logger: winston.Logger, cmds: instanceCommand[], options?: SpawnOptions): 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(logger: winston.Logger, cmd: string, args: readonly string[], options: SpawnOptions): 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"],"names":["spawn","spawnSync"],"mappings":"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"}
1
+ {"version":3,"file":"run.cjs","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"],"names":["spawn","spawnSync"],"mappings":"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"}
package/dist/run.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from 'node:child_process';
2
- import type { instanceCommand } from './state';
3
- import type winston from 'winston';
1
+ import type { SpawnOptions, SpawnSyncReturns, ChildProcess } from "node:child_process";
2
+ import type { instanceCommand } from "./state";
3
+ import type winston from "winston";
4
4
  type runResult = {
5
5
  executed: SpawnSyncReturns<Buffer>[];
6
6
  spawned: ChildProcess[];
package/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CA8B9G;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAQlF;AAED,wBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CA6BrH;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,YAAY,GACpB,gBAAgB,CAAC,MAAM,CAAC,CAO1B"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,IAAI,EAAE,eAAe,EAAE,EACvB,OAAO,CAAC,EAAE,YAAY,GACrB,SAAS,CA8BX;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,CAQlF;AAED,wBAAgB,GAAG,CACjB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,YAAY,GACpB,YAAY,CA6Bd;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,YAAY,GACpB,gBAAgB,CAAC,MAAM,CAAC,CAO1B"}
package/dist/run.js CHANGED
@@ -34,20 +34,20 @@ function runCommands(logger, cmds, options) {
34
34
  function run(logger, cmd, args, options) {
35
35
  logger.debug(`Running:\n cmd: ${JSON.stringify([cmd, ...args])}\n wd: ${options.cwd?.toString()}`);
36
36
  options.env = { ...process.env, ...options.env };
37
- logger.debug(' spawning child process');
37
+ logger.debug(" spawning child process");
38
38
  const child = spawn(cmd, args, options);
39
39
  let exitAfterChild = false;
40
40
  //
41
41
  // Ensure Ctrl+C causes right finalization order: first stop child process, then stop the parent.
42
42
  //
43
43
  const sigintHandler = () => {
44
- child.kill('SIGINT');
44
+ child.kill("SIGINT");
45
45
  exitAfterChild = true;
46
46
  };
47
- logger.debug(' setting up signal handler');
48
- process.on('SIGINT', sigintHandler);
49
- child.on('close', (code) => {
50
- process.removeListener('SIGINT', sigintHandler);
47
+ logger.debug(" setting up signal handler");
48
+ process.on("SIGINT", sigintHandler);
49
+ child.on("close", (code) => {
50
+ process.removeListener("SIGINT", sigintHandler);
51
51
  if (exitAfterChild) {
52
52
  process.exit(code);
53
53
  }
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","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(logger: winston.Logger, cmds: instanceCommand[], options?: SpawnOptions): 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(logger: winston.Logger, cmd: string, args: readonly string[], options: SpawnOptions): 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"],"names":[],"mappings":";;;SAWgB,WAAW,CAAC,MAAsB,EAAE,IAAuB,EAAE,OAAsB,EAAA;IACjG,MAAM,OAAO,GAA+B,EAAE;IAC9C,MAAM,QAAQ,GAAmB,EAAE;AACnC,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,GAAG,CAAC,OAAO;AAChB,YAAA,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,IAAI;gBACX,GAAG,OAAO,EAAE,GAAG;AAChB,aAAA;YACD,GAAG,GAAG,CAAC,OAAO;AACd,YAAA,GAAG,OAAO;SACX;AAED,QAAA,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAClD,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB;aAAO;AACL,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AACvD,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvC;YACF;QACF;IACF;IAEA,OAAO;AACL,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,OAAO,EAAE,QAAQ;KAClB;AACH;AAYM,SAAU,GAAG,CAAC,MAAsB,EAAE,GAAW,EAAE,IAAuB,EAAE,OAAqB,EAAA;IACrG,MAAM,CAAC,KAAK,CACV,CAAA,iBAAA,EAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA,QAAA,EAAW,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAA,CAAE,CACvF;AAED,IAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;AAChD,IAAA,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;IACvC,IAAI,cAAc,GAAY,KAAK;;;;IAKnC,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpB,cAAc,GAAG,IAAI;AACvB,IAAA,CAAC;AAED,IAAA,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC;AAC3C,IAAA,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;IAEnC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,KAAI;AACzB,QAAA,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/C,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACpB;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,OAAO,CACrB,MAAsB,EACtB,GAAW,EACX,IAAuB,EACvB,OAAqB,EAAA;IAErB,MAAM,CAAC,KAAK,CACV,CAAA,iBAAA,EAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA,UAAA,EAAa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAE,CACzF;AAED,IAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;IAChD,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;AACtC;;;;"}
1
+ {"version":3,"file":"run.js","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"],"names":[],"mappings":"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"}
package/dist/state.cjs CHANGED
@@ -9,13 +9,13 @@ var util = require('./util.cjs');
9
9
  class State {
10
10
  static instance;
11
11
  state = {
12
- currentInstance: '',
12
+ currentInstance: "",
13
13
  };
14
14
  filePath;
15
15
  dirPath;
16
16
  constructor(stateDir) {
17
- stateDir = stateDir ?? path.resolve(os.homedir(), '.config', 'pl-bootstrap');
18
- const stateFile = path.join(stateDir, 'state.json');
17
+ stateDir = stateDir ?? path.resolve(os.homedir(), ".config", "pl-bootstrap");
18
+ const stateFile = path.join(stateDir, "state.json");
19
19
  this.dirPath = stateDir;
20
20
  this.filePath = stateFile;
21
21
  if (!fs.existsSync(stateDir)) {
@@ -36,12 +36,12 @@ class State {
36
36
  }
37
37
  instanceDir(name, ...p) {
38
38
  if (name) {
39
- return this.path('data', name, ...p);
39
+ return this.path("data", name, ...p);
40
40
  }
41
- return this.path('data');
41
+ return this.path("data");
42
42
  }
43
43
  binaries(...p) {
44
- return this.path('binaries', ...p);
44
+ return this.path("binaries", ...p);
45
45
  }
46
46
  writeState() {
47
47
  fs.writeFileSync(this.filePath, JSON.stringify(this.state));
@@ -54,10 +54,10 @@ class State {
54
54
  return list.filter((iName) => this.instanceExists(iName));
55
55
  }
56
56
  instanceExists(name) {
57
- return fs.existsSync(this.instanceDir(name, 'instance.json'));
57
+ return fs.existsSync(this.instanceDir(name, "instance.json"));
58
58
  }
59
59
  getInstanceInfo(name) {
60
- const instanceInfoFile = this.instanceDir(name, 'instance.json');
60
+ const instanceInfoFile = this.instanceDir(name, "instance.json");
61
61
  if (!fs.existsSync(instanceInfoFile)) {
62
62
  throw new Error(`platforma backend instance '${name}' does not exist or is corrupted`);
63
63
  }
@@ -71,7 +71,7 @@ class State {
71
71
  if (!fs.existsSync(this.instanceDir(instanceName))) {
72
72
  fs.mkdirSync(this.instanceDir(instanceName), { recursive: true });
73
73
  }
74
- const instanceInfoFile = this.instanceDir(instanceName, 'instance.json');
74
+ const instanceInfoFile = this.instanceDir(instanceName, "instance.json");
75
75
  let oldInfo = {};
76
76
  if (fs.existsSync(instanceInfoFile)) {
77
77
  oldInfo = JSON.parse(_package.readFileSync(instanceInfoFile).toString());
@@ -81,14 +81,14 @@ class State {
81
81
  isInstanceActive(instance) {
82
82
  const iType = instance.type;
83
83
  switch (iType) {
84
- case 'docker': {
84
+ case "docker": {
85
85
  const i = util.getDockerComposeInfo(`pl-${instance.name}`);
86
86
  if (!i) {
87
87
  return false;
88
88
  }
89
- return i.Status.trim().startsWith('running');
89
+ return i.Status.trim().startsWith("running");
90
90
  }
91
- case 'process': {
91
+ case "process": {
92
92
  if (!instance.pid) {
93
93
  return false;
94
94
  }
@@ -96,7 +96,7 @@ class State {
96
96
  }
97
97
  default:
98
98
  util.assertNever();
99
- throw new Error('cli logic error: unknown service type, cannot check its state');
99
+ throw new Error("cli logic error: unknown service type, cannot check its state");
100
100
  }
101
101
  }
102
102
  get isActive() {
@@ -135,7 +135,9 @@ class State {
135
135
  }
136
136
  function isValidPID(pid) {
137
137
  const processName = util.getProcessName(pid);
138
- return processName === 'platforma' || processName.endsWith('/platforma') || processName.endsWith('\\platforma');
138
+ return (processName === "platforma" ||
139
+ processName.endsWith("/platforma") ||
140
+ processName.endsWith("\\platforma"));
139
141
  }
140
142
  var state = State.getStateInstance();
141
143