contensis-cli 1.0.0-beta.51 → 1.0.0-beta.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.vscode/launch.json +15 -15
  2. package/README.md +1226 -1226
  3. package/dist/commands/connect.js.map +1 -1
  4. package/dist/commands/create.js.map +1 -1
  5. package/dist/commands/diff.js.map +1 -1
  6. package/dist/commands/get.js.map +1 -1
  7. package/dist/commands/globalOptions.js.map +1 -1
  8. package/dist/commands/import.js.map +1 -1
  9. package/dist/commands/index.js.map +1 -1
  10. package/dist/commands/list.js.map +1 -1
  11. package/dist/commands/login.js.map +1 -1
  12. package/dist/commands/push.js.map +1 -1
  13. package/dist/commands/release.js.map +1 -1
  14. package/dist/commands/remove.js.map +1 -1
  15. package/dist/commands/set.js.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/localisation/en-GB.js.map +1 -1
  18. package/dist/providers/CredentialProvider.js.map +1 -1
  19. package/dist/providers/SessionCacheProvider.js.map +1 -1
  20. package/dist/providers/file-provider.js.map +1 -1
  21. package/dist/services/ContensisAuthService.js.map +1 -1
  22. package/dist/services/ContensisCliService.js.map +1 -1
  23. package/dist/shell.js.map +1 -1
  24. package/dist/util/console.printer.js.map +1 -1
  25. package/dist/util/csv.formatter.js.map +1 -1
  26. package/dist/util/index.js.map +1 -1
  27. package/dist/util/json.formatter.js.map +1 -1
  28. package/dist/util/logger.js.map +1 -1
  29. package/dist/util/xml.formatter.js.map +1 -1
  30. package/dist/version.js +1 -1
  31. package/dist/version.js.map +1 -1
  32. package/esbuild.config.js +49 -49
  33. package/headless-setup.sh +6 -6
  34. package/package.json +59 -59
  35. package/src/commands/connect.ts +24 -24
  36. package/src/commands/create.ts +70 -70
  37. package/src/commands/diff.ts +41 -41
  38. package/src/commands/get.ts +214 -214
  39. package/src/commands/globalOptions.ts +127 -127
  40. package/src/commands/import.ts +128 -128
  41. package/src/commands/index.ts +80 -80
  42. package/src/commands/list.ts +116 -116
  43. package/src/commands/login.ts +34 -34
  44. package/src/commands/push.ts +127 -127
  45. package/src/commands/release.ts +32 -32
  46. package/src/commands/remove.ts +85 -85
  47. package/src/commands/set.ts +96 -96
  48. package/src/index.ts +19 -19
  49. package/src/localisation/en-GB.ts +289 -289
  50. package/src/models/AppError.d.ts +40 -40
  51. package/src/models/Cache.d.ts +25 -25
  52. package/src/models/JsModules.d.ts +1 -1
  53. package/src/providers/CredentialProvider.ts +121 -121
  54. package/src/providers/SessionCacheProvider.ts +101 -101
  55. package/src/providers/file-provider.ts +76 -76
  56. package/src/services/ContensisAuthService.ts +70 -70
  57. package/src/services/ContensisCliService.ts +1745 -1745
  58. package/src/shell.ts +270 -270
  59. package/src/util/console.printer.ts +371 -371
  60. package/src/util/csv.formatter.ts +21 -21
  61. package/src/util/index.ts +73 -73
  62. package/src/util/json.formatter.ts +1 -1
  63. package/src/util/logger.ts +234 -234
  64. package/src/util/xml.formatter.ts +20 -20
  65. package/src/version.ts +1 -1
  66. package/tsconfig.json +22 -22
