@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.
- package/.github/copilot-instructions.md +3 -0
- package/README.md +28 -0
- package/bin/cli.js +3 -0
- package/dist/bin/cli.d.ts +2 -0
- package/dist/bin/cli.js +6 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/project/compile.d.ts +2 -0
- package/dist/commands/project/compile.js +25 -0
- package/dist/commands/project/compile.js.map +1 -0
- package/dist/commands/project/deploy.d.ts +2 -0
- package/dist/commands/project/deploy.js +16 -0
- package/dist/commands/project/deploy.js.map +1 -0
- package/dist/commands/project/index.d.ts +2 -0
- package/dist/commands/project/index.js +29 -0
- package/dist/commands/project/index.js.map +1 -0
- package/dist/commands/project/inspect.d.ts +2 -0
- package/dist/commands/project/inspect.js +17 -0
- package/dist/commands/project/inspect.js.map +1 -0
- package/dist/commands/project/new.d.ts +2 -0
- package/dist/commands/project/new.js +13 -0
- package/dist/commands/project/new.js.map +1 -0
- package/dist/commands/project/open.d.ts +2 -0
- package/dist/commands/project/open.js +26 -0
- package/dist/commands/project/open.js.map +1 -0
- package/dist/commands/project/package.d.ts +2 -0
- package/dist/commands/project/package.js +25 -0
- package/dist/commands/project/package.js.map +1 -0
- package/dist/commands/project/refresh.d.ts +2 -0
- package/dist/commands/project/refresh.js +15 -0
- package/dist/commands/project/refresh.js.map +1 -0
- package/dist/commands/project/remove.d.ts +2 -0
- package/dist/commands/project/remove.js +17 -0
- package/dist/commands/project/remove.js.map +1 -0
- package/dist/commands/project/shared.d.ts +5 -0
- package/dist/commands/project/shared.js +6 -0
- package/dist/commands/project/shared.js.map +1 -0
- package/dist/commands/project/start.d.ts +2 -0
- package/dist/commands/project/start.js +28 -0
- package/dist/commands/project/start.js.map +1 -0
- package/dist/commands/project/test.d.ts +2 -0
- package/dist/commands/project/test.js +20 -0
- package/dist/commands/project/test.js.map +1 -0
- package/dist/commands/react/build.d.ts +2 -0
- package/dist/commands/react/build.js +17 -0
- package/dist/commands/react/build.js.map +1 -0
- package/dist/commands/react/index.d.ts +2 -0
- package/dist/commands/react/index.js +13 -0
- package/dist/commands/react/index.js.map +1 -0
- package/dist/commands/react/serve.d.ts +2 -0
- package/dist/commands/react/serve.js +18 -0
- package/dist/commands/react/serve.js.map +1 -0
- package/dist/commands/runtime/clear.d.ts +2 -0
- package/dist/commands/runtime/clear.js +16 -0
- package/dist/commands/runtime/clear.js.map +1 -0
- package/dist/commands/runtime/index.d.ts +2 -0
- package/dist/commands/runtime/index.js +24 -0
- package/dist/commands/runtime/index.js.map +1 -0
- package/dist/commands/runtime/info.d.ts +2 -0
- package/dist/commands/runtime/info.js +49 -0
- package/dist/commands/runtime/info.js.map +1 -0
- package/dist/commands/runtime/latest.d.ts +2 -0
- package/dist/commands/runtime/latest.js +24 -0
- package/dist/commands/runtime/latest.js.map +1 -0
- package/dist/commands/runtime/portal.d.ts +2 -0
- package/dist/commands/runtime/portal.js +24 -0
- package/dist/commands/runtime/portal.js.map +1 -0
- package/dist/commands/runtime/start.d.ts +2 -0
- package/dist/commands/runtime/start.js +21 -0
- package/dist/commands/runtime/start.js.map +1 -0
- package/dist/commands/runtime/stop.d.ts +2 -0
- package/dist/commands/runtime/stop.js +18 -0
- package/dist/commands/runtime/stop.js.map +1 -0
- package/dist/commands/runtime/update.d.ts +2 -0
- package/dist/commands/runtime/update.js +17 -0
- package/dist/commands/runtime/update.js.map +1 -0
- package/dist/commands/system/index.d.ts +2 -0
- package/dist/commands/system/index.js +11 -0
- package/dist/commands/system/index.js.map +1 -0
- package/dist/commands/system/info.d.ts +2 -0
- package/dist/commands/system/info.js +28 -0
- package/dist/commands/system/info.js.map +1 -0
- package/dist/commands/system/read.d.ts +2 -0
- package/dist/commands/system/read.js +28 -0
- package/dist/commands/system/read.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/models/Codenotch.d.ts +237 -0
- package/dist/models/Codenotch.js +214 -0
- package/dist/models/Codenotch.js.map +1 -0
- package/dist/models/DbModels.d.ts +221 -0
- package/dist/models/DbModels.js +130 -0
- package/dist/models/DbModels.js.map +1 -0
- package/dist/models/OpenApiModels.d.ts +115 -0
- package/dist/models/OpenApiModels.js +103 -0
- package/dist/models/OpenApiModels.js.map +1 -0
- package/dist/utils/BuildUtils.d.ts +54 -0
- package/dist/utils/BuildUtils.js +631 -0
- package/dist/utils/BuildUtils.js.map +1 -0
- package/dist/utils/ConsoleUtils.d.ts +6 -0
- package/dist/utils/ConsoleUtils.js +24 -0
- package/dist/utils/ConsoleUtils.js.map +1 -0
- package/dist/utils/FileUtils.d.ts +14 -0
- package/dist/utils/FileUtils.js +218 -0
- package/dist/utils/FileUtils.js.map +1 -0
- package/dist/utils/GitHubAuthUtils.d.ts +11 -0
- package/dist/utils/GitHubAuthUtils.js +74 -0
- package/dist/utils/GitHubAuthUtils.js.map +1 -0
- package/dist/utils/I18nUtils.d.ts +9 -0
- package/dist/utils/I18nUtils.js +56 -0
- package/dist/utils/I18nUtils.js.map +1 -0
- package/dist/utils/OpenAPIUtils.d.ts +33 -0
- package/dist/utils/OpenAPIUtils.js +279 -0
- package/dist/utils/OpenAPIUtils.js.map +1 -0
- package/dist/utils/OsUtils.d.ts +8 -0
- package/dist/utils/OsUtils.js +33 -0
- package/dist/utils/OsUtils.js.map +1 -0
- package/dist/utils/ProjectCompilationUtils.d.ts +63 -0
- package/dist/utils/ProjectCompilationUtils.js +850 -0
- package/dist/utils/ProjectCompilationUtils.js.map +1 -0
- package/dist/utils/ProjectUtils.d.ts +15 -0
- package/dist/utils/ProjectUtils.js +115 -0
- package/dist/utils/ProjectUtils.js.map +1 -0
- package/dist/utils/RuntimeUtils.d.ts +45 -0
- package/dist/utils/RuntimeUtils.js +613 -0
- package/dist/utils/RuntimeUtils.js.map +1 -0
- package/dist/utils/ServeUtils.d.ts +10 -0
- package/dist/utils/ServeUtils.js +191 -0
- package/dist/utils/ServeUtils.js.map +1 -0
- package/dist/utils/ShellUtils.d.ts +3 -0
- package/dist/utils/ShellUtils.js +28 -0
- package/dist/utils/ShellUtils.js.map +1 -0
- package/dist/utils/StringUtils.d.ts +9 -0
- package/dist/utils/StringUtils.js +65 -0
- package/dist/utils/StringUtils.js.map +1 -0
- package/docs/ARCHITECTURE.md +179 -0
- package/docs/TODO.md +18 -0
- package/package.json +63 -0
- package/src/bin/cli.ts +4 -0
- package/src/commands/index.ts +13 -0
- package/src/commands/project/compile.ts +20 -0
- package/src/commands/project/deploy.ts +11 -0
- package/src/commands/project/index.ts +28 -0
- package/src/commands/project/inspect.ts +12 -0
- package/src/commands/project/new.ts +11 -0
- package/src/commands/project/open.ts +21 -0
- package/src/commands/project/package.ts +20 -0
- package/src/commands/project/refresh.ts +13 -0
- package/src/commands/project/remove.ts +12 -0
- package/src/commands/project/shared.ts +9 -0
- package/src/commands/project/start.ts +24 -0
- package/src/commands/project/test.ts +15 -0
- package/src/commands/react/build.ts +12 -0
- package/src/commands/react/index.ts +12 -0
- package/src/commands/react/serve.ts +13 -0
- package/src/commands/runtime/clear.ts +11 -0
- package/src/commands/runtime/index.ts +24 -0
- package/src/commands/runtime/info.ts +47 -0
- package/src/commands/runtime/latest.ts +18 -0
- package/src/commands/runtime/portal.ts +20 -0
- package/src/commands/runtime/start.ts +16 -0
- package/src/commands/runtime/stop.ts +13 -0
- package/src/commands/runtime/update.ts +12 -0
- package/src/commands/system/index.ts +9 -0
- package/src/commands/system/info.ts +23 -0
- package/src/commands/system/read.ts +25 -0
- package/src/index.ts +22 -0
- package/src/models/Codenotch.ts +361 -0
- package/src/models/DbModels.ts +428 -0
- package/src/models/OpenApiModels.ts +145 -0
- package/src/utils/BuildUtils.ts +739 -0
- package/src/utils/ConsoleUtils.ts +22 -0
- package/src/utils/FileUtils.ts +266 -0
- package/src/utils/GitHubAuthUtils.ts +83 -0
- package/src/utils/I18nUtils.ts +58 -0
- package/src/utils/OpenAPIUtils.ts +285 -0
- package/src/utils/OsUtils.ts +32 -0
- package/src/utils/ProjectCompilationUtils.ts +1002 -0
- package/src/utils/ProjectUtils.ts +151 -0
- package/src/utils/RuntimeUtils.ts +743 -0
- package/src/utils/ServeUtils.ts +175 -0
- package/src/utils/ShellUtils.ts +26 -0
- package/src/utils/StringUtils.ts +80 -0
- package/tsconfig.json +35 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const ConsoleUtils_1 = __importDefault(require("./ConsoleUtils"));
|
|
43
|
+
class ServeUtils {
|
|
44
|
+
static async serveApp(directory, options) {
|
|
45
|
+
const port = options.port || 5000;
|
|
46
|
+
const isAbsolutePath = directory && (directory.startsWith('/') || directory.match(/^[a-zA-Z]:\\/));
|
|
47
|
+
const targetDir = (0, path_1.resolve)(isAbsolutePath ? directory : (0, path_1.join)(process.cwd(), directory));
|
|
48
|
+
const indexPath = (0, path_1.resolve)(targetDir, options.index || 'index.html');
|
|
49
|
+
if (!(0, fs_1.existsSync)(targetDir)) {
|
|
50
|
+
console.log(chalk_1.default.red(`Error: Target directory not found (${targetDir})`));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
if (!(0, fs_1.existsSync)(indexPath)) {
|
|
54
|
+
console.log(chalk_1.default.red(`Error: Index file not found (${indexPath})`));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
const envVariables = this.getEnvVariables((0, path_1.resolve)(targetDir, '.env'));
|
|
58
|
+
const aumlObject = this.getAumlVariables((0, path_1.resolve)(targetDir, 'auml.json'));
|
|
59
|
+
console.log(chalk_1.default.green('Starting production server...'));
|
|
60
|
+
console.log(chalk_1.default.blue(`Server: http://localhost:${port}`));
|
|
61
|
+
console.log(chalk_1.default.yellow('Using built-in static file server with custom endpoint\n'));
|
|
62
|
+
await this.startExpressServer(targetDir, indexPath, {
|
|
63
|
+
port: port,
|
|
64
|
+
envVariables: envVariables,
|
|
65
|
+
auml: aumlObject
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
static getAumlVariables(aumlPath) {
|
|
69
|
+
if ((0, fs_1.existsSync)(aumlPath)) {
|
|
70
|
+
console.log(chalk_1.default.green(`Loaded auml variables from "${aumlPath}":`));
|
|
71
|
+
try {
|
|
72
|
+
let json = (0, fs_1.readFileSync)(aumlPath, 'utf8');
|
|
73
|
+
return JSON.parse(json);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.log(chalk_1.default.red(`Error parsing auml file: ${error}`));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(chalk_1.default.yellow(`Warning: No .auml file found. Auml variables will not be loaded.`));
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
static getEnvVariables(envPath) {
|
|
85
|
+
let envVariables = [];
|
|
86
|
+
if ((0, fs_1.existsSync)(envPath)) {
|
|
87
|
+
let envContent = (0, fs_1.readFileSync)(envPath, 'utf8');
|
|
88
|
+
envContent.split('\n').forEach(line => {
|
|
89
|
+
let [key, value] = line.split('=');
|
|
90
|
+
if (key && value) {
|
|
91
|
+
envVariables.push({ name: key.trim(), value: value.trim() });
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
console.log(chalk_1.default.green(`Loaded environment variables from "${envPath}":`));
|
|
95
|
+
envVariables.forEach(env => {
|
|
96
|
+
console.log(chalk_1.default.blue(`- ${env.name}=${env.value}`));
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(chalk_1.default.yellow(`Warning: No .env file found. Environment variables will not be loaded.`));
|
|
101
|
+
}
|
|
102
|
+
return envVariables;
|
|
103
|
+
}
|
|
104
|
+
static async startExpressServer(targetDir, indexPath, options) {
|
|
105
|
+
// Express server
|
|
106
|
+
try {
|
|
107
|
+
const express = await Promise.resolve().then(() => __importStar(require('express')));
|
|
108
|
+
const app = express.default();
|
|
109
|
+
// Serve static files
|
|
110
|
+
app.use(express.static(targetDir));
|
|
111
|
+
app.get('/api/env', (req, res) => {
|
|
112
|
+
let envData = {};
|
|
113
|
+
options.envVariables.forEach(env => {
|
|
114
|
+
envData[env.name] = env.value;
|
|
115
|
+
});
|
|
116
|
+
if (options.auml && Object.keys(options.auml).length > 0) {
|
|
117
|
+
for (let key of Object.keys(options.auml)) {
|
|
118
|
+
envData[`GLOBAL.${key}`] = JSON.stringify(options.auml[key]);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
res.json(envData);
|
|
122
|
+
});
|
|
123
|
+
// Fallback to index.html for SPA - handle all unmatched routes
|
|
124
|
+
app.use((req, res, next) => {
|
|
125
|
+
// Skip fallback for static files (images, favicons, etc.)
|
|
126
|
+
const staticFileExtensions = ['.ico', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.css', '.js', '.map', '.txt', '.xml', '.json'];
|
|
127
|
+
const hasStaticExtension = staticFileExtensions.some(ext => req.path.toLowerCase().endsWith(ext));
|
|
128
|
+
// Only serve index.html for GET requests that aren't API calls or static files
|
|
129
|
+
if (req.method === 'GET' && !req.path.startsWith('/api/') && !hasStaticExtension) {
|
|
130
|
+
console.log(chalk_1.default.gray(`Serving fallback for: ${req.path}`));
|
|
131
|
+
// Use a more robust approach for sending files with special characters
|
|
132
|
+
try {
|
|
133
|
+
res.sendFile(indexPath, {
|
|
134
|
+
maxAge: 0,
|
|
135
|
+
etag: false
|
|
136
|
+
}, (err) => {
|
|
137
|
+
if (err) {
|
|
138
|
+
console.error(chalk_1.default.red(`Error serving ${indexPath}: ${err.message}`));
|
|
139
|
+
if (!res.headersSent) {
|
|
140
|
+
res.status(404).send('Page not found');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error(chalk_1.default.red(`Catch error: ${error}`));
|
|
147
|
+
if (!res.headersSent) {
|
|
148
|
+
res.status(500).send('Internal Server Error');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// For static files that don't exist, return 404 directly
|
|
154
|
+
if (hasStaticExtension) {
|
|
155
|
+
res.status(404).send('File not found');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
next();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
const server = app.listen(options.port, () => {
|
|
163
|
+
console.log(chalk_1.default.green(`Server running on http://localhost:${options.port}`) + ConsoleUtils_1.default.proposeOpenUri('Open in browser?', `http://localhost:${options.port}`));
|
|
164
|
+
});
|
|
165
|
+
const killServer = () => {
|
|
166
|
+
console.log(chalk_1.default.yellow('\nStopping server...'));
|
|
167
|
+
// Force exit graceful shutdown takes too long
|
|
168
|
+
const forceExit = setTimeout(() => {
|
|
169
|
+
console.log(chalk_1.default.red('Force stopping server...'));
|
|
170
|
+
process.exit(0);
|
|
171
|
+
}, 500);
|
|
172
|
+
server.close(() => {
|
|
173
|
+
clearTimeout(forceExit);
|
|
174
|
+
process.exit(0);
|
|
175
|
+
});
|
|
176
|
+
// For Node.js 18.02+ - close all connections immediately
|
|
177
|
+
if (typeof server.closeAllConnections === 'function') {
|
|
178
|
+
server.closeAllConnections();
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
process.on('SIGINT', () => killServer());
|
|
182
|
+
process.on('SIGTERM', () => killServer());
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
console.log(chalk_1.default.red(`Error starting server: ${error}`));
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.default = ServeUtils;
|
|
191
|
+
//# sourceMappingURL=ServeUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServeUtils.js","sourceRoot":"","sources":["../../src/utils/ServeUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const child_process_1 = require("child_process");
|
|
4
|
+
class ShellUtils {
|
|
5
|
+
static async exec(location, command, info, silent = false) {
|
|
6
|
+
if (info)
|
|
7
|
+
console.log(info + "...");
|
|
8
|
+
await new Promise((resolve, reject) => {
|
|
9
|
+
(0, child_process_1.exec)(command, { cwd: location }, (error, stdout, stderr) => {
|
|
10
|
+
if (error) {
|
|
11
|
+
if (!silent) {
|
|
12
|
+
console.error(`Error while ${info}: ${error}`);
|
|
13
|
+
}
|
|
14
|
+
reject(error);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
if (!silent) {
|
|
18
|
+
console.log(stdout);
|
|
19
|
+
console.error(stderr);
|
|
20
|
+
}
|
|
21
|
+
resolve(null);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.default = ShellUtils;
|
|
28
|
+
//# sourceMappingURL=ShellUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellUtils.js","sourceRoot":"","sources":["../../src/utils/ShellUtils.ts"],"names":[],"mappings":";;AACA,iDAAqC;AAErC,MAA8B,UAAU;IAC7B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAa,EAAE,SAAkB,KAAK;QAE9F,IAAG,IAAI;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC9B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClC,IAAA,oBAAI,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAU,EAAE,MAAW,EAAE,MAAW,EAAE,EAAE;gBACtE,IAAI,KAAK,EAAE,CAAC;oBACR,IAAI,CAAC,MAAM,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,EAAE,CAAC;wBACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACpB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAtBD,6BAsBC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default abstract class StringUtils {
|
|
2
|
+
static firstUpper(str: string): string;
|
|
3
|
+
static toRelativePath(path: string, parentPath: string): string;
|
|
4
|
+
static getNameWithoutExtention(filename: string): string;
|
|
5
|
+
static getFilenameFromUri(uri: string): string;
|
|
6
|
+
static getFolder(path: string): string;
|
|
7
|
+
static normalizePath(path: string): string;
|
|
8
|
+
static sha256(message: string): Promise<string>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const os_1 = require("os");
|
|
4
|
+
class StringUtils {
|
|
5
|
+
static firstUpper(str) {
|
|
6
|
+
if (str.trim() === '')
|
|
7
|
+
return str;
|
|
8
|
+
return `${str[0].toUpperCase()}${str.substring(1)}`;
|
|
9
|
+
}
|
|
10
|
+
static toRelativePath(path, parentPath) {
|
|
11
|
+
path = path.replaceAll("\\", "/");
|
|
12
|
+
parentPath = parentPath.replaceAll("\\", "/");
|
|
13
|
+
path = path.replace(parentPath, '');
|
|
14
|
+
if (path.startsWith("/")) {
|
|
15
|
+
path = path.substring(1);
|
|
16
|
+
}
|
|
17
|
+
return path;
|
|
18
|
+
}
|
|
19
|
+
static getNameWithoutExtention(filename) {
|
|
20
|
+
filename = this.getFilenameFromUri(filename);
|
|
21
|
+
if (!filename.includes('.')) {
|
|
22
|
+
return filename;
|
|
23
|
+
}
|
|
24
|
+
let ind = filename.lastIndexOf('.');
|
|
25
|
+
return filename.substring(0, ind);
|
|
26
|
+
}
|
|
27
|
+
static getFilenameFromUri(uri) {
|
|
28
|
+
uri = uri.replaceAll('\\', '/');
|
|
29
|
+
return uri.includes('/') ? uri.split('/').pop() : uri;
|
|
30
|
+
}
|
|
31
|
+
static getFolder(path) {
|
|
32
|
+
path = path.replaceAll("/", "\\");
|
|
33
|
+
if (path.includes('\\') === false) {
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
path = path.substring(0, path.lastIndexOf("\\"));
|
|
37
|
+
path = this.normalizePath(path);
|
|
38
|
+
return path;
|
|
39
|
+
}
|
|
40
|
+
static normalizePath(path) {
|
|
41
|
+
if (typeof path !== 'string' || path.trim() === '') {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
if ((0, os_1.platform)() === 'win32') {
|
|
45
|
+
path = path.replaceAll("/", '\\');
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
path = path.replaceAll('\\', '/');
|
|
49
|
+
}
|
|
50
|
+
return path;
|
|
51
|
+
}
|
|
52
|
+
static async sha256(message) {
|
|
53
|
+
// encode as UTF-8
|
|
54
|
+
const msgBuffer = new TextEncoder().encode(message);
|
|
55
|
+
// hash the message
|
|
56
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
|
|
57
|
+
// convert ArrayBuffer to Array
|
|
58
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
59
|
+
// convert bytes to hex string
|
|
60
|
+
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
61
|
+
return hashHex;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.default = StringUtils;
|
|
65
|
+
//# sourceMappingURL=StringUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringUtils.js","sourceRoot":"","sources":["../../src/utils/StringUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Codenotch CLI — Architecture (agent-oriented)
|
|
2
|
+
|
|
3
|
+
> Fast-orientation map for AI agents. Optimized for finding the right file quickly, not human onboarding prose.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
`codenotch-cli` (binaries `codenotch-cli` and `cn`) is a Node.js/TypeScript command-line tool for the **Codenotch platform**. It manages a local **runtime** (downloaded from GitHub releases of `EchinoHub/service-core`), compiles/packages Codenotch projects (manifest + BPMN processes + AUML/React apps + data tables) into deployable zips, deploys them to the runtime, and builds/serves React applications embedded in projects.
|
|
8
|
+
|
|
9
|
+
## Tech stack & runtime
|
|
10
|
+
|
|
11
|
+
| Aspect | Detail |
|
|
12
|
+
|--------|--------|
|
|
13
|
+
| Language | TypeScript (`strict`), target ES2022, module CommonJS |
|
|
14
|
+
| Runtime | Node.js (>= types/node 20), needs Node on PATH |
|
|
15
|
+
| Compiler | `tsc` → `dist/` (`rootDir: src`, `outDir: dist`) |
|
|
16
|
+
| CLI framework | `commander` v12 |
|
|
17
|
+
| Build | `npm run build` (runs `prebuild` → `clean` via `rimraf`) |
|
|
18
|
+
| Dev | `npm run dev` (`tsx src/index.ts`) |
|
|
19
|
+
| Start | `npm start` (`node dist/index.js`) |
|
|
20
|
+
| Install locally | `npm run build` then `npm link` |
|
|
21
|
+
|
|
22
|
+
## Entry points & dispatch
|
|
23
|
+
|
|
24
|
+
| File | Role |
|
|
25
|
+
|------|------|
|
|
26
|
+
| [src/index.ts](src/index.ts) | **Real entry point, bootstrap only.** Loads `.env` from CLI root, creates the `commander` program (name/description/version), calls `registerAllCommands`, ends with `program.parse()`. |
|
|
27
|
+
| [src/commands/index.ts](src/commands/index.ts) | `registerAllCommands(program)`: registers each command sector in `--help` order (system → react → runtime → project). |
|
|
28
|
+
| [src/bin/cli.ts](src/bin/cli.ts) | Thin shim: `import '../index.js'`. Compiled to `dist/bin/cli.js`, the published `bin` target. |
|
|
29
|
+
| [bin/cli.js](bin/cli.js) | Source-tree shim mirroring the above (`import '../index.js'`). |
|
|
30
|
+
| `package.json` `bin` | Maps `codenotch-cli` and `cn` → `dist/bin/cli.js`. |
|
|
31
|
+
|
|
32
|
+
Flow: `cn <cmd>` → `dist/bin/cli.js` → `dist/index.js` → `registerAllCommands` → commander parses argv → matched `.action()` → delegates to a `*Utils` static method.
|
|
33
|
+
|
|
34
|
+
## Command tree (defined under [src/commands/](src/commands))
|
|
35
|
+
|
|
36
|
+
One folder per sector, one file per command. Each command file exports a `register*(parent: Command)` function; each sector's `index.ts` creates the command group and calls them.
|
|
37
|
+
|
|
38
|
+
| Command | File | Delegates to |
|
|
39
|
+
|---------|------|-------------|
|
|
40
|
+
| `info` | [system/info.ts](src/commands/system/info.ts) | inline (system info) |
|
|
41
|
+
| `read` | [system/read.ts](src/commands/system/read.ts) | inline (readline test) |
|
|
42
|
+
| `react serve [dir]` | [react/serve.ts](src/commands/react/serve.ts) | `ServeUtils.serveApp` |
|
|
43
|
+
| `react build [file]` | [react/build.ts](src/commands/react/build.ts) | `BuildUtils.buildApp` |
|
|
44
|
+
| `runtime info\|status` | [runtime/info.ts](src/commands/runtime/info.ts) | `RuntimeUtils.isRuntimeInstalled/getRuntimeVersion/...` |
|
|
45
|
+
| `runtime update\|install` | [runtime/update.ts](src/commands/runtime/update.ts) | `RuntimeUtils.installLatestRuntime` |
|
|
46
|
+
| `runtime start\|stop\|clear` | [runtime/start.ts](src/commands/runtime/start.ts), [stop.ts](src/commands/runtime/stop.ts), [clear.ts](src/commands/runtime/clear.ts) | `RuntimeUtils.startRuntime/stopRuntime/clearRuntime` |
|
|
47
|
+
| `runtime latest` | [runtime/latest.ts](src/commands/runtime/latest.ts) | `RuntimeUtils.getLatestRuntimeRelease` |
|
|
48
|
+
| `portal` (root command) | [runtime/portal.ts](src/commands/runtime/portal.ts) | `RuntimeUtils.getRuntimeBaseUrl` + `OsUtils.openInBrowser` |
|
|
49
|
+
| `project inspect` | [project/inspect.ts](src/commands/project/inspect.ts) | `ProjectUtils.inspectProject` |
|
|
50
|
+
| `project open` | [project/open.ts](src/commands/project/open.ts) | `ProjectUtils.getProjectServiceName` + browser |
|
|
51
|
+
| `project start` | [project/start.ts](src/commands/project/start.ts) | `RuntimeUtils.startProject` |
|
|
52
|
+
| `project refresh\|patch` | [project/refresh.ts](src/commands/project/refresh.ts) | `RuntimeUtils.patchProject` (TODO, stubbed) |
|
|
53
|
+
| `project test` | [project/test.ts](src/commands/project/test.ts) | `RuntimeUtils.testProject` |
|
|
54
|
+
| `project compile` | [project/compile.ts](src/commands/project/compile.ts) | `ProjectCompilationUtils.compileProject` |
|
|
55
|
+
| `project package\|build` | [project/package.ts](src/commands/project/package.ts) | `ProjectUtils.packageProject` |
|
|
56
|
+
| `project deploy [service] [zip]` | [project/deploy.ts](src/commands/project/deploy.ts) | `RuntimeUtils.deployProject` |
|
|
57
|
+
| `project new` | [project/new.ts](src/commands/project/new.ts) | TODO stub |
|
|
58
|
+
| `project remove` | [project/remove.ts](src/commands/project/remove.ts) | `RuntimeUtils.removeProject` |
|
|
59
|
+
|
|
60
|
+
Planned commands (validate, query, …) are tracked in [docs/TODO.md](docs/TODO.md).
|
|
61
|
+
|
|
62
|
+
## Layers
|
|
63
|
+
|
|
64
|
+
```mermaid
|
|
65
|
+
flowchart TD
|
|
66
|
+
Entry[src/index.ts bootstrap] --> CLI[src/commands commander wiring]
|
|
67
|
+
CLI --> Utils
|
|
68
|
+
subgraph Utils[src/utils]
|
|
69
|
+
RU[RuntimeUtils]
|
|
70
|
+
PU[ProjectUtils]
|
|
71
|
+
PCU[ProjectCompilationUtils]
|
|
72
|
+
BU[BuildUtils]
|
|
73
|
+
SU[ServeUtils]
|
|
74
|
+
end
|
|
75
|
+
Utils --> Models[src/models]
|
|
76
|
+
RU --> GH[GitHubAuthUtils]
|
|
77
|
+
PCU --> OAPI[OpenAPIUtils]
|
|
78
|
+
PCU --> I18N[I18nUtils]
|
|
79
|
+
Utils --> FU[FileUtils]
|
|
80
|
+
Utils --> Sh[ShellUtils]
|
|
81
|
+
Utils --> OS[OsUtils]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
- **Commands layer** ([src/commands/](src/commands)) — commander wiring only: one folder per sector (`system/`, `react/`, `runtime/`, `project/`), one file per command. No business logic.
|
|
85
|
+
- **Utils layer** ([src/utils/](src/utils)) — all real logic lives here as `abstract class` with `static` methods.
|
|
86
|
+
- **Models layer** ([src/models/](src/models)) — plain TS interfaces/classes describing manifests, DB tables, and OpenAPI.
|
|
87
|
+
|
|
88
|
+
## Directory map
|
|
89
|
+
|
|
90
|
+
| Path | Responsibility |
|
|
91
|
+
|------|---------------|
|
|
92
|
+
| [src/index.ts](src/index.ts) | Bootstrap: `.env`, program creation, `registerAllCommands`, `parse`. |
|
|
93
|
+
| [src/bin/cli.ts](src/bin/cli.ts) | Published bin shim → imports `index`. |
|
|
94
|
+
| [bin/cli.js](bin/cli.js) | Source-tree bin shim. |
|
|
95
|
+
| [src/commands/index.ts](src/commands/index.ts) | `registerAllCommands`: registers all sectors in `--help` order. |
|
|
96
|
+
| [src/commands/system/](src/commands/system) | Root-level misc commands: `info`, `read`. |
|
|
97
|
+
| [src/commands/react/](src/commands/react) | `react` group: `build`, `serve`. |
|
|
98
|
+
| [src/commands/runtime/](src/commands/runtime) | `runtime` group: `info`, `update`, `start`, `stop`, `clear`, `latest` + root `portal`. |
|
|
99
|
+
| [src/commands/project/](src/commands/project) | `project` group: `inspect`, `open`, `start`, `refresh`, `test`, `compile`, `package`, `deploy`, `new`, `remove`. |
|
|
100
|
+
| [src/commands/project/shared.ts](src/commands/project/shared.ts) | `withProjectPathOption` helper + `IProjectCommandOptions` (shared `-p, --project-path`). |
|
|
101
|
+
| [src/utils/RuntimeUtils.ts](src/utils/RuntimeUtils.ts) | Install/update/start/stop/clear runtime; meta (`runtime.json`/`runtime.pid`) in `~/.codenotch` (or `CODENOTCH_PATH`); start/test/deploy/remove projects; admin token. |
|
|
102
|
+
| [src/utils/ProjectUtils.ts](src/utils/ProjectUtils.ts) | `packageProject` (copy→compile→zip in tmp), `getManifest`, `getProjectServiceName`, `inspectProject`. Reads `manifest.json`. |
|
|
103
|
+
| [src/utils/ProjectCompilationUtils.ts](src/utils/ProjectCompilationUtils.ts) | Core compiler: generate `ProjectManifest`, DB schema XML, OpenAPI; parse BPMN via `@echino/codenotch.core.workflow`; **in-place** file mutation. |
|
|
104
|
+
| [src/utils/BuildUtils.ts](src/utils/BuildUtils.ts) | `cn react build`: finds workspace manifest, scaffolds Vite/TS/index for a React app, fetches tenant/env vars, builds. |
|
|
105
|
+
| [src/utils/ServeUtils.ts](src/utils/ServeUtils.ts) | `cn react serve`: Express static server with SPA fallback; reads AUML/env variables. |
|
|
106
|
+
| [src/utils/OpenAPIUtils.ts](src/utils/OpenAPIUtils.ts) | Generate OpenAPI 3.0 spec from compiled processes/variables. |
|
|
107
|
+
| [src/utils/I18nUtils.ts](src/utils/I18nUtils.ts) | Parse `*.i18n.csv` files (papaparse) and merge translations by key. |
|
|
108
|
+
| [src/utils/GitHubAuthUtils.ts](src/utils/GitHubAuthUtils.ts) | GitHub OAuth device flow (`@octokit/auth-oauth-device`); token cached in OS keychain (`cross-keychain`); honors `GITHUB_TOKEN`. |
|
|
109
|
+
| [src/utils/FileUtils.ts](src/utils/FileUtils.ts) | Filesystem helpers: zip (`adm-zip`), copy/move/delete folders, recursive file listing, path normalize. |
|
|
110
|
+
| [src/utils/ShellUtils.ts](src/utils/ShellUtils.ts) | `exec(location, command)` wrapper around `child_process.exec`. |
|
|
111
|
+
| [src/utils/OsUtils.ts](src/utils/OsUtils.ts) | OS abstraction: `openInBrowser` (platform-specific). |
|
|
112
|
+
| [src/utils/ConsoleUtils.ts](src/utils/ConsoleUtils.ts) | Chalk-styled console helpers (`check`, `checkWarning`, `proposeCommand`, `proposeOpenUri`). |
|
|
113
|
+
| [src/utils/StringUtils.ts](src/utils/StringUtils.ts) | String/path helpers: `firstUpper`, `toRelativePath`, `normalizePath`, `getNameWithoutExtention`. |
|
|
114
|
+
| [src/models/Codenotch.ts](src/models/Codenotch.ts) | `ProjectManifest` + sub-types (apis, applications, react apps, processes, datastores, roles…), `IScenarioProjectManifest`, `ApplicationManifest`/PWA/AUML, `IWorkspaceCache`, `ProjectState`. |
|
|
115
|
+
| [src/models/DbModels.ts](src/models/DbModels.ts) | `TableDefinition`, `FieldTypes` enum, field/relation interfaces → used to emit DB schema XML. |
|
|
116
|
+
| [src/models/OpenApiModels.ts](src/models/OpenApiModels.ts) | `OpenAPISpec` (OpenAPI 3.0), `APIInfo`, parameter/response interfaces. |
|
|
117
|
+
|
|
118
|
+
## Key flows
|
|
119
|
+
|
|
120
|
+
### CLI command → execution
|
|
121
|
+
1. `cn project package` → commander matches in [src/commands/project/package.ts](src/commands/project/package.ts).
|
|
122
|
+
2. `.action()` reads `--project-path` (default `process.cwd()`) and `--output-path`.
|
|
123
|
+
3. Calls `ProjectUtils.packageProject(projectPath, outputPath)`.
|
|
124
|
+
|
|
125
|
+
### Package a project ([ProjectUtils.packageProject](src/utils/ProjectUtils.ts))
|
|
126
|
+
`mkdtemp` → `FileUtils.copyFolder` (excludes `.git/node_modules/dist/build/out`) → `ProjectCompilationUtils.compileProject` (in-place on the copy) → `FileUtils.zipFolder` → cleanup tmp. Returns `CompilationResult { errors, warnings }`.
|
|
127
|
+
|
|
128
|
+
### Compile ([ProjectCompilationUtils.compileProject](src/utils/ProjectCompilationUtils.ts))
|
|
129
|
+
Builds `CompilationContext` → `generateManifest` (scans files, parses BPMN via `@echino/codenotch.core.workflow`) → `OpenApiUtils.generateOpenApi` → `generateDbSchema` (XML via `js2xmlparser` from `DbModels`). Writes `manifest.json`, `openapi.json`, `dbschema.xml`.
|
|
130
|
+
|
|
131
|
+
### Runtime lifecycle ([RuntimeUtils](src/utils/RuntimeUtils.ts))
|
|
132
|
+
Install dir = `CODENOTCH_PATH` or `~/.codenotch`. `installLatestRuntime` authenticates via `GitHubAuthUtils.getToken`, downloads release asset, decompresses (`decompress`). State tracked in `runtime.pid` + `runtime.json`. `startRuntime` spawns the executable; project ops talk to it over HTTP (`getRuntimeBaseUrl`, default `http://127.0.0.1:5005`).
|
|
133
|
+
|
|
134
|
+
## Conventions & patterns
|
|
135
|
+
|
|
136
|
+
- **Static utility classes**: every util is `export default abstract class XxxUtils` (or named export) with only `static` methods. No instances, no DI.
|
|
137
|
+
- **Command → Util delegation**: command files ([src/commands/](src/commands)) stay thin; logic lives in utils.
|
|
138
|
+
- **Command registration**: each command file exports `register<Name>(parent: Command)`; each sector `index.ts` exports `register<Sector>Commands(program)`; file names are lowercase and mirror the command name (`runtime/start.ts` ↔ `cn runtime start`).
|
|
139
|
+
- **Project path option**: shared via `withProjectPathOption(command)` helper ([src/commands/project/shared.ts](src/commands/project/shared.ts)); defaults to `process.cwd()`.
|
|
140
|
+
- **Error handling**: user-facing failures print `chalk.red(...)` then `process.exit(1)`; deeper code throws `Error` with wrapped messages.
|
|
141
|
+
- **Output styling**: `chalk` everywhere; structured helpers in `ConsoleUtils`. Many commands support `--json` for machine output.
|
|
142
|
+
- **i18n**: CSV-based (`*.i18n.csv`) parsed by `I18nUtils`; embedded into compiled AUML output.
|
|
143
|
+
- **OS/shell abstraction**: `OsUtils` (browser/platform), `ShellUtils` (exec), `FileUtils`/`StringUtils` (paths, normalized with `FileUtils.slash()`).
|
|
144
|
+
- **Config**: `.env` loaded from CLI root in `index.ts` (`dotenv`). Key vars: `CODENOTCH_PATH`, `GITHUB_TOKEN`.
|
|
145
|
+
- **TODOs**: several commands are stubbed (`project new`, `project refresh/patch`); planned commands are listed in [docs/TODO.md](docs/TODO.md).
|
|
146
|
+
|
|
147
|
+
## External integrations
|
|
148
|
+
|
|
149
|
+
| Dependency | Used for | Where |
|
|
150
|
+
|-----------|----------|-------|
|
|
151
|
+
| `commander` | CLI parsing/dispatch | [src/index.ts](src/index.ts), [src/commands/](src/commands) |
|
|
152
|
+
| `@octokit/auth-oauth-device` + `cross-keychain` | GitHub device-flow auth, token in OS keychain | [src/utils/GitHubAuthUtils.ts](src/utils/GitHubAuthUtils.ts) |
|
|
153
|
+
| `@echino/codenotch.core.workflow` | BPMN → workflow model parsing | [src/utils/ProjectCompilationUtils.ts](src/utils/ProjectCompilationUtils.ts) |
|
|
154
|
+
| `express` | Static/SPA dev server | [src/utils/ServeUtils.ts](src/utils/ServeUtils.ts) |
|
|
155
|
+
| `adm-zip` | Zip project package | [src/utils/FileUtils.ts](src/utils/FileUtils.ts) |
|
|
156
|
+
| `decompress` | Extract downloaded runtime | [src/utils/RuntimeUtils.ts](src/utils/RuntimeUtils.ts) |
|
|
157
|
+
| `node-fetch` / global `fetch` | HTTP to GitHub & runtime | RuntimeUtils, BuildUtils, GitHubAuthUtils |
|
|
158
|
+
| `js2xmlparser` | DB schema XML emit | [src/utils/ProjectCompilationUtils.ts](src/utils/ProjectCompilationUtils.ts) |
|
|
159
|
+
| `papaparse` | Parse i18n CSV | [src/utils/I18nUtils.ts](src/utils/I18nUtils.ts) |
|
|
160
|
+
| `chalk` | Colored output | everywhere |
|
|
161
|
+
| `fs-extra` | Extended FS ops | [src/utils/BuildUtils.ts](src/utils/BuildUtils.ts) |
|
|
162
|
+
| `dotenv` | Load `.env` | [src/index.ts](src/index.ts) |
|
|
163
|
+
|
|
164
|
+
## "Where to look" index
|
|
165
|
+
|
|
166
|
+
| Task | Start here |
|
|
167
|
+
|------|-----------|
|
|
168
|
+
| Add/modify a CLI command or option | [src/commands/](src/commands) — folder = sector, file = command; new sector → register it in [src/commands/index.ts](src/commands/index.ts) |
|
|
169
|
+
| Planned/upcoming commands | [docs/TODO.md](docs/TODO.md) |
|
|
170
|
+
| Change runtime install/start/stop/deploy | [src/utils/RuntimeUtils.ts](src/utils/RuntimeUtils.ts) |
|
|
171
|
+
| Change how projects are compiled/packaged | [src/utils/ProjectCompilationUtils.ts](src/utils/ProjectCompilationUtils.ts), [src/utils/ProjectUtils.ts](src/utils/ProjectUtils.ts) |
|
|
172
|
+
| OpenAPI generation | [src/utils/OpenAPIUtils.ts](src/utils/OpenAPIUtils.ts), [src/models/OpenApiModels.ts](src/models/OpenApiModels.ts) |
|
|
173
|
+
| DB schema / table types | [src/utils/ProjectCompilationUtils.ts](src/utils/ProjectCompilationUtils.ts), [src/models/DbModels.ts](src/models/DbModels.ts) |
|
|
174
|
+
| React app build/serve | [src/utils/BuildUtils.ts](src/utils/BuildUtils.ts), [src/utils/ServeUtils.ts](src/utils/ServeUtils.ts) |
|
|
175
|
+
| GitHub auth issues | [src/utils/GitHubAuthUtils.ts](src/utils/GitHubAuthUtils.ts) |
|
|
176
|
+
| Manifest shape / project model | [src/models/Codenotch.ts](src/models/Codenotch.ts) |
|
|
177
|
+
| i18n CSV handling | [src/utils/I18nUtils.ts](src/utils/I18nUtils.ts) |
|
|
178
|
+
| File/zip/path helpers | [src/utils/FileUtils.ts](src/utils/FileUtils.ts), [src/utils/StringUtils.ts](src/utils/StringUtils.ts) |
|
|
179
|
+
| Build/dev/start scripts | `package.json` `scripts` |
|
package/docs/TODO.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# TODO — upcoming commands
|
|
2
|
+
|
|
3
|
+
- validate bpmn
|
|
4
|
+
- validate .table
|
|
5
|
+
- validate .jschema
|
|
6
|
+
- validate manifest.json
|
|
7
|
+
- validate i18n
|
|
8
|
+
- validate full projet
|
|
9
|
+
- generate manifest.cache.json
|
|
10
|
+
- query table (sioql on local cluster)
|
|
11
|
+
- query document (sioql on local cluster)
|
|
12
|
+
- **get npmrc token ? (until codenotch-react fully public )
|
|
13
|
+
- auto generate bpmn diagram
|
|
14
|
+
- generate db schema
|
|
15
|
+
- compile :
|
|
16
|
+
- generate db schema
|
|
17
|
+
- auto generate bpmn diagram
|
|
18
|
+
- generate manifest.cache.json
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@codenotch/codenotch.cli",
|
|
3
|
+
"version": "1.0.33",
|
|
4
|
+
"description": "A CLI tool for code management",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"codenotch-cli": "./dist/bin/cli.js",
|
|
8
|
+
"cn": "./dist/bin/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsx src/index.ts",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"clean": "rimraf dist",
|
|
15
|
+
"prebuild": "npm run clean",
|
|
16
|
+
"prepare": "npm run build",
|
|
17
|
+
"pack:check": "npm pack --dry-run",
|
|
18
|
+
"release": "npm run build && npm run pack:check && npm publish"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"cli",
|
|
22
|
+
"tool",
|
|
23
|
+
"code"
|
|
24
|
+
],
|
|
25
|
+
"author": "Codenotch SA",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/EchinoHub/codenotch-cli.git"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@codenotch/codenotch.core": "1.0.2",
|
|
36
|
+
"@codenotch/codenotch.core.workflow": "1.0.3",
|
|
37
|
+
"@octokit/auth-oauth-device": "^8.0.3",
|
|
38
|
+
"@types/express": "^5.0.6",
|
|
39
|
+
"adm-zip": "^0.5.17",
|
|
40
|
+
"chalk": "^5.3.0",
|
|
41
|
+
"commander": "^12.0.0",
|
|
42
|
+
"cross-keychain": "^1.1.0",
|
|
43
|
+
"decompress": "^4.2.1",
|
|
44
|
+
"dotenv": "^17.4.2",
|
|
45
|
+
"express": "^5.2.1",
|
|
46
|
+
"fs-extra": "^10.0.0",
|
|
47
|
+
"js2xmlparser": "^5.0.0",
|
|
48
|
+
"node-fetch": "^3.3.2",
|
|
49
|
+
"papaparse": "^5.3.1"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/adm-zip": "^0.5.8",
|
|
53
|
+
"@types/decompress": "^4.2.7",
|
|
54
|
+
"@types/fs-extra": "^9.0.13",
|
|
55
|
+
"@types/json-schema": "^7.0.6",
|
|
56
|
+
"@types/node": "^20.19.34",
|
|
57
|
+
"@types/papaparse": "^5.3.1",
|
|
58
|
+
"rimraf": "^5.0.0",
|
|
59
|
+
"ts-node": "^10.9.2",
|
|
60
|
+
"tsx": "^4.21.0",
|
|
61
|
+
"typescript": "^5.9.3"
|
|
62
|
+
}
|
|
63
|
+
}
|
package/src/bin/cli.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { registerSystemCommands } from './system';
|
|
3
|
+
import { registerReactCommands } from './react';
|
|
4
|
+
import { registerRuntimeCommands } from './runtime';
|
|
5
|
+
import { registerProjectCommands } from './project';
|
|
6
|
+
|
|
7
|
+
// Registration order defines the order in `--help`
|
|
8
|
+
export function registerAllCommands(program: Command) {
|
|
9
|
+
registerSystemCommands(program);
|
|
10
|
+
registerReactCommands(program);
|
|
11
|
+
registerRuntimeCommands(program);
|
|
12
|
+
registerProjectCommands(program);
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ProjectCompilationUtils from '../../utils/ProjectCompilationUtils';
|
|
4
|
+
import { IProjectCommandOptions, withProjectPathOption } from './shared';
|
|
5
|
+
|
|
6
|
+
export function registerCompile(project: Command) {
|
|
7
|
+
withProjectPathOption(project
|
|
8
|
+
.command('compile')
|
|
9
|
+
.description('Compile the project, modify the source files in-place'))
|
|
10
|
+
.action(async (options: IProjectCommandOptions) => {
|
|
11
|
+
const compilation = await ProjectCompilationUtils.compileProject(options.projectPath);
|
|
12
|
+
if (compilation.errors.length > 0) {
|
|
13
|
+
console.error(chalk.red("Compilation failed with errors:"));
|
|
14
|
+
compilation.errors.forEach(err => console.error(chalk.red(`- ${err}`)));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log(chalk.green(`Project compiled successfully`));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import RuntimeUtils from '../../utils/RuntimeUtils';
|
|
3
|
+
|
|
4
|
+
export function registerDeploy(project: Command) {
|
|
5
|
+
project
|
|
6
|
+
.command('deploy [service] [zip]')
|
|
7
|
+
.description('Deploy the project package to the runtime')
|
|
8
|
+
.action(async (service: string, zip: string) => {
|
|
9
|
+
await RuntimeUtils.deployProject(service, zip);
|
|
10
|
+
});
|
|
11
|
+
}
|