Skip to content

Commit 0357a8a

Browse files
committed
feat(cli): Adding console for get methods
1 parent 4dd832f commit 0357a8a

File tree

3 files changed

+76
-3
lines changed

3 files changed

+76
-3
lines changed

templates/cli/base/requests/api.twig

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,19 @@
1717
fs.writeFileSync(destination, response);
1818
{%~ endif %}
1919
if (parseOutput) {
20+
{%~ if method.name == 'get' and service.name not in ['health','migrations','locale'] %}
21+
if(console) {
22+
showConsoleLink('{{service.name}}', 'get'
23+
{%- for parameter in method.parameters.path -%}{%- set param = (parameter.name | caseCamel | escapeKeyword) -%}{%- if param ends with 'Id' -%}, {{ param }} {%- endif -%}{%- endfor -%}
24+
);
25+
} else {
26+
parse(response)
27+
success()
28+
}
29+
{%~ else %}
2030
parse(response)
2131
success()
32+
{%~ endif %}
2233
}
2334

2435
return response;

templates/cli/lib/commands/command.js.twig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const tar = require("tar");
44
const ignore = require("ignore");
55
const { promisify } = require('util');
66
const libClient = require('../client.js');
7-
const { getAllFiles } = require('../utils.js');
7+
const { getAllFiles, showConsoleLink } = require('../utils.js');
88
const { Command } = require('commander');
99
const { sdkForProject, sdkForConsole } = require('../sdks')
1010
const { parse, actionRunner, parseInteger, parseBool, commandDescriptions, success, log } = require('../parser')
@@ -70,6 +70,7 @@ const {{ service.name | caseLower }}{{ method.name | caseUcfirst }} = async ({
7070
{%- if 'multipart/form-data' in method.consumes -%},onProgress = () => {}{%- endif -%}
7171

7272
{%- if method.type == 'location' -%}, destination{%- endif -%}
73+
{%- if method.name == 'get' -%}, console{%- endif -%}
7374
}) => {
7475
{%~ endblock %}
7576
let client = !sdk ? await {% if service.name == "projects" %}sdkForConsole(){% else %}sdkForProject(){% endif %} :
@@ -94,6 +95,9 @@ const {{ service.name | caseLower }}{{ method.name | caseUcfirst }} = async ({
9495
{% if method.type == 'location' %}
9596
.requiredOption(`--destination <path>`, `output file path.`)
9697
{% endif %}
98+
{% if method.name == 'get' %}
99+
.option(`--console`, `View this resource in the console`)
100+
{% endif %}
97101
{% endautoescape %}
98102
.action(actionRunner({{ service.name | caseLower }}{{ method.name | caseUcfirst }}))
99103

templates/cli/lib/utils.js.twig

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
const fs = require("fs");
22
const path = require("path");
3+
const { localConfig, globalConfig } = require("./config");
4+
const { success, log } = require('./parser')
5+
const readline = require('readline');
6+
const cp = require('child_process');
37

48
function getAllFiles(folder) {
59
const files = [];
6-
for(const pathDir of fs.readdirSync(folder)) {
10+
for (const pathDir of fs.readdirSync(folder)) {
711
const pathAbsolute = path.join(folder, pathDir);
812
if (fs.statSync(pathAbsolute).isDirectory()) {
913
files.push(...getAllFiles(pathAbsolute));
@@ -14,6 +18,60 @@ function getAllFiles(folder) {
1418
return files;
1519
}
1620

21+
function showConsoleLink(serviceName, action, id = '') {
22+
let resource = '';
23+
let service = '';
24+
25+
switch (serviceName) {
26+
case "account":
27+
service = 'account';
28+
break;
29+
case "databases":
30+
resource = 'database';
31+
service = 'databases';
32+
break;
33+
case "functions":
34+
resource = 'function';
35+
service = 'functions';
36+
break;
37+
case "projects":
38+
service = `project-${id}`;
39+
id = '';
40+
break;
41+
case "teams":
42+
resource = 'team';
43+
service = 'auth/teams';
44+
break;
45+
46+
case "users":
47+
resource = 'user';
48+
service = 'auth';
49+
break;
50+
default:
51+
return;
52+
}
53+
54+
const baseUrl = globalConfig.getEndpoint().replace('/v1', '');
55+
56+
const end = action === 'get' ? (id ? `/${resource}-${id}` : `/${resource}`) : '';
57+
const projectId = localConfig.getProject().projectId;
58+
const middle = resource !== '' ? `/project-${projectId}` : '';
59+
const url = `${baseUrl}/console${middle}/${service}${end}`
60+
61+
const start = (process.platform == 'darwin' ? 'open' : process.platform == 'win32' ? 'start' : 'xdg-open');
62+
const key = (process.platform == 'darwin' ? 'Return' : 'Enter');
63+
64+
success(`\n ${url}\n Press <${key}> to open URL in your default browser, exising in 3 seconds`);
65+
setTimeout(() => process.exit(0), 3000);
66+
67+
const read = readline.createInterface({ input: process.stdin, output: process.stdout });
68+
read.on('line', () => {
69+
cp.exec(`${start} ${url}`);
70+
setTimeout(() => process.exit(0), 250);
71+
});
72+
}
73+
1774
module.exports = {
18-
getAllFiles
75+
getAllFiles,
76+
showConsoleLink
1977
};

0 commit comments

Comments
 (0)