package/src/shell.ts CHANGED
@@ -1,270 +1,270 @@
1
- import figlet from 'figlet';
2
- import inquirer from 'inquirer';
3
- import inquirerPrompt from 'inquirer-command-prompt';
4
- import commands from './commands';
5
- import { LogMessages } from './localisation/en-GB';
6
- import CredentialProvider from './providers/CredentialProvider';
7
- import { appRootDir } from './providers/file-provider';
8
- import ContensisCli, { cliCommand } from './services/ContensisCliService';
9
- import { Logging } from './util';
10
- import { logError, Logger } from './util/logger';
11
- import { LIB_VERSION } from './version';
12
-
13
- class ContensisShell {
14
- private currentEnvironment!: string;
15
- private emptyInputCounter: number = 0;
16
- private env!: EnvironmentCache;
17
- private firstStart = true;
18
- private userId: string = '';
19
- private log = Logger;
20
- private messages = LogMessages;
21
-
22
- private refreshEnvironment = () => {
23
- // Reload any persisted changes from the disk cache
24
- const {
25
- cache: { currentEnvironment = '', environments = {} },
26
- } = new ContensisCli([]);
27
- // console.log(`refreshing env w/${currentEnvironment}`);
28
- this.currentEnvironment = currentEnvironment;
29
- this.env = environments[currentEnvironment];
30
-
31
- // Reload logging here to support changing language
32
- Logging('en-GB').then(({ messages, Log }) => {
33
- this.log = Log;
34
- this.messages = messages;
35
- });
36
- };
37
-
38
- constructor() {
39
- this.refreshEnvironment();
40
- inquirerPrompt.setConfig({
41
- history: {
42
- save: true,
43
- folder: appRootDir,
44
- limit: 100,
45
- blacklist: ['quit'],
46
- },
47
- });
48
-
49
- const { log, messages } = this;
50
-
51
- figlet.text(
52
- messages.app.contensis(),
53
- {
54
- font: 'Block',
55
- horizontalLayout: 'default',
56
- verticalLayout: 'default',
57
- width: process.stdout.columns,
58
- whitespaceBreak: true,
59
- },
60
- (err, data) => {
61
- if (err) {
62
- log.error(messages.app.unknownError());
63
- console.dir(err);
64
- return;
65
- }
66
- console.log(log.successText(data));
67
- console.log(log.infoText(messages.app.startup(LIB_VERSION)));
68
- console.log(log.helpText(messages.app.help()));
69
-
70
- this.start().catch(ex => log.error(ex));
71
- }
72
- );
73
- }
74
-
75
- restart = async () => {
76
- this.firstStart = false;
77
- this.log.line(); // add a line so we can see where the shell has been restarted
78
- await this.start();
79
- };
80
-
81
- start = async () => {
82
- this.refreshEnvironment();
83
- this.userId = '';
84
- const { currentEnvironment, env, log, messages } = this;
85
-
86
- if (env?.lastUserId) {
87
- const [credsErr, credentials] = await new CredentialProvider(
88
- {
89
- userId: env.lastUserId,
90
- alias: currentEnvironment,
91
- },
92
- env.passwordFallback
93
- ).Init();
94
- if (credsErr && !credentials.current) {
95
- log.error(credsErr.message);
96
- }
97
- if (credentials.current) {
98
- if (this.firstStart) {
99
- const token = await cliCommand(['login', env.lastUserId]).Login(
100
- env.lastUserId,
101
- {
102
- promptPassword: false,
103
- silent: true,
104
- }
105
- );
106
- if (token) {
107
- this.userId = env.lastUserId;
108
- if (!env.currentProject) log.warning(messages.projects.tip());
109
- }
110
- this.firstStart = false;
111
- this.refreshEnvironment();
112
- } else {
113
- this.userId = env.lastUserId;
114
- }
115
- }
116
- }
117
- await this.contensisPrompt();
118
- };
119
-
120
- contensisPrompt = async (): Promise<any> => {
121
- const { currentEnvironment, env, log, messages, userId } = this;
122
-
123
- const availableCommands = [
124
- {
125
- filter: (str: string) => {
126
- return str.replace(/ \[.*$/, '');
127
- },
128
- },
129
- 'connect',
130
- 'list envs',
131
- 'quit',
132
- ];
133
-
134
- if (currentEnvironment)
135
- availableCommands.push('login', 'list projects', 'set project');
136
- if (userId)
137
- availableCommands.push(
138
- 'create project',
139
- 'diff models',
140
- 'get block',
141
- 'get block logs',
142
- 'get contenttype',
143
- 'get component',
144
- 'get entries',
145
- 'get model',
146
- 'get project',
147
- 'get version',
148
- 'import contenttypes',
149
- 'import components',
150
- 'import entries',
151
- 'import models',
152
- 'list blocks',
153
- 'list contenttypes',
154
- 'list components',
155
- 'list models',
156
- 'list keys',
157
- 'list webhooks',
158
- 'create key',
159
- 'push block',
160
- 'release block',
161
- 'remove key',
162
- 'remove entries',
163
- 'remove contenttypes',
164
- 'remove components',
165
- 'set project name',
166
- 'set project description'
167
- );
168
-
169
- const prompt = inquirer.createPromptModule();
170
- prompt.registerPrompt('command', inquirerPrompt);
171
- return prompt([
172
- {
173
- type: 'command',
174
- name: 'cmd',
175
- autoCompletion: availableCommands,
176
- autocompletePrompt: log.infoText(messages.app.autocomplete()),
177
- message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,
178
- context: 0,
179
- validate: (val: string) => {
180
- if (!val) this.emptyInputCounter++;
181
- if (this.emptyInputCounter > 1)
182
- console.log(this.log.infoText(this.messages.app.suggestions()));
183
- if (val) {
184
- this.emptyInputCounter = 0;
185
- return true;
186
- }
187
- },
188
- prefix: `${env?.currentProject || log.infoText('contensis')}`,
189
- short: true,
190
- },
191
- ])
192
- .then(async (answers: { cmd: string }) => {
193
- if (answers.cmd === 'quit') {
194
- this.quit();
195
- } else {
196
- try {
197
- if (answers.cmd) {
198
- const program = commands();
199
- await program.parseAsync(
200
- answers.cmd
201
- .match(/"[^"]+"|[^\s]+/g)
202
- ?.map(e => e.replace(/"(.+)"/, '$1')),
203
- {
204
- from: 'user',
205
- }
206
- );
207
- }
208
- } catch (ex: any) {
209
- const str = ex.toString();
210
- if (!str.includes('CommanderError'))
211
- logError(ex, `Shell ${ex.toString()}`);
212
- } finally {
213
- return this.contensisPrompt();
214
- }
215
- }
216
- })
217
- .catch((err: Error) => {
218
- log.error(err.message);
219
- this.quit();
220
- });
221
- };
222
-
223
- quit = (error?: Error) => {
224
- const { log, messages } = this;
225
- process.removeAllListeners('exit');
226
-
227
- if (error) {
228
- log.error(error.message);
229
- process.exit(1);
230
- } else {
231
- log.success(messages.app.quit());
232
- process.exitCode = 0;
233
- process.exit(0);
234
- }
235
- };
236
- }
237
-
238
- let globalShell: ContensisShell;
239
-
240
- export const shell = () => {
241
- // Return a benign function for shell().restart() when used in cli context
242
- // as some commands need to restart the shell to show an updated prompt
243
- // after successful connect / login / set project
244
- if (typeof process.argv?.[2] !== 'undefined') return { restart() {} } as any;
245
- if (!globalShell) globalShell = new ContensisShell();
246
- return globalShell;
247
- };
248
-
249
- process.on('uncaughtException', function (err) {
250
- // Handle the error safely
251
- console.log(err);
252
- });
253
-
254
- process.on('SIGINT', () => {
255
- console.log('catching SIGINT');
256
- shell().quit();
257
- });
258
-
259
- process.on('SIGTERM', () => {
260
- console.log('catching SIGTERM');
261
- shell().quit();
262
- });
263
-
264
- process.stdin.on('data', key => {
265
- if ((key as any) == '\u0003') {
266
- console.log('');
267
- Logger.info(`[CTRL]+[C] detected, exiting shell...`);
268
- shell().quit();
269
- }
270
- });
1
+ import figlet from 'figlet';
2
+ import inquirer from 'inquirer';
3
+ import inquirerPrompt from 'inquirer-command-prompt';
4
+ import commands from './commands';
5
+ import { LogMessages } from './localisation/en-GB';
6
+ import CredentialProvider from './providers/CredentialProvider';
7
+ import { appRootDir } from './providers/file-provider';
8
+ import ContensisCli, { cliCommand } from './services/ContensisCliService';
9
+ import { Logging } from './util';
10
+ import { logError, Logger } from './util/logger';
11
+ import { LIB_VERSION } from './version';
12
+
13
+ class ContensisShell {
14
+ private currentEnvironment!: string;
15
+ private emptyInputCounter: number = 0;
16
+ private env!: EnvironmentCache;
17
+ private firstStart = true;
18
+ private userId: string = '';
19
+ private log = Logger;
20
+ private messages = LogMessages;
21
+
22
+ private refreshEnvironment = () => {
23
+ // Reload any persisted changes from the disk cache
24
+ const {
25
+ cache: { currentEnvironment = '', environments = {} },
26
+ } = new ContensisCli([]);
27
+ // console.log(`refreshing env w/${currentEnvironment}`);
28
+ this.currentEnvironment = currentEnvironment;
29
+ this.env = environments[currentEnvironment];
30
+
31
+ // Reload logging here to support changing language
32
+ Logging('en-GB').then(({ messages, Log }) => {
33
+ this.log = Log;
34
+ this.messages = messages;
35
+ });
36
+ };
37
+
38
+ constructor() {
39
+ this.refreshEnvironment();
40
+ inquirerPrompt.setConfig({
41
+ history: {
42
+ save: true,
43
+ folder: appRootDir,
44
+ limit: 100,
45
+ blacklist: ['quit'],
46
+ },
47
+ });
48
+
49
+ const { log, messages } = this;
50
+
51
+ figlet.text(
52
+ messages.app.contensis(),
53
+ {
54
+ font: 'Block',
55
+ horizontalLayout: 'default',
56
+ verticalLayout: 'default',
57
+ width: process.stdout.columns,
58
+ whitespaceBreak: true,
59
+ },
60
+ (err, data) => {
61
+ if (err) {
62
+ log.error(messages.app.unknownError());
63
+ console.dir(err);
64
+ return;
65
+ }
66
+ console.log(log.successText(data));
67
+ console.log(log.infoText(messages.app.startup(LIB_VERSION)));
68
+ console.log(log.helpText(messages.app.help()));
69
+
70
+ this.start().catch(ex => log.error(ex));
71
+ }
72
+ );
73
+ }
74
+
75
+ restart = async () => {
76
+ this.firstStart = false;
77
+ this.log.line(); // add a line so we can see where the shell has been restarted
78
+ await this.start();
79
+ };
80
+
81
+ start = async () => {
82
+ this.refreshEnvironment();
83
+ this.userId = '';
84
+ const { currentEnvironment, env, log, messages } = this;
85
+
86
+ if (env?.lastUserId) {
87
+ const [credsErr, credentials] = await new CredentialProvider(
88
+ {
89
+ userId: env.lastUserId,
90
+ alias: currentEnvironment,
91
+ },
92
+ env.passwordFallback
93
+ ).Init();
94
+ if (credsErr && !credentials.current) {
95
+ log.error(credsErr.message);
96
+ }
97
+ if (credentials.current) {
98
+ if (this.firstStart) {
99
+ const token = await cliCommand(['login', env.lastUserId]).Login(
100
+ env.lastUserId,
101
+ {
102
+ promptPassword: false,
103
+ silent: true,
104
+ }
105
+ );
106
+ if (token) {
107
+ this.userId = env.lastUserId;
108
+ if (!env.currentProject) log.warning(messages.projects.tip());
109
+ }
110
+ this.firstStart = false;
111
+ this.refreshEnvironment();
112
+ } else {
113
+ this.userId = env.lastUserId;
114
+ }
115
+ }
116
+ }
117
+ await this.contensisPrompt();
118
+ };
119
+
120
+ contensisPrompt = async (): Promise<any> => {
121
+ const { currentEnvironment, env, log, messages, userId } = this;
122
+
123
+ const availableCommands = [
124
+ {
125
+ filter: (str: string) => {
126
+ return str.replace(/ \[.*$/, '');
127
+ },
128
+ },
129
+ 'connect',
130
+ 'list envs',
131
+ 'quit',
132
+ ];
133
+
134
+ if (currentEnvironment)
135
+ availableCommands.push('login', 'list projects', 'set project');
136
+ if (userId)
137
+ availableCommands.push(
138
+ 'create project',
139
+ 'diff models',
140
+ 'get block',
141
+ 'get block logs',
142
+ 'get contenttype',
143
+ 'get component',
144
+ 'get entries',
145
+ 'get model',
146
+ 'get project',
147
+ 'get version',
148
+ 'import contenttypes',
149
+ 'import components',
150
+ 'import entries',
151
+ 'import models',
152
+ 'list blocks',
153
+ 'list contenttypes',
154
+ 'list components',
155
+ 'list models',
156
+ 'list keys',
157
+ 'list webhooks',
158
+ 'create key',
159
+ 'push block',
160
+ 'release block',
161
+ 'remove key',
162
+ 'remove entries',
163
+ 'remove contenttypes',
164
+ 'remove components',
165
+ 'set project name',
166
+ 'set project description'
167
+ );
168
+
169
+ const prompt = inquirer.createPromptModule();
170
+ prompt.registerPrompt('command', inquirerPrompt);
171
+ return prompt([
172
+ {
173
+ type: 'command',
174
+ name: 'cmd',
175
+ autoCompletion: availableCommands,
176
+ autocompletePrompt: log.infoText(messages.app.autocomplete()),
177
+ message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,
178
+ context: 0,
179
+ validate: (val: string) => {
180
+ if (!val) this.emptyInputCounter++;
181
+ if (this.emptyInputCounter > 1)
182
+ console.log(this.log.infoText(this.messages.app.suggestions()));
183
+ if (val) {
184
+ this.emptyInputCounter = 0;
185
+ return true;
186
+ }
187
+ },
188
+ prefix: `${env?.currentProject || log.infoText('contensis')}`,
189
+ short: true,
190
+ },
191
+ ])
192
+ .then(async (answers: { cmd: string }) => {
193
+ if (answers.cmd === 'quit') {
194
+ this.quit();
195
+ } else {
196
+ try {
197
+ if (answers.cmd) {
198
+ const program = commands();
199
+ await program.parseAsync(
200
+ answers.cmd
201
+ .match(/"[^"]+"|[^\s]+/g)
202
+ ?.map(e => e.replace(/"(.+)"/, '$1')),
203
+ {
204
+ from: 'user',
205
+ }
206
+ );
207
+ }
208
+ } catch (ex: any) {
209
+ const str = ex.toString();
210
+ if (!str.includes('CommanderError'))
211
+ logError(ex, `Shell ${ex.toString()}`);
212
+ } finally {
213
+ return this.contensisPrompt();
214
+ }
215
+ }
216
+ })
217
+ .catch((err: Error) => {
218
+ log.error(err.message);
219
+ this.quit();
220
+ });
221
+ };
222
+
223
+ quit = (error?: Error) => {
224
+ const { log, messages } = this;
225
+ process.removeAllListeners('exit');
226
+
227
+ if (error) {
228
+ log.error(error.message);
229
+ process.exit(1);
230
+ } else {
231
+ log.success(messages.app.quit());
232
+ process.exitCode = 0;
233
+ process.exit(0);
234
+ }
235
+ };
236
+ }
237
+
238
+ let globalShell: ContensisShell;
239
+
240
+ export const shell = () => {
241
+ // Return a benign function for shell().restart() when used in cli context
242
+ // as some commands need to restart the shell to show an updated prompt
243
+ // after successful connect / login / set project
244
+ if (typeof process.argv?.[2] !== 'undefined') return { restart() {} } as any;
245
+ if (!globalShell) globalShell = new ContensisShell();
246
+ return globalShell;
247
+ };
248
+
249
+ process.on('uncaughtException', function (err) {
250
+ // Handle the error safely
251
+ console.log(err);
252
+ });
253
+
254
+ process.on('SIGINT', () => {
255
+ console.log('catching SIGINT');
256
+ shell().quit();
257
+ });
258
+
259
+ process.on('SIGTERM', () => {
260
+ console.log('catching SIGTERM');
261
+ shell().quit();
262
+ });
263
+
264
+ process.stdin.on('data', key => {
265
+ if ((key as any) == '\u0003') {
266
+ console.log('');
267
+ Logger.info(`[CTRL]+[C] detected, exiting shell...`);
268
+ shell().quit();
269
+ }
270
+ });