@qodalis/cli-core 0.0.6 → 0.0.8

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.
@@ -0,0 +1,134 @@
1
+ import { CliForegroundColor } from '../models';
2
+ export class ObjectDescriber {
3
+ static describe(obj, options) {
4
+ const { filter } = options || {};
5
+ const processors = [];
6
+ const keys = Object.keys(obj);
7
+ const functions = keys.filter((key) => typeof obj[key] === 'function');
8
+ for (const func of functions) {
9
+ const funcValue = obj[func];
10
+ const args = this.getFunctionArguments(funcValue);
11
+ if (filter) {
12
+ const shouldInclude = filter({
13
+ funcName: func,
14
+ func: funcValue,
15
+ args,
16
+ });
17
+ if (!shouldInclude) {
18
+ continue;
19
+ }
20
+ }
21
+ const supportsMultipleArgs = args.length > 1;
22
+ const supportsDynamicArgs = this.supportsDynamicArgs(funcValue);
23
+ if (args.length === 0 && !supportsDynamicArgs) {
24
+ continue;
25
+ }
26
+ if (args.length > 0 &&
27
+ args.some((arg) => arg === 'function' || arg === 'func')) {
28
+ continue;
29
+ }
30
+ const processor = {
31
+ command: func,
32
+ description: `A command that executes the function ${func} with the provided arguments`,
33
+ allowUnlistedCommands: true,
34
+ valueRequired: true,
35
+ parameters: [
36
+ {
37
+ name: 'debug',
38
+ description: 'Debug',
39
+ type: 'boolean',
40
+ required: false,
41
+ },
42
+ ],
43
+ processCommand: async (command, context) => {
44
+ const debug = command.args['debug'];
45
+ if (debug) {
46
+ context.writer.writeln('Executing command: ' + func);
47
+ context.writer.writeln('Arguments: ' + JSON.stringify(command.args));
48
+ context.writer.writeln('Function: ' + funcValue.toString());
49
+ }
50
+ const argsToCallF = [];
51
+ if (supportsMultipleArgs) {
52
+ for (const arg of args.slice(1)) {
53
+ argsToCallF.push(command.args[arg]);
54
+ }
55
+ }
56
+ if (supportsDynamicArgs) {
57
+ const delimiter = command.args['delimiter'] || ',';
58
+ argsToCallF.push(...command.value.split(delimiter));
59
+ }
60
+ if (debug) {
61
+ context.writer.writeln('Arguments after processing: ' +
62
+ JSON.stringify(argsToCallF));
63
+ }
64
+ const result = supportsDynamicArgs && args.length === 0
65
+ ? funcValue(...argsToCallF)
66
+ : funcValue(command.value, ...argsToCallF);
67
+ context.writer.write(context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow));
68
+ if (result === null) {
69
+ context.writer.writeln('null');
70
+ }
71
+ else if (result === undefined) {
72
+ context.writer.writeln('undefined');
73
+ }
74
+ else if (typeof result === 'boolean') {
75
+ context.writer.writeln(result.toString());
76
+ }
77
+ else if (typeof result === 'number') {
78
+ context.writer.writeln(result.toString());
79
+ }
80
+ else if (Array.isArray(result)) {
81
+ context.writer.writeJson(result);
82
+ }
83
+ else if (typeof result === 'string') {
84
+ context.writer.writeln(result);
85
+ }
86
+ else if (typeof result === 'object') {
87
+ context.writer.writeJson(result);
88
+ }
89
+ else {
90
+ context.writer.writeln(result?.toString());
91
+ }
92
+ context.process.output(result?.toString());
93
+ },
94
+ writeDescription: (context) => {
95
+ context.writer.writeln(func);
96
+ },
97
+ };
98
+ if (supportsDynamicArgs) {
99
+ processor.parameters?.push({
100
+ name: 'delimiter',
101
+ description: 'Delimiter',
102
+ type: 'string',
103
+ required: false,
104
+ });
105
+ }
106
+ if (supportsMultipleArgs) {
107
+ processor.parameters?.push(...args.slice(1).map((arg) => ({
108
+ name: arg,
109
+ description: arg,
110
+ type: 'string',
111
+ required: false,
112
+ })));
113
+ }
114
+ processors.push(processor);
115
+ }
116
+ return processors;
117
+ }
118
+ static supportsDynamicArgs(func) {
119
+ const funcStr = func.toString();
120
+ return funcStr.includes('arguments');
121
+ }
122
+ static getFunctionArguments(func) {
123
+ const funcStr = func.toString();
124
+ const args = funcStr.match(/\(([^)]*)\)/);
125
+ if (!args) {
126
+ return [];
127
+ }
128
+ return args[1]
129
+ .split(',')
130
+ .map((arg) => arg.trim())
131
+ .filter((arg) => arg !== '');
132
+ }
133
+ }
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlc2NyaWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi91dGlscy9vYmplY3QtZGVzY3JpYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSxXQUFXLENBQUM7QUFFbEUsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLFFBQVEsQ0FDWCxHQUFRLEVBQ1IsT0FNQztRQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRWpDLE1BQU0sVUFBVSxHQUEyQixFQUFFLENBQUM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUV2RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRTtZQUMxQixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxELElBQUksTUFBTSxFQUFFO2dCQUNSLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztvQkFDekIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSTtpQkFDUCxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDaEIsU0FBUztpQkFDWjthQUNKO1lBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUU3QyxNQUFNLG1CQUFtQixHQUFHLElB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LENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDbGlDb21tYW5kUHJvY2Vzc29yLCBJQ2xpRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ2xpRm9yZWdyb3VuZENvbG9yLCBDbGlQcm9jZXNzQ29tbWFuZCB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBPYmplY3REZXNjcmliZXIge1xuICAgIHN0YXRpYyBkZXNjcmliZShcbiAgICAgICAgb2JqOiBhbnksXG4gICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgICBmaWx0ZXI/OiAobzoge1xuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgZnVuYzogYW55O1xuICAgICAgICAgICAgICAgIGFyZ3M6IHN0cmluZ1tdO1xuICAgICAgICAgICAgfSkgPT4gYm9vbGVhbjtcbiAgICAgICAgfSxcbiAgICApOiBJQ2xpQ29tbWFuZFByb2Nlc3NvcltdIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXIgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgY29uc3QgcHJvY2Vzc29yczogSUNsaUNvbW1hbmRQcm9jZXNzb3JbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gICAgICAgIGNvbnN0IGZ1bmN0aW9ucyA9IGtleXMuZmlsdGVyKChrZXkpID0+IHR5cGVvZiBvYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBmdW5jIG9mIGZ1bmN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZnVuY1ZhbHVlID0gb2JqW2Z1bmNdO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuZ2V0RnVuY3Rpb25Bcmd1bWVudHMoZnVuY1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZEluY2x1ZGUgPSBmaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jTmFtZTogZnVuYyxcbiAgICAgICAgICAgICAgICAgICAgZnVuYzogZnVuY1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzaG91bGRJbmNsdWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydHNNdWx0aXBsZUFyZ3MgPSBhcmdzLmxlbmd0aCA+IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzRHluYW1pY0FyZ3MgPSB0aGlzLnN1cHBvcnRzRHluYW1pY0FyZ3MoZnVuY1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFzdXBwb3J0c0R5bmFtaWNBcmdzKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBhcmdzLnNvbWUoKGFyZykgPT4gYXJnID09PSAnZnVuY3Rpb24nIHx8IGFyZyA9PT0gJ2Z1bmMnKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvcjogSUNsaUNvbW1hbmRQcm9jZXNzb3IgPSB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogZnVuYyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYEEgY29tbWFuZCB0aGF0IGV4ZWN1dGVzIHRoZSBmdW5jdGlvbiAke2Z1bmN9IHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50c2AsXG4gICAgICAgICAgICAgICAgYWxsb3dVbmxpc3RlZENvbW1hbmRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGVidWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZWJ1ZycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWFuZDogYXN5bmMgKFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnID0gY29tbWFuZC5hcmdzWydkZWJ1ZyddIGFzIGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKCdFeGVjdXRpbmcgY29tbWFuZDogJyArIGZ1bmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzOiAnICsgSlNPTi5zdHJpbmdpZnkoY29tbWFuZC5hcmdzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGdW5jdGlvbjogJyArIGZ1bmNWYWx1ZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3NUb0NhbGxGOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c011bHRpcGxlQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgYXJncy5zbGljZSgxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NUb0NhbGxGLnB1c2goY29tbWFuZC5hcmdzW2FyZ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzRHluYW1pY0FyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGltaXRlciA9IGNvbW1hbmQuYXJnc1snZGVsaW1pdGVyJ10gfHwgJywnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1RvQ2FsbEYucHVzaCguLi5jb21tYW5kLnZhbHVlIS5zcGxpdChkZWxpbWl0ZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzIGFmdGVyIHByb2Nlc3Npbmc6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhcmdzVG9DYWxsRiksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzRHluYW1pY0FyZ3MgJiYgYXJncy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZ1bmNWYWx1ZSguLi5hcmdzVG9DYWxsRilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZ1bmNWYWx1ZShjb21tYW5kLnZhbHVlLCAuLi5hcmdzVG9DYWxsRik7XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cmFwSW5Db2xvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzdWx0OiAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3csXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oJ251bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbigndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKHJlc3VsdC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihyZXN1bHQudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUpzb24ocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUpzb24ocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4ocmVzdWx0Py50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2Vzcy5vdXRwdXQocmVzdWx0Py50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHdyaXRlRGVzY3JpcHRpb246IChjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKGZ1bmMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNEeW5hbWljQXJncykge1xuICAgICAgICAgICAgICAgIHByb2Nlc3Nvci5wYXJhbWV0ZXJzPy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2RlbGltaXRlcicsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVsaW1pdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1cHBvcnRzTXVsdGlwbGVBcmdzKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc29yLnBhcmFtZXRlcnM/LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIC4uLmFyZ3Muc2xpY2UoMSkubWFwKChhcmcpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhcmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzb3JzLnB1c2gocHJvY2Vzc29yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9jZXNzb3JzO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdXBwb3J0c0R5bmFtaWNBcmdzKGZ1bmM6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmdW5jU3RyID0gZnVuYy50b1N0cmluZygpO1xuICAgICAgICByZXR1cm4gZnVuY1N0ci5pbmNsdWRlcygnYXJndW1lbnRzJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZ1bmN0aW9uQXJndW1lbnRzKGZ1bmM6IGFueSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgZnVuY1N0ciA9IGZ1bmMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgYXJncyA9IGZ1bmNTdHIubWF0Y2goL1xcKChbXildKilcXCkvKTtcbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3NbMV1cbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChhcmc6IHN0cmluZykgPT4gYXJnLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGFyZzogc3RyaW5nKSA9PiBhcmcgIT09ICcnKTtcbiAgICB9XG59XG4iXX0=
@@ -6,4 +6,5 @@ export * from './lib/interfaces';
6
6
  export * from './lib/modules';
