eitri-cli 1.13.0 → 1.14.0-beta.1

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.
@@ -13,6 +13,7 @@ pipelines:
13
13
  script:
14
14
  - cd eitri-cli-v2
15
15
  - npm i
16
+ - npm i puppeteer@21.4.1
16
17
  - npm run build:debug
17
18
  - cd ..
18
19
  - npm i
@@ -126,4 +127,4 @@ pipelines:
126
127
  - RELEASE_VERSION=$(git describe --tags --abbrev=0 | sed 's/^v//')
127
128
  - node -e "const fs = require('fs'); const packageJson = JSON.parse(fs.readFileSync('package.json')); packageJson.version = process.env.RELEASE_VERSION; fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 4));"
128
129
  - echo 'New release'
129
- - echo $RELEASE_VERSION
130
+ - echo $RELEASE_VERSION
@@ -15,3 +15,7 @@ export namespace app {
15
15
  export function start(): Promise<void>
16
16
  export function appLogs(): Promise<void>
17
17
  }
18
+ export namespace workspace {
19
+ export function clean(): Promise<void>
20
+ export function current(): Promise<void>
21
+ }
@@ -295,10 +295,11 @@ if (!nativeBinding) {
295
295
  throw new Error(`Failed to load native binding`)
296
296
  }
297
297
 
298
- const { publish, runTest, eitriLibs, doctor, app } = nativeBinding
298
+ const { publish, runTest, eitriLibs, doctor, app, workspace } = nativeBinding
299
299
 
300
300
  module.exports.publish = publish
301
301
  module.exports.runTest = runTest
302
302
  module.exports.eitriLibs = eitriLibs
303
303
  module.exports.doctor = doctor
304
304
  module.exports.app = app
305
+ module.exports.workspace = workspace
package/index.js CHANGED
@@ -8,194 +8,186 @@ const { workspace } = require("./src/service/Workspace");
8
8
  const configService = require("./src/service/ConfigService");
9
9
  const VegvisirCommand = require("./src/modules/vegvisir/VegvisirCommand");
10
10
  const AppCommand = require("./src/modules/app/AppCommand");
11
- const debug = require('debug')('eitri:run')
12
-
11
+ const debug = require("debug")("eitri:run");
13
12
 
