@codenotch/codenotch.cli 1.0.33

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 (187) hide show
  1. package/.github/copilot-instructions.md +3 -0
  2. package/README.md +28 -0
  3. package/bin/cli.js +3 -0
  4. package/dist/bin/cli.d.ts +2 -0
  5. package/dist/bin/cli.js +6 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/commands/index.d.ts +2 -0
  8. package/dist/commands/index.js +15 -0
  9. package/dist/commands/index.js.map +1 -0
  10. package/dist/commands/project/compile.d.ts +2 -0
  11. package/dist/commands/project/compile.js +25 -0
  12. package/dist/commands/project/compile.js.map +1 -0
  13. package/dist/commands/project/deploy.d.ts +2 -0
  14. package/dist/commands/project/deploy.js +16 -0
  15. package/dist/commands/project/deploy.js.map +1 -0
  16. package/dist/commands/project/index.d.ts +2 -0
  17. package/dist/commands/project/index.js +29 -0
  18. package/dist/commands/project/index.js.map +1 -0
  19. package/dist/commands/project/inspect.d.ts +2 -0
  20. package/dist/commands/project/inspect.js +17 -0
  21. package/dist/commands/project/inspect.js.map +1 -0
  22. package/dist/commands/project/new.d.ts +2 -0
  23. package/dist/commands/project/new.js +13 -0
  24. package/dist/commands/project/new.js.map +1 -0
  25. package/dist/commands/project/open.d.ts +2 -0
  26. package/dist/commands/project/open.js +26 -0
  27. package/dist/commands/project/open.js.map +1 -0
  28. package/dist/commands/project/package.d.ts +2 -0
  29. package/dist/commands/project/package.js +25 -0
  30. package/dist/commands/project/package.js.map +1 -0
  31. package/dist/commands/project/refresh.d.ts +2 -0
  32. package/dist/commands/project/refresh.js +15 -0
  33. package/dist/commands/project/refresh.js.map +1 -0
  34. package/dist/commands/project/remove.d.ts +2 -0
  35. package/dist/commands/project/remove.js +17 -0
  36. package/dist/commands/project/remove.js.map +1 -0
  37. package/dist/commands/project/shared.d.ts +5 -0
  38. package/dist/commands/project/shared.js +6 -0
  39. package/dist/commands/project/shared.js.map +1 -0
  40. package/dist/commands/project/start.d.ts +2 -0
  41. package/dist/commands/project/start.js +28 -0
  42. package/dist/commands/project/start.js.map +1 -0
  43. package/dist/commands/project/test.d.ts +2 -0
  44. package/dist/commands/project/test.js +20 -0
  45. package/dist/commands/project/test.js.map +1 -0
  46. package/dist/commands/react/build.d.ts +2 -0
  47. package/dist/commands/react/build.js +17 -0
  48. package/dist/commands/react/build.js.map +1 -0
  49. package/dist/commands/react/index.d.ts +2 -0
  50. package/dist/commands/react/index.js +13 -0
  51. package/dist/commands/react/index.js.map +1 -0
  52. package/dist/commands/react/serve.d.ts +2 -0
  53. package/dist/commands/react/serve.js +18 -0
  54. package/dist/commands/react/serve.js.map +1 -0
  55. package/dist/commands/runtime/clear.d.ts +2 -0
  56. package/dist/commands/runtime/clear.js +16 -0
  57. package/dist/commands/runtime/clear.js.map +1 -0
  58. package/dist/commands/runtime/index.d.ts +2 -0
  59. package/dist/commands/runtime/index.js +24 -0
  60. package/dist/commands/runtime/index.js.map +1 -0
  61. package/dist/commands/runtime/info.d.ts +2 -0
  62. package/dist/commands/runtime/info.js +49 -0
  63. package/dist/commands/runtime/info.js.map +1 -0
  64. package/dist/commands/runtime/latest.d.ts +2 -0
  65. package/dist/commands/runtime/latest.js +24 -0
  66. package/dist/commands/runtime/latest.js.map +1 -0
  67. package/dist/commands/runtime/portal.d.ts +2 -0
  68. package/dist/commands/runtime/portal.js +24 -0
  69. package/dist/commands/runtime/portal.js.map +1 -0
  70. package/dist/commands/runtime/start.d.ts +2 -0
  71. package/dist/commands/runtime/start.js +21 -0
  72. package/dist/commands/runtime/start.js.map +1 -0
  73. package/dist/commands/runtime/stop.d.ts +2 -0
  74. package/dist/commands/runtime/stop.js +18 -0
  75. package/dist/commands/runtime/stop.js.map +1 -0
  76. package/dist/commands/runtime/update.d.ts +2 -0
  77. package/dist/commands/runtime/update.js +17 -0
  78. package/dist/commands/runtime/update.js.map +1 -0
  79. package/dist/commands/system/index.d.ts +2 -0
  80. package/dist/commands/system/index.js +11 -0
  81. package/dist/commands/system/index.js.map +1 -0
  82. package/dist/commands/system/info.d.ts +2 -0
  83. package/dist/commands/system/info.js +28 -0
  84. package/dist/commands/system/info.js.map +1 -0
  85. package/dist/commands/system/read.d.ts +2 -0
  86. package/dist/commands/system/read.js +28 -0
  87. package/dist/commands/system/read.js.map +1 -0
  88. package/dist/index.d.ts +2 -0
  89. package/dist/index.js +55 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/models/Codenotch.d.ts +237 -0
  92. package/dist/models/Codenotch.js +214 -0
  93. package/dist/models/Codenotch.js.map +1 -0
  94. package/dist/models/DbModels.d.ts +221 -0
  95. package/dist/models/DbModels.js +130 -0
  96. package/dist/models/DbModels.js.map +1 -0
  97. package/dist/models/OpenApiModels.d.ts +115 -0
  98. package/dist/models/OpenApiModels.js +103 -0
  99. package/dist/models/OpenApiModels.js.map +1 -0
  100. package/dist/utils/BuildUtils.d.ts +54 -0
  101. package/dist/utils/BuildUtils.js +631 -0
  102. package/dist/utils/BuildUtils.js.map +1 -0
  103. package/dist/utils/ConsoleUtils.d.ts +6 -0
  104. package/dist/utils/ConsoleUtils.js +24 -0
  105. package/dist/utils/ConsoleUtils.js.map +1 -0
  106. package/dist/utils/FileUtils.d.ts +14 -0
  107. package/dist/utils/FileUtils.js +218 -0
  108. package/dist/utils/FileUtils.js.map +1 -0
  109. package/dist/utils/GitHubAuthUtils.d.ts +11 -0
  110. package/dist/utils/GitHubAuthUtils.js +74 -0
  111. package/dist/utils/GitHubAuthUtils.js.map +1 -0
  112. package/dist/utils/I18nUtils.d.ts +9 -0
  113. package/dist/utils/I18nUtils.js +56 -0
  114. package/dist/utils/I18nUtils.js.map +1 -0
  115. package/dist/utils/OpenAPIUtils.d.ts +33 -0
  116. package/dist/utils/OpenAPIUtils.js +279 -0
  117. package/dist/utils/OpenAPIUtils.js.map +1 -0
  118. package/dist/utils/OsUtils.d.ts +8 -0
  119. package/dist/utils/OsUtils.js +33 -0
  120. package/dist/utils/OsUtils.js.map +1 -0
  121. package/dist/utils/ProjectCompilationUtils.d.ts +63 -0
  122. package/dist/utils/ProjectCompilationUtils.js +850 -0
  123. package/dist/utils/ProjectCompilationUtils.js.map +1 -0
  124. package/dist/utils/ProjectUtils.d.ts +15 -0
  125. package/dist/utils/ProjectUtils.js +115 -0
  126. package/dist/utils/ProjectUtils.js.map +1 -0
  127. package/dist/utils/RuntimeUtils.d.ts +45 -0
  128. package/dist/utils/RuntimeUtils.js +613 -0
  129. package/dist/utils/RuntimeUtils.js.map +1 -0
  130. package/dist/utils/ServeUtils.d.ts +10 -0
  131. package/dist/utils/ServeUtils.js +191 -0
  132. package/dist/utils/ServeUtils.js.map +1 -0
  133. package/dist/utils/ShellUtils.d.ts +3 -0
  134. package/dist/utils/ShellUtils.js +28 -0
  135. package/dist/utils/ShellUtils.js.map +1 -0
  136. package/dist/utils/StringUtils.d.ts +9 -0
  137. package/dist/utils/StringUtils.js +65 -0
  138. package/dist/utils/StringUtils.js.map +1 -0
  139. package/docs/ARCHITECTURE.md +179 -0
  140. package/docs/TODO.md +18 -0
  141. package/package.json +63 -0
  142. package/src/bin/cli.ts +4 -0
  143. package/src/commands/index.ts +13 -0
  144. package/src/commands/project/compile.ts +20 -0
  145. package/src/commands/project/deploy.ts +11 -0
  146. package/src/commands/project/index.ts +28 -0
  147. package/src/commands/project/inspect.ts +12 -0
  148. package/src/commands/project/new.ts +11 -0
  149. package/src/commands/project/open.ts +21 -0
  150. package/src/commands/project/package.ts +20 -0
  151. package/src/commands/project/refresh.ts +13 -0
  152. package/src/commands/project/remove.ts +12 -0
  153. package/src/commands/project/shared.ts +9 -0
  154. package/src/commands/project/start.ts +24 -0
  155. package/src/commands/project/test.ts +15 -0
  156. package/src/commands/react/build.ts +12 -0
  157. package/src/commands/react/index.ts +12 -0
  158. package/src/commands/react/serve.ts +13 -0
  159. package/src/commands/runtime/clear.ts +11 -0
  160. package/src/commands/runtime/index.ts +24 -0
  161. package/src/commands/runtime/info.ts +47 -0
  162. package/src/commands/runtime/latest.ts +18 -0
  163. package/src/commands/runtime/portal.ts +20 -0
  164. package/src/commands/runtime/start.ts +16 -0
  165. package/src/commands/runtime/stop.ts +13 -0
  166. package/src/commands/runtime/update.ts +12 -0
  167. package/src/commands/system/index.ts +9 -0
  168. package/src/commands/system/info.ts +23 -0
  169. package/src/commands/system/read.ts +25 -0
  170. package/src/index.ts +22 -0
  171. package/src/models/Codenotch.ts +361 -0
  172. package/src/models/DbModels.ts +428 -0
  173. package/src/models/OpenApiModels.ts +145 -0
  174. package/src/utils/BuildUtils.ts +739 -0
  175. package/src/utils/ConsoleUtils.ts +22 -0
  176. package/src/utils/FileUtils.ts +266 -0
  177. package/src/utils/GitHubAuthUtils.ts +83 -0
  178. package/src/utils/I18nUtils.ts +58 -0
  179. package/src/utils/OpenAPIUtils.ts +285 -0
  180. package/src/utils/OsUtils.ts +32 -0
  181. package/src/utils/ProjectCompilationUtils.ts +1002 -0
  182. package/src/utils/ProjectUtils.ts +151 -0
  183. package/src/utils/RuntimeUtils.ts +743 -0
  184. package/src/utils/ServeUtils.ts +175 -0
  185. package/src/utils/ShellUtils.ts +26 -0
  186. package/src/utils/StringUtils.ts +80 -0
  187. package/tsconfig.json +35 -0
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const node_os_1 = __importDefault(require("node:os"));
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const promises_1 = __importDefault(require("node:fs/promises"));
9
+ const node_fs_1 = require("node:fs");
10
+ const promises_2 = require("node:stream/promises");
11
+ const node_stream_1 = require("node:stream");
12
+ const node_child_process_1 = require("node:child_process");
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const decompress_1 = __importDefault(require("decompress"));
15
+ const FileUtils_1 = __importDefault(require("./FileUtils"));
16
+ const ProjectUtils_1 = __importDefault(require("./ProjectUtils"));
17
+ const GitHubAuthUtils_1 = __importDefault(require("./GitHubAuthUtils"));
18
+ const ProjectCompilationUtils_1 = __importDefault(require("./ProjectCompilationUtils"));
19
+ class RuntimeUtils {
20
+ /// The directory where the runtime is installed, we will store the executable and other files there
21
+ /// TODO not sure about that, should we store globally, or for each "project" ? Both ? like npm
22
+ static CODENOTCH_INSTALL_DIR = process.env.CODENOTCH_PATH?.trim()
23
+ ? node_path_1.default.resolve(process.env.CODENOTCH_PATH.trim())
24
+ : node_path_1.default.join(node_os_1.default.homedir(), ".codenotch");
25
+ static CODENOTCH_DATA_FOLDER = "data";
26
+ static RUNTIME_PID_FILE = node_path_1.default.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, "runtime.pid");
27
+ static RUNTIME_META_FILE = node_path_1.default.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, "runtime.json");
28
+ static DEFAULT_RUNTIME_HOST = "127.0.0.1";
29
+ static DEFAULT_RUNTIME_PORT = 5005;
30
+ static ADMIN_USER_EMAIL = "admin@example.com";
31
+ //#region Runtime
32
+ static async readRuntimeMeta() {
33
+ try {
34
+ const raw = await promises_1.default.readFile(RuntimeUtils.RUNTIME_META_FILE, "utf8");
35
+ return JSON.parse(raw);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ static async writeRuntimeMeta(meta) {
42
+ await promises_1.default.mkdir(RuntimeUtils.CODENOTCH_INSTALL_DIR, { recursive: true });
43
+ await promises_1.default.writeFile(RuntimeUtils.RUNTIME_META_FILE, JSON.stringify(meta, null, 2), "utf8");
44
+ }
45
+ static async getRuntimeBaseUrl() {
46
+ //return `http://localhost:5002`; // for testing on local visual studio
47
+ const meta = await RuntimeUtils.readRuntimeMeta();
48
+ const host = meta?.host ?? RuntimeUtils.DEFAULT_RUNTIME_HOST;
49
+ const port = meta?.port ?? RuntimeUtils.DEFAULT_RUNTIME_PORT;
50
+ return `http://${host}:${port}`;
51
+ }
52
+ static async runtimeFetch(path, includeToken = false, options) {
53
+ const baseUrl = await RuntimeUtils.getRuntimeBaseUrl();
54
+ const isFormData = options?.body instanceof FormData;
55
+ let finalOptions = {
56
+ ...options,
57
+ credentials: 'include',
58
+ headers: {
59
+ ...(isFormData ? {} : { 'Content-Type': 'application/json' }),
60
+ ...options?.headers,
61
+ }
62
+ };
63
+ if (includeToken) {
64
+ const token = await RuntimeUtils.getAdminToken();
65
+ finalOptions.headers["devAccessToken"] = token;
66
+ }
67
+ const url = `${baseUrl}${path}`;
68
+ const res = await fetch(url, finalOptions);
69
+ if (!res.ok) {
70
+ const body = await res.text().catch(() => null);
71
+ throw new Error(`Runtime api error: ${url} -> ${res.status} - ${body}`);
72
+ }
73
+ if (res.status === 204 || res.headers.get('content-length') === '0') {
74
+ return undefined;
75
+ }
76
+ let content = await res.text();
77
+ try {
78
+ return JSON.parse(content);
79
+ }
80
+ catch (e) {
81
+ return content;
82
+ }
83
+ }
84
+ static async getAdminToken() {
85
+ // Use the client_credentials flow to get an admin token
86
+ // In dev/local the flow we only need the user email to issue a token
87
+ var response = await RuntimeUtils.runtimeFetch(`/_auth/token`, false, {
88
+ method: "POST",
89
+ body: new URLSearchParams({
90
+ client_id: RuntimeUtils.ADMIN_USER_EMAIL,
91
+ grant_type: "client_credentials",
92
+ }),
93
+ headers: {
94
+ "Content-Type": "application/x-www-form-urlencoded"
95
+ }
96
+ });
97
+ //TODO some way to cache and reuse this
98
+ return response.access_token;
99
+ }
100
+ static async ensureRuntimeInstalled() {
101
+ const isInstalled = await RuntimeUtils.isRuntimeInstalled();
102
+ if (!isInstalled) {
103
+ //TODO Here we assume NodeJs is installed and available in PATH, we should check that and propose to install it if not
104
+ await RuntimeUtils.installLatestRuntime();
105
+ }
106
+ }
107
+ static async ensureRuntimeIsRunning() {
108
+ const isRunning = await RuntimeUtils.isRuntimeRunning();
109
+ if (isRunning) {
110
+ return;
111
+ }
112
+ await RuntimeUtils.startRuntime();
113
+ }
114
+ static async isRuntimeInstalled() {
115
+ const targetExe = RuntimeUtils.getRuntimeExecutablePath();
116
+ try {
117
+ await promises_1.default.access(targetExe);
118
+ return true;
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
124
+ static async isRuntimeRunning() {
125
+ try {
126
+ const pidStr = await promises_1.default.readFile(RuntimeUtils.RUNTIME_PID_FILE, "utf8");
127
+ const pid = parseInt(pidStr.trim());
128
+ if (isNaN(pid)) {
129
+ return false;
130
+ }
131
+ // Check if process exists by sending signal 0 (doesn't kill, just checks)
132
+ try {
133
+ process.kill(pid, 0);
134
+ return true;
135
+ }
136
+ catch {
137
+ // Process doesn't exist
138
+ await promises_1.default.unlink(RuntimeUtils.RUNTIME_PID_FILE).catch(() => { });
139
+ return false;
140
+ }
141
+ }
142
+ catch {
143
+ // PID file doesn't exist
144
+ return false;
145
+ }
146
+ }
147
+ static async runRuntimeExecutable(args = [], detached, envVars = {}) {
148
+ const exePath = RuntimeUtils.getRuntimeExecutablePath();
149
+ try {
150
+ const child = (0, node_child_process_1.spawn)(exePath, args, {
151
+ detached: detached,
152
+ stdio: detached ? "ignore" : "pipe",
153
+ windowsHide: true,
154
+ env: { ...process.env, ...envVars },
155
+ });
156
+ if (detached) {
157
+ // Store the PID for later reference
158
+ await promises_1.default.mkdir(RuntimeUtils.CODENOTCH_INSTALL_DIR, { recursive: true });
159
+ await promises_1.default.writeFile(RuntimeUtils.RUNTIME_PID_FILE, child.pid.toString());
160
+ child.unref(); // Allow parent process to exit independently
161
+ return "";
162
+ }
163
+ else {
164
+ // Wait for the child process to complete
165
+ let stdout = "";
166
+ let stderr = "";
167
+ child.stdout?.on("data", (chunk) => {
168
+ const text = chunk.toString();
169
+ stdout += text;
170
+ process.stdout.write(text);
171
+ });
172
+ child.stderr?.on("data", (chunk) => {
173
+ const text = chunk.toString();
174
+ stderr += text;
175
+ process.stderr.write(text);
176
+ });
177
+ await new Promise((resolve, reject) => {
178
+ child.on("exit", (code) => {
179
+ if (code === 0) {
180
+ resolve();
181
+ }
182
+ else {
183
+ const errorOutput = stderr.trim() || stdout.trim();
184
+ reject(new Error(`Runtime process exited with code ${code}${errorOutput ? `: ${errorOutput}` : ""}`));
185
+ }
186
+ });
187
+ child.on("error", reject);
188
+ });
189
+ return stdout.trim();
190
+ }
191
+ }
192
+ catch (error) {
193
+ throw new Error(`Failed to run runtime executable: ${error instanceof Error ? error.message : String(error)}`);
194
+ }
195
+ }
196
+ static getRuntimeExecutablePath() {
197
+ const platform = process.platform; // win32 | linux | darwin
198
+ const exeName = platform === "win32" ? "codenotch.exe" : "codenotch";
199
+ return node_path_1.default.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, exeName);
200
+ }
201
+ static async installLatestRuntime() {
202
+ let wasRunning = await RuntimeUtils.isRuntimeRunning();
203
+ if (wasRunning) {
204
+ await RuntimeUtils.stopRuntime();
205
+ }
206
+ const platform = process.platform; // win32 | linux | darwin
207
+ const exeName = platform === "win32" ? "codenotch.exe" : "codenotch";
208
+ let assetName;
209
+ if (platform === "win32")
210
+ assetName = "codenotch-windows.zip";
211
+ else if (platform === "linux")
212
+ assetName = "codenotch-linux.tar.gz";
213
+ else if (platform === "darwin")
214
+ assetName = "codenotch-macos.tar.gz";
215
+ else
216
+ throw new Error(`Unsupported platform: ${platform}`);
217
+ // We need to authenticate because the repo is private
218
+ const token = await GitHubAuthUtils_1.default.getToken();
219
+ const headers = {
220
+ Authorization: `Bearer ${token}`,
221
+ };
222
+ console.log(chalk_1.default.blue(`Getting latest Codenotch runtime release metadata...`));
223
+ const latestReleaseRes = await fetch("https://api.github.com/repos/EchinoHub/service-core/releases/latest", {
224
+ headers: {
225
+ ...headers,
226
+ "Accept": "application/vnd.github+json"
227
+ }
228
+ });
229
+ if (!latestReleaseRes.ok) {
230
+ const body = await latestReleaseRes.text().catch(() => "");
231
+ throw new Error(`Failed to get latest release: ${latestReleaseRes.status} ${body}`);
232
+ }
233
+ //const url = `https://github.com/EchinoHub/service-core/releases/latest/download/${assetName}`;
234
+ const release = await latestReleaseRes.json();
235
+ const asset = release.assets.find((a) => a.name === assetName);
236
+ if (!asset) {
237
+ throw new Error(`Asset not found: ${assetName}.`);
238
+ }
239
+ const version = release.tag_name;
240
+ console.log(chalk_1.default.blue(`Downloading Codenotch runtime from ${asset.url}...`));
241
+ const res = await fetch(asset.url, {
242
+ redirect: "follow",
243
+ headers: {
244
+ ...headers,
245
+ "Accept": "application/octet-stream"
246
+ }
247
+ });
248
+ if (!res.ok || !res.body) {
249
+ console.log(chalk_1.default.red(`Failed to download runtime from ${asset.url}`));
250
+ throw new Error(`Download failed: ${res.status} ${res.statusText}`);
251
+ }
252
+ const tempRoot = await promises_1.default.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), "codenotch-"));
253
+ try {
254
+ const archivePath = node_path_1.default.join(tempRoot, assetName);
255
+ const extractDir = node_path_1.default.join(tempRoot, "extract");
256
+ await promises_1.default.mkdir(RuntimeUtils.CODENOTCH_INSTALL_DIR, { recursive: true });
257
+ await promises_1.default.mkdir(extractDir, { recursive: true });
258
+ await (0, promises_2.pipeline)(node_stream_1.Readable.fromWeb(res.body), (0, node_fs_1.createWriteStream)(archivePath));
259
+ await (0, decompress_1.default)(archivePath, extractDir);
260
+ const downloadedExe = node_path_1.default.join(extractDir, assetName.split(".")[0], exeName);
261
+ const targetExe = node_path_1.default.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, exeName);
262
+ await promises_1.default.copyFile(downloadedExe, targetExe);
263
+ if (platform !== "win32")
264
+ await promises_1.default.chmod(targetExe, 0o755);
265
+ // Update the metadata with the version
266
+ const existingMeta = await RuntimeUtils.readRuntimeMeta();
267
+ await RuntimeUtils.writeRuntimeMeta({
268
+ host: existingMeta?.host ?? RuntimeUtils.DEFAULT_RUNTIME_HOST,
269
+ port: existingMeta?.port ?? RuntimeUtils.DEFAULT_RUNTIME_PORT,
270
+ version: version,
271
+ dataPath: existingMeta?.dataPath
272
+ });
273
+ console.log(chalk_1.default.blue(`The runtime has been installed successfully.`));
274
+ }
275
+ finally {
276
+ FileUtils_1.default.delete(tempRoot);
277
+ }
278
+ if (wasRunning) {
279
+ await RuntimeUtils.startRuntime();
280
+ }
281
+ }
282
+ static async startRuntime(options) {
283
+ const isRunning = await RuntimeUtils.isRuntimeRunning();
284
+ if (isRunning) {
285
+ return;
286
+ }
287
+ await this.ensureRuntimeInstalled();
288
+ // Start the runtime process in detached mode by default
289
+ let detached = true;
290
+ if (options?.attach) {
291
+ detached = false;
292
+ }
293
+ console.log(chalk_1.default.blue(`Starting Codenotch runtime ${detached ? "in detached mode" : "in attached mode"}...`));
294
+ const port = options?.port ?? RuntimeUtils.DEFAULT_RUNTIME_PORT;
295
+ const dataPath = options?.dataPath;
296
+ const version = await RuntimeUtils.getRuntimeVersion();
297
+ // Store the runtime meta (like the port) so we can use it later to connect to the runtime
298
+ await RuntimeUtils.writeRuntimeMeta({
299
+ host: RuntimeUtils.DEFAULT_RUNTIME_HOST,
300
+ port: port,
301
+ version: version,
302
+ dataPath: dataPath
303
+ });
304
+ const runtimeArgs = dataPath ? ["-d", dataPath] : [];
305
+ await RuntimeUtils.runRuntimeExecutable(runtimeArgs, detached, { CODENOTCH_PORT: String(port), START_URL: '' }); // pass the port and prevent the runtime from opening the browser automatically
306
+ // Wait until the runtime is responsive
307
+ const maxAttempts = 50; // Wait up to 10 seconds
308
+ let attempts = 0;
309
+ while (attempts < maxAttempts) {
310
+ try {
311
+ await RuntimeUtils.runtimeFetch("/health");
312
+ console.log(chalk_1.default.green(`Runtime is ready!`));
313
+ return; // Runtime is responsive
314
+ }
315
+ catch (e) {
316
+ await new Promise(resolve => setTimeout(resolve, 200));
317
+ attempts++;
318
+ }
319
+ }
320
+ console.log(chalk_1.default.red(`Failed to start runtime: runtime did not become responsive within expected time.`));
321
+ throw new Error(`Runtime did not become responsive within expected time.`);
322
+ }
323
+ static async stopRuntime() {
324
+ if (await RuntimeUtils.isRuntimeInstalled() === false) {
325
+ return;
326
+ }
327
+ if (await RuntimeUtils.isRuntimeRunning() === false) {
328
+ return;
329
+ }
330
+ try {
331
+ const pidStr = await promises_1.default.readFile(RuntimeUtils.RUNTIME_PID_FILE, "utf8");
332
+ const pid = parseInt(pidStr.trim());
333
+ if (!isNaN(pid)) {
334
+ // Send SIGTERM to gracefully stop the process
335
+ process.kill(pid, "SIGTERM");
336
+ // Wait up to 5 seconds for graceful shutdown
337
+ let attempts = 0;
338
+ while (attempts < 50 && await RuntimeUtils.isRuntimeRunning()) {
339
+ await new Promise(resolve => setTimeout(resolve, 100));
340
+ attempts++;
341
+ }
342
+ // If still running, force kill
343
+ if (await RuntimeUtils.isRuntimeRunning()) {
344
+ process.kill(pid, "SIGKILL");
345
+ await new Promise(resolve => setTimeout(resolve, 100));
346
+ }
347
+ }
348
+ // Clean up the PID file
349
+ await promises_1.default.unlink(RuntimeUtils.RUNTIME_PID_FILE).catch(() => { });
350
+ }
351
+ catch (error) {
352
+ throw new Error(`Failed to stop runtime: ${error instanceof Error ? error.message : String(error)}`);
353
+ }
354
+ }
355
+ static async clearRuntime() {
356
+ // Remove the runtime data folder, but keep the executable and other files
357
+ const dataDir = node_path_1.default.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, RuntimeUtils.CODENOTCH_DATA_FOLDER);
358
+ try {
359
+ await promises_1.default.rm(dataDir, { recursive: true, force: true });
360
+ console.log(chalk_1.default.green(`Runtime data cleared successfully.`));
361
+ }
362
+ catch (error) {
363
+ console.log(chalk_1.default.red(`Failed to clear runtime data: ${error}`));
364
+ throw error;
365
+ }
366
+ }
367
+ static async getRuntimeVersion() {
368
+ if (!await RuntimeUtils.isRuntimeInstalled()) {
369
+ return "Not installed";
370
+ }
371
+ // Use the metadata if available to avoid calling the executable, which can be slow to start
372
+ const meta = await RuntimeUtils.readRuntimeMeta();
373
+ if (!meta?.version) {
374
+ return await RuntimeUtils.runRuntimeExecutable(["--version"], false);
375
+ }
376
+ return meta?.version;
377
+ }
378
+ static async getRuntimeDataPath() {
379
+ const meta = await RuntimeUtils.readRuntimeMeta();
380
+ return meta?.dataPath;
381
+ }
382
+ static async getLatestRuntimeRelease() {
383
+ const token = await GitHubAuthUtils_1.default.getToken();
384
+ const headers = {
385
+ "Accept": "application/vnd.github+json",
386
+ "Authorization": `Bearer ${token}`,
387
+ };
388
+ const res = await fetch("https://api.github.com/repos/EchinoHub/service-core/releases/latest", { headers });
389
+ if (!res.ok) {
390
+ const body = await res.text().catch(() => "");
391
+ throw new Error(`Failed to get latest release: ${res.status} ${body}`);
392
+ }
393
+ const release = await res.json();
394
+ return {
395
+ version: release.tag_name,
396
+ createdAt: release.created_at,
397
+ url: release.html_url
398
+ };
399
+ }
400
+ //#endregion
401
+ //#region Project management
402
+ static async startProject(projectPath) {
403
+ //TODO multiproject support
404
+ //TODO --watch mode
405
+ const serviceName = await ProjectUtils_1.default.getProjectServiceName(projectPath);
406
+ // Ensure the runtime is running
407
+ await RuntimeUtils.startRuntime();
408
+ const outputPath = node_path_1.default.join(node_os_1.default.tmpdir(), `cn-build-${Date.now()}.zip`);
409
+ try {
410
+ console.log(chalk_1.default.blue(`Building project "${serviceName}"...`));
411
+ await ProjectUtils_1.default.packageProject(projectPath, outputPath, true);
412
+ console.log(chalk_1.default.blue(`Deploying project "${serviceName}" to runtime...`));
413
+ await new Promise(resolve => setTimeout(resolve, 2000)); // Wait a bit before deploying to ensure the runtime is fully ready, only temporary until runtime fix the ready endpoint to be more reliable
414
+ var deploySuccess = await RuntimeUtils.deployProject(serviceName, outputPath);
415
+ if (deploySuccess) {
416
+ console.log(chalk_1.default.green(`Project "${serviceName}" is now running.`));
417
+ }
418
+ else {
419
+ console.log(chalk_1.default.red(`Project start failed.`));
420
+ }
421
+ }
422
+ finally {
423
+ // Remove the build
424
+ FileUtils_1.default.delete(outputPath);
425
+ }
426
+ }
427
+ static async testProject(projectPath, fileFilter, nameFilter, inPlace = false) {
428
+ await RuntimeUtils.ensureRuntimeInstalled();
429
+ // For testing we use a separate instance of the runtime
430
+ // We run it in attach mode so we get the results in the console
431
+ const isPartial = !!(fileFilter || nameFilter);
432
+ const finalReportPath = node_path_1.default.join(projectPath, "test-report.json");
433
+ // Runs the runtime test command, writing the report to a given path via -r
434
+ const testFunc = async (workPath, reportPath) => await RuntimeUtils.runRuntimeExecutable([
435
+ "test",
436
+ "-p", workPath,
437
+ ...(fileFilter ? ["-f", fileFilter] : []),
438
+ ...(nameFilter ? ["-t", nameFilter] : []),
439
+ "-r", reportPath,
440
+ ], false);
441
+ // To test a project, we need to install it and to install it, we need it to be compiled
442
+ let projectCompiled = await ProjectUtils_1.default.isManifestCompiled(projectPath);
443
+ // If the project is already compiled we can go ahead and test it
444
+ if (projectCompiled) {
445
+ const tempReportPath = node_path_1.default.join(node_os_1.default.tmpdir(), `cn-report-${Date.now()}.json`);
446
+ try {
447
+ await testFunc(projectPath, tempReportPath);
448
+ await RuntimeUtils.persistTestReport(tempReportPath, finalReportPath, isPartial);
449
+ }
450
+ finally {
451
+ await promises_1.default.unlink(tempReportPath).catch(() => { });
452
+ }
453
+ return;
454
+ }
455
+ // We need a "lightly-compiled" project, meaning we need a full manifest (we don't need i18n or to build the React apps)
456
+ let compileFunc = async (path) => {
457
+ const compilation = await ProjectCompilationUtils_1.default.compileTestProject(path);
458
+ if (compilation.errors.length > 0) {
459
+ console.error(chalk_1.default.red("Compilation failed with errors:"));
460
+ compilation.errors.forEach(err => console.error(chalk_1.default.red(`- ${err}`)));
461
+ console.warn(chalk_1.default.yellow("Ignoring compilation errors and proceeding with testing..."));
462
+ }
463
+ };
464
+ // In-place means we can compile and modify files directly in the project folder, we don't need to copy them to a temp folder, this is useful during CI/CD
465
+ // Inside the IDE we'll prefer to copy the folder to avoid modifying the source files
466
+ if (inPlace) {
467
+ await compileFunc(projectPath);
468
+ const tempReportPath = node_path_1.default.join(node_os_1.default.tmpdir(), `cn-report-${Date.now()}.json`);
469
+ try {
470
+ await testFunc(projectPath, tempReportPath);
471
+ await RuntimeUtils.persistTestReport(tempReportPath, finalReportPath, isPartial);
472
+ }
473
+ finally {
474
+ await promises_1.default.unlink(tempReportPath).catch(() => { });
475
+ }
476
+ return;
477
+ }
478
+ const tempRoot = await promises_1.default.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), "codenotch-"));
479
+ try {
480
+ // Copy project
481
+ await FileUtils_1.default.copyFolder(projectPath, tempRoot, ['.git', 'node_modules', 'dist', 'build', 'out']);
482
+ await compileFunc(tempRoot);
483
+ const tempReportPath = node_path_1.default.join(tempRoot, "test-report.json");
484
+ await testFunc(tempRoot, tempReportPath);
485
+ await RuntimeUtils.persistTestReport(tempReportPath, finalReportPath, isPartial);
486
+ }
487
+ finally {
488
+ // Clean up temp folder
489
+ //TODO consider keeping it for faster re-testing if project has not changed
490
+ await FileUtils_1.default.delete(tempRoot);
491
+ }
492
+ }
493
+ static async deployProject(serviceName, packagePath) {
494
+ // We assume the project is already built and packaged, we just need to deploy it to the runtime
495
+ // Get the information about the project package, we assume it's in the current directory and named "project.zip"
496
+ const zipFilePath = packagePath;
497
+ try {
498
+ await promises_1.default.access(zipFilePath);
499
+ }
500
+ catch (error) {
501
+ console.log(chalk_1.default.red(`Project package not found: ${zipFilePath}`));
502
+ throw new Error(`Project package not found: ${zipFilePath}`);
503
+ }
504
+ // Ensure the runtime is running
505
+ await RuntimeUtils.startRuntime();
506
+ const zipBuffer = await promises_1.default.readFile(zipFilePath);
507
+ const zipBlob = new Blob([zipBuffer], { type: "application/zip" });
508
+ const form = new FormData();
509
+ form.append('serviceName', serviceName);
510
+ form.append('file', zipBlob, "package.zip");
511
+ await RuntimeUtils.runtimeFetch("/project/upload", true, {
512
+ method: "POST",
513
+ body: form
514
+ });
515
+ // Wait until the project deployment has completed
516
+ while (true) {
517
+ await new Promise(resolve => setTimeout(resolve, 1000));
518
+ try {
519
+ const projectState = await RuntimeUtils.runtimeFetch(`/${serviceName}/project`, true);
520
+ if (projectState.status === "READY") {
521
+ console.log(chalk_1.default.green(`${serviceName} is ready!`));
522
+ return true;
523
+ }
524
+ else if (projectState.status === "FAILURE" || projectState.status === "REMOVING") {
525
+ console.log(chalk_1.default.red(`Failed to deploy ${serviceName}. Errors: ${projectState.errors?.join(", ")}`));
526
+ return false;
527
+ }
528
+ }
529
+ catch {
530
+ // Keep waiting
531
+ }
532
+ }
533
+ }
534
+ static async patchProject(projectPath) {
535
+ throw new Error('Method not implemented.');
536
+ }
537
+ static async removeProject(projectPath) {
538
+ const serviceName = await ProjectUtils_1.default.getProjectServiceName(projectPath);
539
+ await RuntimeUtils.uninstallProject(serviceName);
540
+ }
541
+ static async uninstallProject(serviceName) {
542
+ // Cannot properly uninstall if the runtime is not installed and running
543
+ // Ensure the runtime is running
544
+ await RuntimeUtils.startRuntime();
545
+ await RuntimeUtils.runtimeFetch(`/${serviceName}/project`, true, {
546
+ method: 'DELETE'
547
+ });
548
+ /* Normally the runtime handle that
549
+ // Erase all files prefixed with the project name in the runtime data folder
550
+ const runtimeDataDir = path.join(RuntimeUtils.CODENOTCH_INSTALL_DIR, "data");
551
+ const files = await fs.readdir(runtimeDataDir);
552
+ for (const file of files) {
553
+ if (file.startsWith(project)) {
554
+ await fs.unlink(path.join(runtimeDataDir, file));
555
+ }
556
+ }
557
+ */
558
+ }
559
+ //#endregion
560
+ //#region Test report helpers
561
+ static async persistTestReport(sourcePath, destPath, isPartial) {
562
+ let newReport;
563
+ try {
564
+ const content = await promises_1.default.readFile(sourcePath, "utf8");
565
+ newReport = JSON.parse(content);
566
+ }
567
+ catch {
568
+ console.warn(chalk_1.default.yellow("Could not read test report from runtime output."));
569
+ return;
570
+ }
571
+ if (!isPartial) {
572
+ await promises_1.default.writeFile(destPath, JSON.stringify(newReport, null, 2), "utf8");
573
+ return;
574
+ }
575
+ // Merge partial results into any existing report
576
+ let existingReport = null;
577
+ try {
578
+ const content = await promises_1.default.readFile(destPath, "utf8");
579
+ existingReport = JSON.parse(content);
580
+ }
581
+ catch {
582
+ // No existing report — use the new one as-is
583
+ }
584
+ const merged = existingReport
585
+ ? RuntimeUtils.mergeTestReports(existingReport, newReport)
586
+ : newReport;
587
+ await promises_1.default.writeFile(destPath, JSON.stringify(merged, null, 2), "utf8");
588
+ }
589
+ static mergeTestReports(existing, partial) {
590
+ const updatedTests = [...existing.Tests];
591
+ for (const newTest of partial.Tests) {
592
+ const idx = updatedTests.findIndex(t => t.Name === newTest.Name);
593
+ if (idx >= 0) {
594
+ updatedTests[idx] = newTest;
595
+ }
596
+ else {
597
+ updatedTests.push(newTest);
598
+ }
599
+ }
600
+ const successCount = updatedTests.filter(t => t.Success).length;
601
+ const failureCount = updatedTests.filter(t => !t.Success).length;
602
+ return {
603
+ ...existing,
604
+ ExecutionId: partial.ExecutionId,
605
+ Tests: updatedTests,
606
+ SuccessCount: successCount,
607
+ FailureCount: failureCount,
608
+ Success: failureCount === 0,
609
+ };
610
+ }
611
+ }
612
+ exports.default = RuntimeUtils;
613
+ //# sourceMappingURL=RuntimeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeUtils.js","sourceRoot":"","sources":["../../src/utils/RuntimeUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface IServeOptions {
2
+ port?: number;
3
+ index?: string;
4
+ }
5
+ export default abstract class ServeUtils {
6
+ static serveApp(directory: string, options: IServeOptions): Promise<void>;
7
+ private static getAumlVariables;
8
+ private static getEnvVariables;
9
+ private static startExpressServer;
10
+ }