7
7
  export * from './lib/utils';
8
8
  export * from './lib/constants';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLGNBQWMsZUFBZSxDQUFDO0FBRTlCLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNvcmVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbiJdfQ==
9
+ export * from './lib/types';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLGNBQWMsZUFBZSxDQUFDO0FBRTlCLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGNBQWMsaUJBQWlCLENBQUM7QUFFaEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNvcmVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uc3RhbnRzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuIl19
@@ -21,6 +21,142 @@ var CliBackgroundColor;
21
21
  CliBackgroundColor["Cyan"] = "\u001B[46m";
22
22
  CliBackgroundColor["White"] = "\u001B[47m";
23
23
  })(CliBackgroundColor || (CliBackgroundColor = {}));
24
+ var CliIcon;
25
+ (function (CliIcon) {
26
+ // General Symbols
27
+ CliIcon["CheckIcon"] = "\u2714";
28
+ CliIcon["CrossIcon"] = "\u2718";
29
+ CliIcon["InfoIcon"] = "\u2139";
30
+ CliIcon["WarningIcon"] = "\u26A0";
31
+ CliIcon["QuestionMark"] = "?";
32
+ CliIcon["Exclamation"] = "\u2757";
33
+ CliIcon["Ellipsis"] = "\u2026";
34
+ CliIcon["Dot"] = "\u2022";
35
+ CliIcon["Bullet"] = "\u2023";
36
+ // Arrows
37
+ CliIcon["ArrowRight"] = "\u2192";
38
+ CliIcon["ArrowLeft"] = "\u2190";
39
+ CliIcon["ArrowUp"] = "\u2191";
40
+ CliIcon["ArrowDown"] = "\u2193";
41
+ CliIcon["ArrowRightFilled"] = "\u25B6";
42
+ CliIcon["ArrowLeftFilled"] = "\u25C0";
43
+ CliIcon["ArrowUpFilled"] = "\u25B2";
44
+ CliIcon["ArrowDownFilled"] = "\u25BC";
45
+ CliIcon["DoubleArrowRight"] = "\u00BB";
46
+ CliIcon["DoubleArrowLeft"] = "\u00AB";
47
+ // Lists and Progress
48
+ CliIcon["Star"] = "\u2605";
49
+ CliIcon["StarEmpty"] = "\u2606";
50
+ CliIcon["Plus"] = "+";
51
+ CliIcon["Minus"] = "-";
52
+ CliIcon["Progress"] = "\u23F3";
53
+ CliIcon["Success"] = "\u2705";
54
+ CliIcon["Failure"] = "\u274C";
55
+ // Time and Calendar
56
+ CliIcon["Clock"] = "\u23F0";
57
+ CliIcon["Timer"] = "\u23F1";
58
+ CliIcon["Alarm"] = "\uD83D\uDD14";
59
+ CliIcon["Calendar"] = "\uD83D\uDCC5";
60
+ // Navigation and Folders
61
+ CliIcon["Folder"] = "\uD83D\uDCC1";
62
+ CliIcon["FolderOpen"] = "\uD83D\uDCC2";
63
+ CliIcon["File"] = "\uD83D\uDCC4";
64
+ CliIcon["Archive"] = "\uD83D\uDDC3";
65
+ CliIcon["Link"] = "\uD83D\uDD17";
66
+ CliIcon["Chain"] = "\u26D3";
67
+ CliIcon["Bookmark"] = "\uD83D\uDD16";
68
+ // Actions
69
+ CliIcon["Edit"] = "\u270F";
70
+ CliIcon["Trash"] = "\uD83D\uDDD1";
71
+ CliIcon["Add"] = "\u2795";
72
+ CliIcon["Remove"] = "\u2796";
73
+ CliIcon["Reload"] = "\uD83D\uDD04";
74
+ CliIcon["Save"] = "\uD83D\uDCBE";
75
+ CliIcon["Undo"] = "\u21A9";
76
+ CliIcon["Redo"] = "\u21AA";
77
+ CliIcon["Play"] = "\u25B6";
78
+ CliIcon["Pause"] = "\u23F8";
79
+ CliIcon["Stop"] = "\u23F9";
80
+ CliIcon["Cancel"] = "\u274E";
81
+ // User and Security
82
+ CliIcon["User"] = "\uD83D\uDC64";
83
+ CliIcon["Group"] = "\uD83D\uDC65";
84
+ CliIcon["Lock"] = "\uD83D\uDD12";
85
+ CliIcon["Unlock"] = "\uD83D\uDD13";
86
+ CliIcon["Help"] = "\u2753";
87
+ CliIcon["Key"] = "\uD83D\uDD11";
88
+ CliIcon["Shield"] = "\uD83D\uDEE1";
89
+ // Tools and Settings
90
+ CliIcon["Gear"] = "\u2699";
91
+ CliIcon["Settings"] = "\u2699\uFE0F";
92
+ CliIcon["Theme"] = "\uD83C\uDFA8";
93
+ CliIcon["Light"] = "\uD83D\uDCA1";
94
+ CliIcon["Bug"] = "\uD83D\uDC1E";
95
+ CliIcon["Wrench"] = "\uD83D\uDD27";
96
+ CliIcon["Hammer"] = "\uD83D\uDD28";
97
+ // Technology and Devices
98
+ CliIcon["Terminal"] = "\uD83D\uDCBB";
99
+ CliIcon["Database"] = "\uD83D\uDDC4";
100
+ CliIcon["Server"] = "\uD83D\uDDA5";
101
+ CliIcon["Cloud"] = "\u2601";
102
+ CliIcon["Network"] = "\uD83C\uDF10";
103
+ CliIcon["Monitor"] = "\uD83D\uDDA5";
104
+ CliIcon["Printer"] = "\uD83D\uDDA8";
105
+ CliIcon["USB"] = "\uD83D\uDD0C";
106
+ CliIcon["Speaker"] = "\uD83D\uDD0A";
107
+ CliIcon["Microphone"] = "\uD83C\uDF99";
108
+ CliIcon["Camera"] = "\uD83D\uDCF7";
109
+ CliIcon["Video"] = "\uD83C\uDFA5";
110
+ CliIcon["Music"] = "\uD83C\uDFB5";
111
+ CliIcon["Phone"] = "\uD83D\uDCDE";
112
+ // Development and Evaluation
113
+ CliIcon["Package"] = "\uD83D\uDCE6";
114
+ CliIcon["Plugin"] = "\uD83D\uDD0C";
115
+ CliIcon["Extension"] = "\uD83E\uDDE9";
116
+ CliIcon["Module"] = "\uD83D\uDCE6";
117
+ CliIcon["Evaluate"] = "\uD83D\uDD0D";
118
+ CliIcon["Variable"] = "\uD83D\uDD27";
119
+ CliIcon["Script"] = "\uD83D\uDCDC";
120
+ CliIcon["Code"] = "\uD83D\uDCBE";
121
+ // Status and Completion
122
+ CliIcon["Logs"] = "\uD83D\uDCDC";
123
+ CliIcon["Power"] = "\u23FB";
124
+ CliIcon["Heart"] = "\u2764";
125
+ CliIcon["Flame"] = "\uD83D\uDD25";
126
+ CliIcon["Growth"] = "\uD83D\uDCC8";
127
+ CliIcon["Decline"] = "\uD83D\uDCC9";
128
+ CliIcon["WarningFilled"] = "\u26A0\uFE0F";
129
+ // Nature and Weather
130
+ CliIcon["Sun"] = "\u2600";
131
+ CliIcon["Moon"] = "\uD83C\uDF19";
132
+ CliIcon["Rain"] = "\uD83C\uDF27";
133
+ CliIcon["Snow"] = "\u2744";
134
+ CliIcon["Lightning"] = "\u26A1";
135
+ CliIcon["Tree"] = "\uD83C\uDF32";
136
+ // Emotions and Expressions
137
+ CliIcon["Smile"] = "\uD83D\uDE0A";
138
+ CliIcon["Sad"] = "\uD83D\uDE22";
139
+ CliIcon["Angry"] = "\uD83D\uDE21";
140
+ CliIcon["Clap"] = "\uD83D\uDC4F";
141
+ CliIcon["ThumbsUp"] = "\uD83D\uDC4D";
142
+ CliIcon["ThumbsDown"] = "\uD83D\uDC4E";
143
+ // Miscellaneous
144
+ CliIcon["Rocket"] = "\uD83D\uDE80";
145
+ CliIcon["Globe"] = "\uD83C\uDF0D";
146
+ CliIcon["Medal"] = "\uD83C\uDFC5";
147
+ CliIcon["Trophy"] = "\uD83C\uDFC6";
148
+ CliIcon["Flag"] = "\uD83D\uDEA9";
149
+ CliIcon["StarFilled"] = "\u2B50";
150
+ CliIcon["StarOutline"] = "\u2729";
151
+ CliIcon["Fireworks"] = "\uD83C\uDF86";
152
+ CliIcon["Balloon"] = "\uD83C\uDF88";
153
+ CliIcon["Gift"] = "\uD83C\uDF81";
154
+ })(CliIcon || (CliIcon = {}));
155
+ const enums = {
156
+ CliForegroundColor,
157
+ CliBackgroundColor,
158
+ CliIcon,
159
+ };
24
160
 