14
13
  const run = async () => {
15
- const NEW_CLI_VERSION = process.env.CLI_VERSION === "v2"
16
-
17
- debug("Iniciando run()")
18
- // Temporariamente necessário por conta de no contexto do Rust não saber o diretório atual, dessa forma exportando o fullPath do config é possível.
19
- // Quando se tornar uma CLI somente em rust no processo de instalação podemos declarar o caminho, como é via NPM pode ter caminhos variados de acordo com sistema de versionamento, NVM, Volta, ASDF é necessário a variável abaixo.
20
- process.env.CONFIG_DIR_PATH = path.join(__dirname, 'eitri-cli-v2', 'config')
21
- try {
22
- const srcFolder2watch = path.join(process.cwd(), "src");
23
- workspace.setFolder2Watch(srcFolder2watch);
24
- workspace.setServerUrl(`${configService.get("workspace").url}`);
25
- } catch (e) {
26
- debug("Erro no set da pasta", { message: e?.message, error: e })
27
- if (process.env.LOG_LEVEL === "full") {
28
- console.log("Current directory listening has failed", e);
29
- }
30
- // Continuando como antes...
14
+ const NEW_CLI_VERSION = process.env.CLI_VERSION === "v2";
15
+
16
+ debug("Iniciando run()");
17
+ // Temporariamente necessário por conta de no contexto do Rust não saber o diretório atual, dessa forma exportando o fullPath do config é possível.
18
+ // Quando se tornar uma CLI somente em rust no processo de instalação podemos declarar o caminho, como é via NPM pode ter caminhos variados de acordo com sistema de versionamento, NVM, Volta, ASDF é necessário a variável abaixo.
19
+ process.env.CONFIG_DIR_PATH = path.join(__dirname, "eitri-cli-v2", "config");
20
+ try {
21
+ const srcFolder2watch = path.join(process.cwd(), "src");
22
+ workspace.setFolder2Watch(srcFolder2watch);
23
+ workspace.setServerUrl(`${configService.get("workspace").url}`);
24
+ } catch (e) {
25
+ debug("Erro no set da pasta", { message: e?.message, error: e });
26
+ if (process.env.LOG_LEVEL === "full") {
27
+ console.log("Current directory listening has failed", e);
31
28
  }
29
+ // Continuando como antes...
30
+ }
31
+
32
+ program.option("-v, --version", "Mostra a versão da CLI").action(() => {
33
+ const { version } = require("./src/cmd/version");
34
+ version();
35
+ });
36
+
37
+ program
38
+ .command("login")
39
+ .description(
40
+ "Configura suas credenciais de desenvolvedor no dispositivo local"
41
+ )
42
+ .option("--yes", "Aceita o redirecionamento para o console")
43
+ .action(async (cmdObj) => {
44
+ require("./src/cmd/login")(cmdObj);
45
+ });
46
+
47
+ program
48
+ .command("create <project-name>")
49
+ .description(`Cria um projeto com um Eitri-App totalmente funcional.`)
50
+ .option("--yes", "Aceita os valores default para nome título e organização")
51
+ .option(
52
+ "--application <application>",
53
+ "Define o application de execução do Eitri-App"
54
+ )
55
+ .option("-v, --verbose", "Exibe mais logs")
56
+ .action((projectName, cmdObj) => {
57
+ require("./src/cmd/create")(projectName, cmdObj);
58
+ });
59
+
60
+ let startProgram = program
61
+ .command("start")
62
+ .description("Inicia o seu Eitri-App em um workspace online")
63
+ .option("-v, --verbose", "Exibe mais logs")
64
+ .option("-f, --force", "Força o start")
65
+ .option("-S, --show-deeplink", "Exibe o deep link do workspace")
66
+ .option("-sm, --skip-mini-log", "Skipa conexão com o mini-log")
67
+ .option(
68
+ "-P, --qr-printer <qrPrinter>",
69
+ "Indica qual programa imprimirá o QR Code. Se omitido, exibe o QrCode no terminal. Valores válidos: terminal|chrome|msedge|firefox"
70
+ )
71
+ .option(
72
+ "-e, --emulator <platform>",
73
+ "Abre o Eitri-App no emulador, desde que seja definido qual plataforma será aberto, android ou ios."
74
+ )
75
+ .option("-sh, --shared", "Executa o Eitri-App no modo compartilhável.");
76
+
77
+ startProgram.action((cmdObj) => {
78
+ require("./src/cmd/start")(cmdObj);
79
+ });
80
+
81
+ program
82
+ .command("push-version")
83
+ .description(
84
+ "Cria e envia uma versão do Eitri-App para o Console, possibilitando também publicar em um ambiente."
85
+ )
86
+ .option("-l, --local", "Aponta para o servidor local")
87
+ .option("-v, --verbose", "Exibe mais logs")
88
+ .option(
89
+ "-r, --release",
90
+ "Gera uma nova release baseado nos commits. Um arquivo CHANGELOG.md será gerado automaticamente."
91
+ )
92
+ .option("-s, --shared", "Publica o Eitri-App compartilhado")
93
+ .option(
94
+ "-m, --message <revision-message>",
95
+ "Adiciona comentários na versão"
96
+ )
97
+ .option("-y, --yes", "Aceita automaticamente as respostas do prompt.")
98
+ .action((cmdObj) => {
99
+ require("./src/cmd/push-version")(cmdObj);
100
+ });
101
+
102
+ program
103
+ .command("clean")
104
+ .description(
105
+ "Realiza a limpeza do workspace remoto do desenvolvedor. Útil quando há mal funcionamento na compilação em nuvem do Eitri-App."
106
+ )
107
+ .option("-v, --verbose", "Exibe mais logs")
108
+ .action(async (cmdObj) => {
109
+ if (NEW_CLI_VERSION) {
110
+ console.log("clean (v2)");
111
+ const eitriCLIV2 = require("./eitri-cli-v2/index.js");
112
+ return await eitriCLIV2.workspace.clean();
113
+ }
114
+ require("./src/cmd/clean")(cmdObj);
115
+ });
116
+
117
+ program
118
+ .command("self-update")
119
+ .description("Desinstala a versão antiga e instala a mais nova")
120
+ .action(() => {
121
+ require("child_process").execSync(
122
+ "npm uninstall -g eitri-cli && npm i eitri-cli -g",
123
+ { stdio: "inherit" }
124
+ );
125
+ });
126
+
127
+ program
128
+ .command("libs")
129
+ .description("Listagem das versões das Bibliotecas do Eitri")
130
+ .option("--bifrost", "Lista todas as versões do Bifrost")
131
+ .option("--luminus", "Lista todas as versões do Luminus")
132
+ .action(async (cmdObj) => {
133
+ const eitriCLIV2 = require("./eitri-cli-v2/index.js");
134
+ await eitriCLIV2.eitriLibs(cmdObj);
135
+ });
136
+
137
+ program
138
+ .command("doctor")
139
+ .description(
140
+ "Valida as dependências externas para execução da CLI do Eitri"
141
+ )
142
+ .action(async (cmdObj) => {
143
+ if (NEW_CLI_VERSION) {
144
+ console.log("doctor (v2)");
145
+ const eitriCLIV2 = require("./eitri-cli-v2/index.js");
146
+ return await eitriCLIV2.doctor();
147
+ }
148
+ require("./src/cmd/doctor")(cmdObj);
149
+ });
32
150
 
33
- program.option("-v, --version", "Mostra a versão da CLI").action(() => {
34
- const { version } = require("./src/cmd/version");
35
- version();
151
+ program
152
+ .command("publish")
153
+ .description("Publica a versão atual no environment selecionado.")
154
+ .option(
155
+ "-e, --environment <environment>",
156
+ "Define o environment que publicará a versão atual presente no eitri-conf"
157
+ )
158
+ .option("-m, --message <publish-message>", "Adiciona comentários na versão")
159
+ .action(async (cmdObj) => {
160
+ const eitriCLIV2 = require("./eitri-cli-v2/index.js");
161
+ await eitriCLIV2.publish(cmdObj.environment, cmdObj.message || "");
36
162
  });
37
163
 
38
- program
39
- .command("login")
40
- .description(
41
- "Configura suas credenciais de desenvolvedor no dispositivo local"
42
- )
43
- .option("--yes", "Aceita o redirecionamento para o console")
44
- .action(async (cmdObj) => {
45
- require("./src/cmd/login")(cmdObj);
46
- });
47
-
48
- program
49
- .command("create <project-name>")
50
- .description(`Cria um projeto com um Eitri-App totalmente funcional.`)
51
- .option(
52
- "--yes",
53
- "Aceita os valores default para nome título e organização"
54
- )
55
- .option(
56
- "--application <application>",
57
- "Define o application de execução do Eitri-App"
58
- )
59
- .option("-v, --verbose", "Exibe mais logs")
60
- .action((projectName, cmdObj) => {
61
- require("./src/cmd/create")(projectName, cmdObj);
62
- });
63
-
64
- let startProgram = program
65
- .command("start")
66
- .description("Inicia o seu Eitri-App em um workspace online")
67
- .option("-v, --verbose", "Exibe mais logs")
68
- .option("-f, --force", "Força o start")
69
- .option("-S, --show-deeplink", "Exibe o deep link do workspace")
70
- .option("-sm, --skip-mini-log", "Skipa conexão com o mini-log")
71
- .option(
72
- "-P, --qr-printer <qrPrinter>",
73
- "Indica qual programa imprimirá o QR Code. Se omitido, exibe o QrCode no terminal. Valores válidos: terminal|chrome|msedge|firefox"
74
- )
75
- .option(
76
- "-e, --emulator <platform>",
77
- "Abre o Eitri-App no emulador, desde que seja definido qual plataforma será aberto, android ou ios."
78
- )
79
- .option(
80
- "-sh, --shared",
81
- "Executa o Eitri-App no modo compartilhável."
82
- );
83
-
84
- startProgram.action((cmdObj) => {
85
- require("./src/cmd/start")(cmdObj);
164
+ program
165
+ .command("test")
166
+ .description("Executa os testes do eitri-app.")
167
+ .option(
168
+ "-p --path <test_path>",
169
+ "Define o path do arquivo de teste que será executado."
170
+ )
171
+ .action(async (cmdObj) => {
172
+ return require("./src/cmd/runTests")(cmdObj);
86
173
  });
87
174
 
88
- program
89
- .command("push-version")
90
- .description(
91
- "Cria e envia uma versão do Eitri-App para o Console, possibilitando também publicar em um ambiente."
92
- )
93
- .option("-l, --local", "Aponta para o servidor local")
94
- .option("-v, --verbose", "Exibe mais logs")
95
- .option("-r, --release", "Gera uma nova release baseado nos commits. Um arquivo CHANGELOG.md será gerado automaticamente.")
96
- .option(
97
- "-s, --shared",
98
- "Publica o Eitri-App compartilhado"
99
- )
100
- .option(
101
- "-m, --message <revision-message>",
102
- "Adiciona comentários na versão"
103
- )
104
- .option("-y, --yes", "Aceita automaticamente as respostas do prompt.")
105
- .action((cmdObj) => {
106
- require("./src/cmd/push-version")(cmdObj);
107
- });
108
-
109
- program
110
- .command("clean")
111
- .description(
112
- "Realiza a limpeza do workspace remoto do desenvolvedor. Útil quando há mal fucionamento na compilação em nuvem do Eitri-App."
113
- )
114
- .option("-v, --verbose", "Exibe mais logs")
115
- .action((cmdObj) => {
116
- require("./src/cmd/clean")(cmdObj);
117
- });
118
-
119
- program
120
- .command("self-update")
121
- .description("Desinstala a versão antiga e instala a mais nova")
122
- .action(() => {
123
- require("child_process").execSync(
124
- "npm uninstall -g eitri-cli && npm i eitri-cli -g",
125
- { stdio: "inherit" }
126
- );
127
- });
128
-
129
- program
130
- .command("libs")
131
- .description("Listagem das versões das Bibliotecas do Eitri")
132
- .option(
133
- "--bifrost",
134
- "Lista todas as versões do Bifrost"
135
- )
136
- .option(
137
- "--luminus",
138
- "Lista todas as versões do Luminus"
139
- )
140
- .action(async (cmdObj) => {
141
- const eitriCLIV2 = require('./eitri-cli-v2/index.js')
142
- await eitriCLIV2.eitriLibs(cmdObj);
143
-
144
- });
145
-
146
- program
147
- .command("doctor")
148
- .description("Valida as dependências externas para execução da CLI do Eitri")
149
- .action(async (cmdObj) => {
150
- if (NEW_CLI_VERSION) {
151
- console.log("doctor (v2)")
152
- const eitriCLIV2 = require('./eitri-cli-v2/index.js')
153
- return await eitriCLIV2.doctor()
154
- }
155
- require("./src/cmd/doctor")(cmdObj);
156
- });
157
-
158
- program
159
- .command("publish")
160
- .description("Publica a versão atual no environment selecionado.")
161
- .option(
162
- "-e, --environment <environment>",
163
- "Define o environment que publicará a versão atual presente no eitri-conf"
164
- )
165
- .option(
166
- "-m, --message <publish-message>",
167
- "Adiciona comentários na versão"
168
- )
169
- .action(async (cmdObj) => {
170
- const eitriCLIV2 = require('./eitri-cli-v2/index.js')
171
- await eitriCLIV2.publish(cmdObj.environment, cmdObj.message || '')
172
- });
173
-
174
- program
175
- .command("test")
176
- .description("Executa os testes do eitri-app.")
177
- .option(
178
- "-p --path <test_path>",
179
- "Define o path do arquivo de teste que será executado."
180
- )
181
- .action(async (cmdObj) => { return require("./src/cmd/runTests")(cmdObj) });
182
-
183
- program.addCommand(VegvisirCommand());
184
- program.addCommand(AppCommand());
185
-
186
- if (
187
- process.argv.length > 2 &&
188
- !program.commands.map((cmd) => cmd._name).includes(process.argv[2])
189
- ) {
190
- if (!process.argv[2].startsWith("-")) {
191
- console.log(
192
- `\n ${emoji.lib.rotating_light.char} Comando ${process.argv[2]} inexistente.\n`
193
- );
194
- program.help();
195
- }
175
+ program.addCommand(VegvisirCommand());
176
+ program.addCommand(AppCommand());
177
+
178
+ if (
179
+ process.argv.length > 2 &&
180
+ !program.commands.map((cmd) => cmd._name).includes(process.argv[2])
181
+ ) {
182
+ if (!process.argv[2].startsWith("-")) {
183
+ console.log(
184
+ `\n ${emoji.lib.rotating_light.char} Comando ${process.argv[2]} inexistente.\n`
185
+ );
186
+ program.help();
196
187
  }
188
+ }
197
189
 
198
- program.parse(process.argv);
190
+ program.parse(process.argv);
199
191
  };
200
192
 
201
193
  module.exports = run;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eitri-cli",
3
- "version": "1.13.0",
3
+ "version": "1.14.0-beta.1",
4
4
  "description": "Command Line Interface to make \"Eitri-App\" with code and fire.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -1,44 +1,66 @@
1
1
  const commander = require("commander");
2
2
 
3
3
  module.exports = function VegvisirCommand() {
4
- const workspaceCommand = commander.command("workspace")
5
- .description("Gerencia os workspaces do desenvolvedor, para mais informações execute 'eitri workspace --help'")
6
-
7
- workspaceCommand
8
- .command("list")
9
- .description("Lista os workspaces do usuário")
10
- .action(async (cmdObj) => {
11
- require("./cmd/list")(cmdObj);
12
- });
13
-
14
- workspaceCommand
15
- .command("use")
16
- .description("Seleciona qual workspace a ser utilizado")
17
- .option(
18
- "--local",
19
- "Seleciona um workspace para um diretório de Eitri-App específico"
20
- )
21
- .option(
22
- "--name <workspace-name>",
23
- "Permite selecionar um workspace previamente criado pelo nome"
24
- )
25
- .action(async (cmdObj) => {
26
- require("./cmd/use.js")(cmdObj);
27
- });
28
-
29
- workspaceCommand
30
- .command("create")
31
- .description("Cria um workspace para desenvolvimento de Eitri-Apps")
32
- .action((cmdObj) => {
33
- require("./cmd/create")(cmdObj);
34
- });
35
-
36
- workspaceCommand
37
- .command("current")
38
- .description("Exibe o workspace atual, obedecendo a prioridade Local > Global.")
39
- .action((cmdObj) => {
40
- require("./cmd/current")(cmdObj);
41
- });
42
-
43
- return workspaceCommand;
4
+ const NEW_CLI_VERSION = process.env.CLI_VERSION === "v2";
5
+
6
+ const workspaceCommand = commander
7
+ .command("workspace")
8
+ .description(
9
+ "Gerencia os workspaces do desenvolvedor, para mais informações execute 'eitri workspace --help'"
10
+ );
11
+
12
+ workspaceCommand
13
+ .command("list")
14
+ .description("Lista os workspaces do usuário")
15
+ .action(async (cmdObj) => {
16
+ require("./cmd/list")(cmdObj);
17
+ });
18
+
19
+ workspaceCommand
20
+ .command("use")
21
+ .description("Seleciona qual workspace a ser utilizado")
22
+ .option(
23
+ "--local",
24
+ "Seleciona um workspace para um diretório de Eitri-App específico"
25
+ )
26
+ .option(
27
+ "--name <workspace-name>",
28
+ "Permite selecionar um workspace previamente criado pelo nome"
29
+ )
30
+ .action(async (cmdObj) => {
31
+ require("./cmd/use.js")(cmdObj);
32
+ });
33
+
34
+ workspaceCommand
35
+ .command("create")
36
+ .description("Cria um workspace para desenvolvimento de Eitri-Apps")
37
+ .action((cmdObj) => {
38
+ require("./cmd/create")(cmdObj);
39
+ });
40
+
41
+ workspaceCommand
42
+ .command("current")
43
+ .description(
44
+ "Exibe o workspace atual, obedecendo a prioridade Local > Global."
45
+ )
46
+ .action(async (cmdObj) => {
47
+ if (NEW_CLI_VERSION) {
48
+ const eitriCLIV2 = require("../../../eitri-cli-v2/index.js");
49
+ return await eitriCLIV2.workspace.current();
50
+ }
51
+
52
+ require("./cmd/current")(cmdObj);
53
+ });
54
+
55
+ workspaceCommand
56
+ .command("clean")
57
+ .description(
58
+ "Realiza a limpeza do workspace remoto do desenvolvedor. Útil quando há mal funcionamento na compilação em nuvem do Eitri-App. Obedece a prioridade Local > Global."
59
+ )
60
+ .action(async () => {
61
+ const eitriCLIV2 = require("../../../eitri-cli-v2/index.js");
62
+ await eitriCLIV2.workspace.clean();
63
+ });
64
+
65
+ return workspaceCommand;
44
66
  };
@@ -3,6 +3,7 @@ const readline = require("readline");
3
3
  const chalk = require("chalk");
4
4
  const os = require("os");
5
5
  const EmulatorService = require("../EmulatorService");
6
+ const qrcode = require('qrcode')
6
7
 
7
8
  function QRCodeStarter(
8
9
  args,
@@ -51,6 +52,7 @@ function QRCodeStarter(
51
52
  await tryOpenEmulator(fullUrl, args);
52
53
  }
53
54
 
55
+ await listenerKeyPressToShowQrCode(fullUrl);
54
56
  await listenerKeyPressToOpenEmulator(fullUrl, args.deepLinks);
55
57
  };
56
58
  }
@@ -74,8 +76,7 @@ async function listenerKeyPressToOpenEmulator(url, deepLinks) {
74
76
  if(!deepLinks || deepLinks?.length < 1) return;
75
77
  const enterText = chalk.blue.bold("Enter");
76
78
  console.log("================================================");
77
- console.log(`\t${chalk.green.bold("Abertura de Eitri-App automática")}`);
78
- console.log("================================================");
79
+ console.log(`\t${chalk.blue.bold("Abertura de Eitri-App automática")}`);
79
80
  console.log(
80
81
  `Digite ${chalk.blue.bold(
81
82
  "a"
@@ -110,6 +111,37 @@ async function listenerKeyPressToOpenEmulator(url, deepLinks) {
110
111
  });
111
112
  }
112
113
 
114
+ async function listenerKeyPressToShowQrCode(url) {
115
+ const enterText = chalk.green.bold("Enter");
116
+
117
+ console.log("================================================");
118
+ console.log(
119
+ `Digite ${chalk.green.bold(
120
+ "q"
121
+ )} e pressione ${enterText} no terminal para exibir o QrCode`
122
+ );
123
+
124
+ console.log("================================================");
125
+ readline.emitKeypressEvents(process.stdin);
126
+
127
+ process.stdin.on("keypress", async (_, key) => {
128
+ try {
129
+ if(key){
130
+ if (key.name == "q" || key.name == "Q") {
131
+ qrcode.toString(url, {type:"terminal", small: true}, function(_, qrCode) {
132
+ console.log(qrCode)
133
+ })
134
+ }
135
+ }
136
+
137
+ } catch (error) {
138
+ console.error("Não foi possível exibir o QR Code. Não se preocupe, seu desenvolvimento não foi interrompido.")
139
+ console.log(error);
140
+ process.exit(0);
141
+ }
142
+ });
143
+ }
144
+
113
145
  function extractShareId(url) {
114
146
  const [, shareId] = url.split("/share/");
115
147
  return shareId;