25
161
  const DefaultLibraryAuthor = {
26
162
  name: 'Nicolae Lupei',
@@ -30,6 +166,139 @@ const constants = {
30
166
  DefaultLibraryAuthor,
31
167
  };
32
168
 
169
+ class ObjectDescriber {
170
+ static describe(obj, options) {
171
+ const { filter } = options || {};
172
+ const processors = [];
173
+ const keys = Object.keys(obj);
174
+ const functions = keys.filter((key) => typeof obj[key] === 'function');
175
+ for (const func of functions) {
176
+ const funcValue = obj[func];
177
+ const args = this.getFunctionArguments(funcValue);
178
+ if (filter) {
179
+ const shouldInclude = filter({
180
+ funcName: func,
181
+ func: funcValue,
182
+ args,
183
+ });
184
+ if (!shouldInclude) {
185
+ continue;
186
+ }
187
+ }
188
+ const supportsMultipleArgs = args.length > 1;
189
+ const supportsDynamicArgs = this.supportsDynamicArgs(funcValue);
190
+ if (args.length === 0 && !supportsDynamicArgs) {
191
+ continue;
192
+ }
193
+ if (args.length > 0 &&
194
+ args.some((arg) => arg === 'function' || arg === 'func')) {
195
+ continue;
196
+ }
197
+ const processor = {
198
+ command: func,
199
+ description: `A command that executes the function ${func} with the provided arguments`,
200
+ allowUnlistedCommands: true,
201
+ valueRequired: true,
202
+ parameters: [
203
+ {
204
+ name: 'debug',
205
+ description: 'Debug',
206
+ type: 'boolean',
207
+ required: false,
208
+ },
209
+ ],
210
+ processCommand: async (command, context) => {
211
+ const debug = command.args['debug'];
212
+ if (debug) {
213
+ context.writer.writeln('Executing command: ' + func);
214
+ context.writer.writeln('Arguments: ' + JSON.stringify(command.args));
215
+ context.writer.writeln('Function: ' + funcValue.toString());
216
+ }
217
+ const argsToCallF = [];
218
+ if (supportsMultipleArgs) {
219
+ for (const arg of args.slice(1)) {
220
+ argsToCallF.push(command.args[arg]);
221
+ }
222
+ }
223
+ if (supportsDynamicArgs) {
224
+ const delimiter = command.args['delimiter'] || ',';
225
+ argsToCallF.push(...command.value.split(delimiter));
226
+ }
227
+ if (debug) {
228
+ context.writer.writeln('Arguments after processing: ' +
229
+ JSON.stringify(argsToCallF));
230
+ }
231
+ const result = supportsDynamicArgs && args.length === 0
232
+ ? funcValue(...argsToCallF)
233
+ : funcValue(command.value, ...argsToCallF);
234
+ context.writer.write(context.writer.wrapInColor('Result: ', CliForegroundColor.Yellow));
235
+ if (result === null) {
236
+ context.writer.writeln('null');
237
+ }
238
+ else if (result === undefined) {
239
+ context.writer.writeln('undefined');
240
+ }
241
+ else if (typeof result === 'boolean') {
242
+ context.writer.writeln(result.toString());
243
+ }
244
+ else if (typeof result === 'number') {
245
+ context.writer.writeln(result.toString());
246
+ }
247
+ else if (Array.isArray(result)) {
248
+ context.writer.writeJson(result);
249
+ }
250
+ else if (typeof result === 'string') {
251
+ context.writer.writeln(result);
252
+ }
253
+ else if (typeof result === 'object') {
254
+ context.writer.writeJson(result);
255
+ }
256
+ else {
257
+ context.writer.writeln(result?.toString());
258
+ }
259
+ context.process.output(result?.toString());
260
+ },
261
+ writeDescription: (context) => {
262
+ context.writer.writeln(func);
263
+ },
264
+ };
265
+ if (supportsDynamicArgs) {
266
+ processor.parameters?.push({
267
+ name: 'delimiter',
268
+ description: 'Delimiter',
269
+ type: 'string',
270
+ required: false,
271
+ });
272
+ }
273
+ if (supportsMultipleArgs) {
274
+ processor.parameters?.push(...args.slice(1).map((arg) => ({
275
+ name: arg,
276
+ description: arg,
277
+ type: 'string',
278
+ required: false,
279
+ })));
280
+ }
281
+ processors.push(processor);
282
+ }
283
+ return processors;
284
+ }
285
+ static supportsDynamicArgs(func) {
286
+ const funcStr = func.toString();
287
+ return funcStr.includes('arguments');
288
+ }
289
+ static getFunctionArguments(func) {
290
+ const funcStr = func.toString();
291
+ const args = funcStr.match(/\(([^)]*)\)/);
292
+ if (!args) {
293
+ return [];
294
+ }
295
+ return args[1]
296
+ .split(',')
297
+ .map((arg) => arg.trim())
298
+ .filter((arg) => arg !== '');
299
+ }
300
+ }
301
+
33
302
  const getParameterValue = (p, args) => {
34
303
  return (args[p.name] ??
35
304
  (p.aliases?.find((alias) => args[alias]) &&
@@ -84,6 +353,7 @@ const utils = {
84
353
  toQueryString,
85
354
  highlightTextWithBg,
86
355
  getRightOfWord,
356
+ ObjectDescriber,
87
357
  };
88
358
 
89
359
  const initializeBrowserEnvironment = ({ handlers, }) => {
@@ -96,8 +366,7 @@ const initializeBrowserEnvironment = ({ handlers, }) => {
96
366
  },
97
367
  ...constants,
98
368
  ...utils,
99
- CliForegroundColor: CliForegroundColor,
100
- CliBackgroundColor: CliBackgroundColor,
369
+ ...enums,
101
370
  };
102
371
  window.ngCore = {
103
372
  Injectable: () => { },
@@ -112,6 +381,32 @@ const bootUmdModule = async (module) => {
112
381
  }
113
382
  };
114
383
 
384
+ class CancellablePromise {
385
+ constructor(executor) {
386
+ this.executor = executor;
387
+ this.hasCancelled = false;
388
+ this.abortController = new AbortController();
389
+ this.promise = new Promise((resolve, reject) => {
390
+ this.abortController.signal.onabort = () => {
391
+ reject(new Error('Promise cancelled'));
392
+ };
393
+ this.executor((value) => {
394
+ if (!this.hasCancelled) {
395
+ resolve(value);
396
+ }
397
+ }, (reason) => {
398
+ if (!this.hasCancelled) {
399
+ reject(reason);
400
+ }
401
+ });
402
+ });
403
+ }
404
+ cancel() {
405
+ this.hasCancelled = true;
406
+ this.abortController.abort();
407
+ }
408
+ }
409
+
115
410
  /*
116
411
  * Public API Surface of core
117
412
  */
@@ -120,5 +415,5 @@ const bootUmdModule = async (module) => {
120
415
  * Generated bundle index. Do not edit.
121
416
  */
122
417
 
123
- export { CliBackgroundColor, CliForegroundColor, DefaultLibraryAuthor, bootUmdModule, colorizeJson, constants, formatJson, getParameterValue, getRightOfWord, highlightTextWithBg, initializeBrowserEnvironment, toQueryString, utils };
418
+ export { CancellablePromise, CliBackgroundColor, CliForegroundColor, CliIcon, DefaultLibraryAuthor, ObjectDescriber, bootUmdModule, colorizeJson, constants, enums, formatJson, getParameterValue, getRightOfWord, highlightTextWithBg, initializeBrowserEnvironment, toQueryString, utils };
124
419
  //# sourceMappingURL=qodalis-cli-core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"qodalis-cli-core.mjs","sources":["../../../projects/core/src/lib/models/index.ts","../../../projects/core/src/lib/constants/index.ts","../../../projects/core/src/lib/utils/index.ts","../../../projects/core/src/lib/modules/index.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/qodalis-cli-core.ts"],"sourcesContent":["import { ITerminalInitOnlyOptions, ITerminalOptions } from '@xterm/xterm';\n\nexport type CliProcessCommand = {\n /**\n * The command that was entered\n */\n command: string;\n\n /**\n * The chain of commands that were entered\n */\n chainCommands: string[];\n\n /**\n * The raw command that was entered\n */\n rawCommand: string;\n\n /**\n * The value of the command\n */\n value?: string;\n\n /**\n * The arguments that were entered\n */\n args: Record<string, any>;\n};\n\nexport enum CliForegroundColor {\n Black = '\\x1b[30m',\n Red = '\\x1b[31m',\n Green = '\\x1b[32m',\n Yellow = '\\x1b[33m',\n Blue = '\\x1b[34m',\n Magenta = '\\x1b[35m',\n Cyan = '\\x1b[36m',\n White = '\\x1b[37m',\n Reset = '\\x1b[0m',\n}\n\nexport enum CliBackgroundColor {\n Black = '\\x1b[40m',\n Red = '\\x1b[41m',\n Green = '\\x1b[42m',\n Yellow = '\\x1b[43m',\n Blue = '\\x1b[44m',\n Magenta = '\\x1b[45m',\n Cyan = '\\x1b[46m',\n White = '\\x1b[47m',\n}\n\nexport interface ICliUser extends Record<string, any> {\n /**\n * The id of the user\n */\n id: string;\n\n /**\n * The name of the user\n */\n name: string;\n\n /**\n * The email of the user\n */\n email: string;\n}\n\nexport interface ICliUserSession {\n /**\n * The user associated with the session\n */\n user: ICliUser;\n\n /**\n * The data associated with the user session\n */\n data?: Record<string, any>;\n}\n\n/**\n * Options for the CLI\n */\nexport type CliOptions = {\n /**\n * The welcome message to display when the CLI starts\n */\n welcomeMessage?: string;\n\n /**\n * Hide the prompt to display when the CLI is ready to accept input\n */\n hideUserName?: boolean;\n\n /**\n * Custom terminal options\n */\n terminalOptions?: ITerminalOptions & ITerminalInitOnlyOptions;\n};\n\n/**\n * Represents a package that can be installed\n */\nexport interface Package {\n /**\n * The name of the package\n */\n name: string;\n\n /**\n * The global name used to access the package\n */\n globalName?: string;\n\n /**\n * The version of the package\n */\n version: string;\n\n /**\n * The unpkg url to the package\n */\n url: string;\n\n /**\n * The dependencies for the module\n */\n dependencies?: Package[];\n}\n","import { ICliCommandAuthor } from '../interfaces';\n\nexport const DefaultLibraryAuthor: ICliCommandAuthor = {\n name: 'Nicolae Lupei',\n email: 'nicolae.lupei@qodalis.com',\n};\n\nexport const constants = {\n DefaultLibraryAuthor,\n};\n","import { ICliCommandParameterDescriptor } from '../interfaces';\nimport { CliBackgroundColor, CliForegroundColor } from '../models';\n\nexport const getParameterValue = (\n p: ICliCommandParameterDescriptor,\n args: Record<string, any>,\n): any | undefined => {\n return (\n args[p.name] ??\n (p.aliases?.find((alias) => args[alias]) &&\n args[p.aliases!.find((alias) => args[alias])!])\n );\n};\n\nexport const formatJson = (json: any): string => {\n const identedJson = JSON.stringify(json, null, 2);\n\n return colorizeJson(identedJson.split('\\n').join('\\r\\n'));\n};\n\nexport const colorizeJson = (jsonString: any): string => {\n return jsonString\n .replace(/\"([^\"]+)\":/g, '\\x1b[33m\"$1\":\\x1b[0m') // Keys (yellow)\n .replace(/: \"([^\"]*)\"/g, ': \\x1b[32m\"$1\"\\x1b[0m') // Strings (green)\n .replace(/: (\\d+)/g, ': \\x1b[34m$1\\x1b[0m') // Numbers (blue)\n .replace(/: (true|false)/g, ': \\x1b[35m$1\\x1b[0m') // Booleans (magenta)\n .replace(/: (null)/g, ': \\x1b[36m$1\\x1b[0m'); // Null (cyan)\n};\n\nexport const toQueryString = (params: Record<string, any>): string => {\n const searchParams = new URLSearchParams();\n\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n const value = params[key];\n // Handle array and non-primitive values\n if (Array.isArray(value)) {\n value.forEach((v) => searchParams.append(key, v.toString()));\n } else if (value !== null && value !== undefined) {\n searchParams.append(key, value.toString());\n }\n }\n }\n\n return searchParams.toString();\n};\n\nexport const highlightTextWithBg = (\n text: string,\n pattern: RegExp,\n bgColor: CliBackgroundColor = CliBackgroundColor.Yellow,\n): string => {\n // Replace matches with background-colored text\n return text.replace(\n pattern,\n (match) => `${bgColor}${match}${CliForegroundColor.Reset}`,\n );\n};\n\nexport const getRightOfWord = (\n command: string,\n word: string,\n): string | undefined => {\n // Find the position of the word in the command\n const index = command.indexOf(word);\n\n // If the word is found, extract the substring to the right\n if (index !== -1) {\n return command.slice(index + word.length).trim();\n }\n\n // If the word is not found, return null\n return undefined;\n};\n\nexport const utils = {\n getParameterValue,\n formatJson,\n colorizeJson,\n toQueryString,\n highlightTextWithBg,\n getRightOfWord,\n};\n","import { CliBackgroundColor, CliForegroundColor } from '../models';\nimport { constants } from '../constants';\nimport { ICliUmdModule } from '../interfaces';\nimport { utils } from '../utils';\n\nexport const initializeBrowserEnvironment = ({\n handlers,\n}: {\n handlers: ((module: ICliUmdModule) => Promise<void>)[];\n}): void => {\n (window as any).cliCore = {\n onUmdModuleBoot: handlers || [],\n bootUmdModule: async (module: ICliUmdModule) => {\n console.log('Booting UMD module', module.name);\n (window as any)[module.name] = module;\n handlers.forEach(async (handler) => await handler(module));\n },\n ...constants,\n ...utils,\n CliForegroundColor: CliForegroundColor,\n CliBackgroundColor: CliBackgroundColor,\n };\n\n (window as any).ngCore = {\n Injectable: () => {},\n };\n};\n\nexport const bootUmdModule = async (module: ICliUmdModule): Promise<void> => {\n if (typeof (window as any) !== 'undefined') {\n await (window as any).cliCore.bootUmdModule(module);\n } else {\n console.log('window is undefined');\n }\n};\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/models';\n\nexport * from './lib/interfaces';\n\nexport * from './lib/modules';\n\nexport * from './lib/utils';\n\nexport * from './lib/constants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qodalis-cli-core.mjs","sources":["../../../projects/core/src/lib/models/index.ts","../../../projects/core/src/lib/constants/index.ts","../../../projects/core/src/lib/utils/object-describer.ts","../../../projects/core/src/lib/utils/index.ts","../../../projects/core/src/lib/modules/index.ts","../../../projects/core/src/lib/types/CancellablePromise.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/qodalis-cli-core.ts"],"sourcesContent":["import { ITerminalInitOnlyOptions, ITerminalOptions } from '@xterm/xterm';\n\nexport type CliProcessCommand = {\n /**\n * The command that was entered\n */\n command: string;\n\n /**\n * The data that was entered\n */\n data?: string;\n\n /**\n * The chain of commands that were entered\n */\n chainCommands: string[];\n\n /**\n * The raw command that was entered\n */\n rawCommand: string;\n\n /**\n * The value of the command\n */\n value?: string;\n\n /**\n * The arguments that were entered\n */\n args: Record<string, any>;\n};\n\nexport enum CliForegroundColor {\n Black = '\\x1b[30m',\n Red = '\\x1b[31m',\n Green = '\\x1b[32m',\n Yellow = '\\x1b[33m',\n Blue = '\\x1b[34m',\n Magenta = '\\x1b[35m',\n Cyan = '\\x1b[36m',\n White = '\\x1b[37m',\n Reset = '\\x1b[0m',\n}\n\nexport enum CliBackgroundColor {\n Black = '\\x1b[40m',\n Red = '\\x1b[41m',\n Green = '\\x1b[42m',\n Yellow = '\\x1b[43m',\n Blue = '\\x1b[44m',\n Magenta = '\\x1b[45m',\n Cyan = '\\x1b[46m',\n White = '\\x1b[47m',\n}\n\nexport enum CliIcon {\n // General Symbols\n CheckIcon = '✔', // Success, completion\n CrossIcon = '✘', // Failure, error\n InfoIcon = 'ℹ', // Information\n WarningIcon = '⚠', // Warning\n QuestionMark = '?', // Help or unknown state\n Exclamation = '❗', // Emphasis or alert\n Ellipsis = '…', // Loading or truncated text\n Dot = '•', // List item\n Bullet = '‣', // Alternate bullet point\n\n // Arrows\n ArrowRight = '→', // Navigation or next step\n ArrowLeft = '←', // Previous step or navigation\n ArrowUp = '↑', // Up direction\n ArrowDown = '↓', // Down direction\n ArrowRightFilled = '▶', // Navigation or next step (filled)\n ArrowLeftFilled = '◀', // Previous step or navigation (filled)\n ArrowUpFilled = '▲', // Up direction (filled)\n ArrowDownFilled = '▼', // Down direction (filled)\n DoubleArrowRight = '»', // Fast forward or next\n DoubleArrowLeft = '«', // Rewind or previous\n\n // Lists and Progress\n Star = '★', // Highlight or favorite (filled)\n StarEmpty = '☆', // Highlight or favorite (empty)\n Plus = '+', // Addition or increment\n Minus = '-', // Subtraction or decrement\n Progress = '⏳', // Indicating progress\n Success = '✅', // Success (alternative to CheckIcon)\n Failure = '❌', // Failure (alternative to CrossIcon)\n\n // Time and Calendar\n Clock = '⏰', // Time-related\n Timer = '⏱', // Stopwatch or timer\n Alarm = '🔔', // Alarm or alert\n Calendar = '📅', // Calendar or date\n\n // Navigation and Folders\n Folder = '📁', // Directory or file grouping\n FolderOpen = '📂', // Open folder\n File = '📄', // File or document\n Archive = '🗃', // Archive or file grouping\n Link = '🔗', // Hyperlink or connection\n Chain = '⛓', // Chain or linked\n Bookmark = '🔖', // Bookmark or save\n\n // Actions\n Edit = '✏', // Edit or modify\n Trash = '🗑', // Deletion or removal\n Add = '➕', // Add user or item\n Remove = '➖', // Remove user or item\n Reload = '🔄', // Refresh or reload\n Save = '💾', // Save or store\n Undo = '↩', // Undo action\n Redo = '↪', // Redo action\n Play = '▶', // Start or play\n Pause = '⏸', // Pause or stop temporarily\n Stop = '⏹', // Stop or end\n Cancel = '❎', // Cancel or close\n\n // User and Security\n User = '👤', // User or profile\n Group = '👥', // Group or team\n Lock = '🔒', // Secured or locked\n Unlock = '🔓', // Unlocked or accessible\n Help = '❓', // Help or support\n Key = '🔑', // Authentication or key\n Shield = '🛡', // Security or protection\n\n // Tools and Settings\n Gear = '⚙', // Settings or configuration\n Settings = '⚙️', // Settings (alternative)\n Theme = '🎨', // Theme or appearance\n Light = '💡', // Light mode\n Bug = '🐞', // Bug or issue\n Wrench = '🔧', // Maintenance or tools\n Hammer = '🔨', // Build or fix\n\n // Technology and Devices\n Terminal = '💻', // Terminal or command line\n Database = '🗄', // Database or storage\n Server = '🖥', // Server or host\n Cloud = '☁', // Cloud or remote\n Network = '🌐', // Network or connection\n Monitor = '🖥', // Monitor or display\n Printer = '🖨', // Printer or output\n USB = '🔌', // USB or connection\n Speaker = '🔊', // Speaker or audio\n Microphone = '🎙', // Microphone or input\n Camera = '📷', // Camera or video\n Video = '🎥', // Video or media\n Music = '🎵', // Music or audio\n Phone = '📞', // Phone or communication\n\n // Development and Evaluation\n Package = '📦', // Package or bundle\n Plugin = '🔌', // Plugin or extension\n Extension = '🧩', // Extension or component\n Module = '📦', // Module or package\n Evaluate = '🔍', // Evaluate or search\n Variable = '🔧', // Variable or setting\n Script = '📜', // Script or code\n Code = '💾', // Code or file\n\n // Status and Completion\n Logs = '📜', // Logs or history\n Power = '⏻', // On/Off state\n Heart = '❤', // Love or favorite\n Flame = '🔥', // Trending or hot\n Growth = '📈', // Growth or increase\n Decline = '📉', // Decline or decrease\n WarningFilled = '⚠️', // Warning (filled)\n\n // Nature and Weather\n Sun = '☀', // Brightness or day\n Moon = '🌙', // Night or dark mode\n Rain = '🌧', // Rain or bad weather\n Snow = '❄', // Snow or cold\n Lightning = '⚡', // Lightning or danger\n Tree = '🌲', // Nature or environment\n\n // Emotions and Expressions\n Smile = '😊', // Happiness or positive state\n Sad = '😢', // Sadness or negative state\n Angry = '😡', // Anger or frustration\n Clap = '👏', // Applause or celebration\n ThumbsUp = '👍', // Approval or success\n ThumbsDown = '👎', // Disapproval or failure\n\n // Miscellaneous\n Rocket = '🚀', // Launch or deploy\n Globe = '🌍', // Earth or international\n Medal = '🏅', // Achievement or award\n Trophy = '🏆', // Winner or champion\n Flag = '🚩', // Mark or flag\n StarFilled = '⭐', // Highlight or favorite\n StarOutline = '✩', // Alternate star icon\n Fireworks = '🎆', // Celebration\n Balloon = '🎈', // Party or fun\n Gift = '🎁', // Reward or present\n}\n\nexport type ICliUser = {\n /**\n * The id of the user\n */\n id: string;\n\n /**\n * The name of the user\n */\n name: string;\n\n /**\n * The email of the user\n */\n email: string;\n\n /**\n * The groups the user belongs to\n * @default []\n */\n groups?: string[];\n};\n\nexport interface ICliUserSession {\n /**\n * The user associated with the session\n */\n user: ICliUser;\n\n /**\n * The data associated with the user session\n */\n data?: Record<string, any>;\n}\n\n/**\n * Options for the CLI\n */\nexport type CliOptions = Record<string, any> & {\n /**\n * The welcome message to display when the CLI starts\n */\n welcomeMessage?: string;\n\n /**\n * If true, the welcome message is hidden\n * @default false\n */\n hideWelcomeMessage?: boolean;\n\n /**\n * Users module options\n */\n usersModule?: {\n /**\n * If true, the users module is enabled\n */\n enabled: boolean;\n\n /**\n * Hide the prompt to display when the CLI is ready to accept input\n */\n hideUserName?: boolean;\n };\n\n /**\n * Custom terminal options\n */\n terminalOptions?: ITerminalOptions & ITerminalInitOnlyOptions;\n};\n\n/**\n * Represents a package that can be installed\n */\nexport interface Package {\n /**\n * The name of the package\n */\n name: string;\n\n /**\n * The global name used to access the package\n */\n globalName?: string;\n\n /**\n * The version of the package\n */\n version: string;\n\n /**\n * The unpkg url to the package\n */\n url: string;\n\n /**\n * The dependencies for the module\n */\n dependencies?: Package[];\n}\n\n/**\n * Represents command processor metadata\n */\nexport type CliProcessorMetadata = Record<string, any> & {\n /**\n * If true, the processor is sealed and cannot be extended\n */\n sealed?: boolean;\n\n /**\n * If true, the processor requires the server to be running\n */\n requireServer?: boolean;\n\n /**\n * The module the processor belongs to\n */\n module?: string;\n\n /**\n * An icon to display for the processor\n */\n icon?: CliIcon | string;\n};\n\nexport const enums = {\n CliForegroundColor,\n CliBackgroundColor,\n CliIcon,\n};\n","import { ICliCommandAuthor } from '../interfaces';\n\nexport const DefaultLibraryAuthor: ICliCommandAuthor = {\n name: 'Nicolae Lupei',\n email: 'nicolae.lupei@qodalis.com',\n};\n\nexport const constants = {\n DefaultLibraryAuthor,\n};\n","import { ICliCommandProcessor, ICliExecutionContext } from '../interfaces';\nimport { CliForegroundColor, CliProcessCommand } from '../models';\n\nexport class ObjectDescriber {\n static describe(\n obj: any,\n options?: {\n filter?: (o: {\n funcName: string;\n func: any;\n args: string[];\n }) => boolean;\n },\n ): ICliCommandProcessor[] {\n const { filter } = options || {};\n\n const processors: ICliCommandProcessor[] = [];\n\n const keys = Object.keys(obj);\n\n const functions = keys.filter((key) => typeof obj[key] === 'function');\n\n for (const func of functions) {\n const funcValue = obj[func];\n const args = this.getFunctionArguments(funcValue);\n\n if (filter) {\n const shouldInclude = filter({\n funcName: func,\n func: funcValue,\n args,\n });\n\n if (!shouldInclude) {\n continue;\n }\n }\n\n const supportsMultipleArgs = args.length > 1;\n\n const supportsDynamicArgs = this.supportsDynamicArgs(funcValue);\n\n if (args.length === 0 && !supportsDynamicArgs) {\n continue;\n }\n\n if (\n args.length > 0 &&\n args.some((arg) => arg === 'function' || arg === 'func')\n ) {\n continue;\n }\n\n const processor: ICliCommandProcessor = {\n command: func,\n description: `A command that executes the function ${func} with the provided arguments`,\n allowUnlistedCommands: true,\n valueRequired: true,\n parameters: [\n {\n name: 'debug',\n description: 'Debug',\n type: 'boolean',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const debug = command.args['debug'] as boolean;\n\n if (debug) {\n context.writer.writeln('Executing command: ' + func);\n context.writer.writeln(\n 'Arguments: ' + JSON.stringify(command.args),\n );\n context.writer.writeln(\n 'Function: ' + funcValue.toString(),\n );\n }\n\n const argsToCallF: any[] = [];\n\n if (supportsMultipleArgs) {\n for (const arg of args.slice(1)) {\n argsToCallF.push(command.args[arg]);\n }\n }\n\n if (supportsDynamicArgs) {\n const delimiter = command.args['delimiter'] || ',';\n argsToCallF.push(...command.value!.split(delimiter));\n }\n\n if (debug) {\n context.writer.writeln(\n 'Arguments after processing: ' +\n JSON.stringify(argsToCallF),\n );\n }\n\n const result =\n supportsDynamicArgs && args.length === 0\n ? funcValue(...argsToCallF)\n : funcValue(command.value, ...argsToCallF);\n\n context.writer.write(\n context.writer.wrapInColor(\n 'Result: ',\n CliForegroundColor.Yellow,\n ),\n );\n\n if (result === null) {\n context.writer.writeln('null');\n } else if (result === undefined) {\n context.writer.writeln('undefined');\n } else if (typeof result === 'boolean') {\n context.writer.writeln(result.toString());\n } else if (typeof result === 'number') {\n context.writer.writeln(result.toString());\n } else if (Array.isArray(result)) {\n context.writer.writeJson(result);\n } else if (typeof result === 'string') {\n context.writer.writeln(result);\n } else if (typeof result === 'object') {\n context.writer.writeJson(result);\n } else {\n context.writer.writeln(result?.toString());\n }\n\n context.process.output(result?.toString());\n },\n writeDescription: (context: ICliExecutionContext) => {\n context.writer.writeln(func);\n },\n };\n\n if (supportsDynamicArgs) {\n processor.parameters?.push({\n name: 'delimiter',\n description: 'Delimiter',\n type: 'string',\n required: false,\n });\n }\n\n if (supportsMultipleArgs) {\n processor.parameters?.push(\n ...args.slice(1).map((arg) => ({\n name: arg,\n description: arg,\n type: 'string',\n required: false,\n })),\n );\n }\n\n processors.push(processor);\n }\n\n return processors;\n }\n\n static supportsDynamicArgs(func: any): boolean {\n const funcStr = func.toString();\n return funcStr.includes('arguments');\n }\n\n static getFunctionArguments(func: any): string[] {\n const funcStr = func.toString();\n const args = funcStr.match(/\\(([^)]*)\\)/);\n if (!args) {\n return [];\n }\n return args[1]\n .split(',')\n .map((arg: string) => arg.trim())\n .filter((arg: string) => arg !== '');\n }\n}\n","import { ICliCommandParameterDescriptor } from '../interfaces';\nimport { CliBackgroundColor, CliForegroundColor } from '../models';\nimport { ObjectDescriber } from './object-describer';\n\nexport const getParameterValue = (\n p: ICliCommandParameterDescriptor,\n args: Record<string, any>,\n): any | undefined => {\n return (\n args[p.name] ??\n (p.aliases?.find((alias) => args[alias]) &&\n args[p.aliases!.find((alias) => args[alias])!])\n );\n};\n\nexport const formatJson = (json: any): string => {\n const identedJson = JSON.stringify(json, null, 2);\n\n return colorizeJson(identedJson.split('\\n').join('\\r\\n'));\n};\n\nexport const colorizeJson = (jsonString: any): string => {\n return jsonString\n .replace(/\"([^\"]+)\":/g, '\\x1b[33m\"$1\":\\x1b[0m') // Keys (yellow)\n .replace(/: \"([^\"]*)\"/g, ': \\x1b[32m\"$1\"\\x1b[0m') // Strings (green)\n .replace(/: (\\d+)/g, ': \\x1b[34m$1\\x1b[0m') // Numbers (blue)\n .replace(/: (true|false)/g, ': \\x1b[35m$1\\x1b[0m') // Booleans (magenta)\n .replace(/: (null)/g, ': \\x1b[36m$1\\x1b[0m'); // Null (cyan)\n};\n\nexport const toQueryString = (params: Record<string, any>): string => {\n const searchParams = new URLSearchParams();\n\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n const value = params[key];\n // Handle array and non-primitive values\n if (Array.isArray(value)) {\n value.forEach((v) => searchParams.append(key, v.toString()));\n } else if (value !== null && value !== undefined) {\n searchParams.append(key, value.toString());\n }\n }\n }\n\n return searchParams.toString();\n};\n\nexport const highlightTextWithBg = (\n text: string,\n pattern: RegExp,\n bgColor: CliBackgroundColor = CliBackgroundColor.Yellow,\n): string => {\n // Replace matches with background-colored text\n return text.replace(\n pattern,\n (match) => `${bgColor}${match}${CliForegroundColor.Reset}`,\n );\n};\n\nexport const getRightOfWord = (\n command: string,\n word: string,\n): string | undefined => {\n // Find the position of the word in the command\n const index = command.indexOf(word);\n\n // If the word is found, extract the substring to the right\n if (index !== -1) {\n return command.slice(index + word.length).trim();\n }\n\n // If the word is not found, return null\n return undefined;\n};\n\nexport * from './object-describer';\n\nexport const utils = {\n getParameterValue,\n formatJson,\n colorizeJson,\n toQueryString,\n highlightTextWithBg,\n getRightOfWord,\n ObjectDescriber,\n};\n","import { enums } from '../models';\nimport { constants } from '../constants';\nimport { ICliUmdModule } from '../interfaces';\nimport { utils } from '../utils';\n\nexport const initializeBrowserEnvironment = ({\n handlers,\n}: {\n handlers: ((module: ICliUmdModule) => Promise<void>)[];\n}): void => {\n (window as any).cliCore = {\n onUmdModuleBoot: handlers || [],\n bootUmdModule: async (module: ICliUmdModule) => {\n console.log('Booting UMD module', module.name);\n (window as any)[module.name] = module;\n handlers.forEach(async (handler) => await handler(module));\n },\n ...constants,\n ...utils,\n ...enums,\n };\n\n (window as any).ngCore = {\n Injectable: () => {},\n };\n};\n\nexport const bootUmdModule = async (module: ICliUmdModule): Promise<void> => {\n if (typeof (window as any) !== 'undefined') {\n await (window as any).cliCore.bootUmdModule(module);\n } else {\n console.log('window is undefined');\n }\n};\n","export class CancellablePromise<T> {\n private hasCancelled = false;\n\n private abortController = new AbortController();\n\n constructor(\n private executor: (\n resolve: (value: T) => void,\n reject: (reason?: any) => void,\n ) => void,\n ) {}\n\n public promise: Promise<T> = new Promise<T>((resolve, reject) => {\n this.abortController.signal.onabort = () => {\n reject(new Error('Promise cancelled'));\n };\n\n this.executor(\n (value) => {\n if (!this.hasCancelled) {\n resolve(value);\n }\n },\n (reason) => {\n if (!this.hasCancelled) {\n reject(reason);\n }\n },\n );\n });\n\n cancel() {\n this.hasCancelled = true;\n this.abortController.abort();\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/models';\n\nexport * from './lib/interfaces';\n\nexport * from './lib/modules';\n\nexport * from './lib/utils';\n\nexport * from './lib/constants';\n\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}