contensis-cli 1.3.1-beta.1 → 1.3.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/shell.js CHANGED
@@ -46,17 +46,18 @@ var import_version = require("./version");
46
46
  class ContensisShell {
47
47
  currentEnvironment;
48
48
  emptyInputCounter = 0;
49
+ cache;
49
50
  env;
50
51
  firstStart = true;
51
52
  userId = "";
52
53
  log = import_logger.Logger;
53
54
  messages = import_en_GB.LogMessages;
54
55
  refreshEnvironment = () => {
55
- const {
56
- cache: { currentEnvironment = "", environments = {} }
57
- } = new import_ContensisCliService.default([]);
58
- this.currentEnvironment = currentEnvironment;
59
- this.env = environments[currentEnvironment];
56
+ const { cache } = new import_ContensisCliService.default([]);
57
+ this.cache = cache;
58
+ this.currentEnvironment = cache.currentEnvironment || "";
59
+ const environments = cache.environments || {};
60
+ this.env = environments[this.currentEnvironment];
60
61
  (0, import_util.Logging)("en-GB").then(({ messages, Log }) => {
61
62
  this.log = Log;
62
63
  this.messages = messages;
@@ -146,11 +147,19 @@ class ContensisShell {
146
147
  }
147
148
  },
148
149
  "connect",
150
+ ...Object.keys(this.cache.environments || {}).map(
151
+ (alias) => `connect ${alias}`
152
+ ),
149
153
  "list envs",
150
154
  "quit"
151
155
  ];
152
156
  if (currentEnvironment)
153
- availableCommands.push("login", "list projects", "set project");
157
+ availableCommands.push(
158
+ "login",
159
+ "list projects",
160
+ "set project",
161
+ ...(this.env.projects || []).map((project) => `set project ${project}`)
162
+ );
154
163
  if (userId)
155
164
  availableCommands.push(
156
165
  "copy field",
@@ -254,9 +263,8 @@ class ContensisShell {
254
263
  ex,
255
264
  `Shell ${ex instanceof Error ? ex.toString() : JSON.stringify(ex, null, 2)}`
256
265
  );
257
- } finally {
258
- return this.contensisPrompt();
259
266
  }
267
+ return this.contensisPrompt();
260
268
  }
261
269
  }).catch((err) => {
262
270
  log.error(err.message);
package/dist/shell.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/shell.ts"],
4
- "sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport { split } from 'split-cmd';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const {\n cache: { currentEnvironment = '', environments = {} },\n } = new ContensisCli([]);\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = currentEnvironment;\n this.env = environments[currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push('login', 'list projects', 'set project');\n if (userId)\n availableCommands.push(\n 'copy field',\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get assets',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get nodes',\n 'get model',\n 'get project',\n 'get proxy',\n 'get renderer',\n 'get role',\n 'get token',\n 'get version',\n 'get webhook',\n 'get workflow',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'import nodes',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'list workflows',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove nodes',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n split(answers.cmd).map(e => e.replace(/\\\\\"/g, '\"')),\n // answers.cmd\n // .match(/\"[^\"]+\"|[^\\s]+/g)\n // ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(\n ex,\n `Shell ${\n ex instanceof Error\n ? ex.toString()\n : JSON.stringify(ex, null, 2)\n }`\n );\n } finally {\n return this.contensisPrompt();\n }\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return {\n quit: ContensisCli.quit,\n restart() {},\n } as any;\n if (!globalShell) globalShell = new ContensisShell();\n return globalShell;\n};\n\nprocess.on('uncaughtException', function (err) {\n // Handle the error safely\n console.log(err);\n});\n\nprocess.on('SIGINT', () => {\n Logger.warning('received SIGINT');\n shell().quit();\n // setTimeout(() => {\n // }, 2000);\n});\n\nprocess.on('SIGTERM', () => {\n Logger.warning('received SIGTERM');\n shell().quit();\n});\n\nprocess.stdin.on('data', key => {\n if ((key as any) == '\\u0003') {\n console.log('');\n Logger.info(`[CTRL]+[C] detected, exiting shell...`);\n shell().quit();\n }\n});\n\n// process.env.http_proxy = 'http://127.0.0.1:8888';\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,sBAAqB;AACrB,qCAA2B;AAC3B,uBAAsB;AACtB,sBAAqB;AACrB,mBAA4B;AAC5B,gCAA+B;AAC/B,2BAA2B;AAC3B,iCAAyC;AACzC,kBAAwB;AACxB,oBAAiC;AACjC,qBAA4B;AAE5B,MAAM,eAAe;AAAA,EACX;AAAA,EACA,oBAA4B;AAAA,EAC5B;AAAA,EACA,aAAa;AAAA,EACb,SAAiB;AAAA,EACjB,MAAM;AAAA,EACN,WAAW;AAAA,EAEX,qBAAqB,MAAM;AAEjC,UAAM;AAAA,MACJ,OAAO,EAAE,qBAAqB,IAAI,eAAe,CAAC,EAAE;AAAA,IACtD,IAAI,IAAI,2BAAAA,QAAa,CAAC,CAAC;AAEvB,SAAK,qBAAqB;AAC1B,SAAK,MAAM,aAAa,kBAAkB;AAG1C,6BAAQ,OAAO,EAAE,KAAK,CAAC,EAAE,UAAU,IAAI,MAAM;AAC3C,WAAK,MAAM;AACX,WAAK,WAAW;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AACZ,SAAK,mBAAmB;AACxB,mCAAAC,QAAe,UAAU;AAAA,MACvB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,WAAW,CAAC,MAAM;AAAA,MACpB;AAAA,IACF,CAAC;AAED,UAAM,EAAE,KAAK,SAAS,IAAI;AAE1B,kBAAAC,QAAO;AAAA,MACL,SAAS,IAAI,UAAU;AAAA,MACvB;AAAA,QACE,MAAM;AAAA,QACN,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,QAChB,OAAO,QAAQ,OAAO;AAAA,QACtB,iBAAiB;AAAA,MACnB;AAAA,MACA,CAAC,KAAK,SAAS;AACb,YAAI,KAAK;AACP,cAAI,MAAM,SAAS,IAAI,aAAa,CAAC;AACrC,kBAAQ,IAAI,GAAG;AACf;AAAA,QACF;AACA,gBAAQ,IAAI,IAAI,YAAY,IAAI,CAAC;AACjC,gBAAQ,IAAI,IAAI,SAAS,SAAS,IAAI,QAAQ,0BAAW,CAAC,CAAC;AAC3D,gBAAQ,IAAI,IAAI,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC;AAE7C,aAAK,MAAM,EAAE,MAAM,QAAM,IAAI,MAAM,EAAE,CAAC;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,YAAY;AACpB,SAAK,aAAa;AAClB,SAAK,IAAI,KAAK;AACd,UAAM,KAAK,MAAM;AAAA,EACnB;AAAA,EAEA,QAAQ,YAAY;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AACd,UAAM,EAAE,oBAAoB,KAAK,KAAK,SAAS,IAAI;AAEnD,QAAI,2BAAK,YAAY;AACnB,YAAM,CAAC,UAAU,WAAW,IAAI,MAAM,IAAI,0BAAAC;AAAA,QACxC;AAAA,UACE,QAAQ,IAAI;AAAA,UACZ,OAAO;AAAA,QACT;AAAA,QACA,IAAI;AAAA,MACN,EAAE,KAAK;AACP,UAAI,YAAY,CAAC,YAAY,SAAS;AACpC,YAAI,MAAM,SAAS,OAAO;AAAA,MAC5B;AACA,UAAI,YAAY,SAAS;AACvB,YAAI,KAAK,YAAY;AACnB,gBAAM,QAAQ,UAAM,uCAAW,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE;AAAA,YACxD,IAAI;AAAA,YACJ;AAAA,cACE,gBAAgB;AAAA,cAChB,QAAQ;AAAA,YACV;AAAA,UACF;AACA,cAAI,OAAO;AACT,iBAAK,SAAS,IAAI;AAClB,gBAAI,CAAC,IAAI,eAAgB,KAAI,QAAQ,SAAS,SAAS,IAAI,CAAC;AAAA,UAC9D;AACA,eAAK,aAAa;AAClB,eAAK,mBAAmB;AAAA,QAC1B,OAAO;AACL,eAAK,SAAS,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,gBAAgB;AAAA,EAC7B;AAAA,EAEA,kBAAkB,YAA0B;AAC1C,UAAM,EAAE,oBAAoB,KAAK,KAAK,UAAU,OAAO,IAAI;AAE3D,UAAM,oBAAoB;AAAA,MACxB;AAAA,QACE,QAAQ,CAAC,QAAgB;AACvB,iBAAO,IAAI,QAAQ,UAAU,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI;AACF,wBAAkB,KAAK,SAAS,iBAAiB,aAAa;AAChE,QAAI;AACF,wBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEF,UAAM,SAAS,gBAAAC,QAAS,mBAAmB;AAC3C,WAAO,eAAe,WAAW,+BAAAH,OAAc;AAC/C,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,gBAAgB,kBAAkB,KAAK;AAAA,QACvC,oBAAoB,IAAI,SAAS,SAAS,IAAI,aAAa,CAAC;AAAA,QAC5D,SAAS,GAAG,SAAS,GAAG,MAAM,MAAM,EAAE,GAAG,sBAAsB,EAAE;AAAA,QACjE,SAAS;AAAA,QACT,UAAU,CAAC,QAAgB;AACzB,cAAI,CAAC,IAAK,MAAK;AACf,cAAI,KAAK,oBAAoB;AAC3B,oBAAQ,IAAI,KAAK,IAAI,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC;AAChE,cAAI,KAAK;AACP,iBAAK,oBAAoB;AACzB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,QAAQ,IAAG,2BAAK,mBAAkB,IAAI,SAAS,WAAW,CAAC;AAAA,QAC3D,OAAO;AAAA,MACT;AAAA,IACF,CAAC,EACE,KAAK,OAAO,YAA6B;AACxC,UAAI,QAAQ,QAAQ,QAAQ;AAC1B,aAAK,KAAK;AAAA,MACZ,OAAO;AACL,YAAI;AACF,cAAI,QAAQ,KAAK;AACf,kBAAM,cAAU,gBAAAI,SAAS;AACzB,kBAAM,QAAQ;AAAA,kBACZ,wBAAM,QAAQ,GAAG,EAAE,IAAI,OAAK,EAAE,QAAQ,QAAQ,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,cAIlD;AAAA,gBACE,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,IAAS;AAChB,gBAAM,MAAM,GAAG,SAAS;AACxB,cAAI,CAAC,IAAI,SAAS,gBAAgB;AAChC;AAAA,cACE;AAAA,cACA,SACE,cAAc,QACV,GAAG,SAAS,IACZ,KAAK,UAAU,IAAI,MAAM,CAAC,CAChC;AAAA,YACF;AAAA,QACJ,UAAE;AACA,iBAAO,KAAK,gBAAgB;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAe;AACrB,UAAI,MAAM,IAAI,OAAO;AACrB,WAAK,KAAK;AAAA,IACZ,CAAC;AAAA,EACL;AAAA,EAEA,OAAO,CAAC,UAAkB;AACxB,UAAM,EAAE,KAAK,SAAS,IAAI;AAC1B,YAAQ,mBAAmB,MAAM;AAEjC,QAAI,OAAO;AACT,UAAI,MAAM,MAAM,OAAO;AACvB,cAAQ,KAAK,CAAC;AAAA,IAChB,OAAO;AACL,UAAI,QAAQ,SAAS,IAAI,KAAK,CAAC;AAC/B,cAAQ,WAAW;AACnB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAI;AAEG,MAAM,QAAQ,MAAM;AAjR3B;AAqRE,MAAI,SAAO,aAAQ,SAAR,mBAAe,QAAO;AAC/B,WAAO;AAAA,MACL,MAAM,2BAAAL,QAAa;AAAA,MACnB,UAAU;AAAA,MAAC;AAAA,IACb;AACF,MAAI,CAAC,YAAa,eAAc,IAAI,eAAe;AACnD,SAAO;AACT;AAEA,QAAQ,GAAG,qBAAqB,SAAU,KAAK;AAE7C,UAAQ,IAAI,GAAG;AACjB,CAAC;AAED,QAAQ,GAAG,UAAU,MAAM;AACzB,uBAAO,QAAQ,iBAAiB;AAChC,QAAM,EAAE,KAAK;AAGf,CAAC;AAED,QAAQ,GAAG,WAAW,MAAM;AAC1B,uBAAO,QAAQ,kBAAkB;AACjC,QAAM,EAAE,KAAK;AACf,CAAC;AAED,QAAQ,MAAM,GAAG,QAAQ,SAAO;AAC9B,MAAK,OAAe,KAAU;AAC5B,YAAQ,IAAI,EAAE;AACd,yBAAO,KAAK,uCAAuC;AACnD,UAAM,EAAE,KAAK;AAAA,EACf;AACF,CAAC;",
4
+ "sourcesContent": ["import figlet from 'figlet';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-command-prompt';\nimport { split } from 'split-cmd';\nimport commands from './commands';\nimport { LogMessages } from './localisation/en-GB';\nimport CredentialProvider from './providers/CredentialProvider';\nimport { appRootDir } from './providers/file-provider';\nimport ContensisCli, { cliCommand } from './services/ContensisCliService';\nimport { Logging } from './util';\nimport { logError, Logger } from './util/logger';\nimport { LIB_VERSION } from './version';\n\nclass ContensisShell {\n private currentEnvironment!: string;\n private emptyInputCounter: number = 0;\n private cache!: SessionCache;\n private env!: EnvironmentCache;\n private firstStart = true;\n private userId: string = '';\n private log = Logger;\n private messages = LogMessages;\n\n private refreshEnvironment = () => {\n // Reload any persisted changes from the disk cache\n const { cache } = new ContensisCli([]);\n this.cache = cache; // read the cache to pre-load suggestions\n // console.log(`refreshing env w/${currentEnvironment}`);\n this.currentEnvironment = cache.currentEnvironment || '';\n const environments = cache.environments || {};\n this.env = environments[this.currentEnvironment];\n\n // Reload logging here to support changing language\n Logging('en-GB').then(({ messages, Log }) => {\n this.log = Log;\n this.messages = messages;\n });\n };\n\n constructor() {\n this.refreshEnvironment();\n inquirerPrompt.setConfig({\n history: {\n save: true,\n folder: appRootDir,\n limit: 100,\n blacklist: ['quit'],\n },\n });\n\n const { log, messages } = this;\n\n figlet.text(\n messages.app.contensis(),\n {\n font: 'Block',\n horizontalLayout: 'default',\n verticalLayout: 'default',\n width: process.stdout.columns,\n whitespaceBreak: true,\n },\n (err, data) => {\n if (err) {\n log.error(messages.app.unknownError());\n console.dir(err);\n return;\n }\n console.log(log.successText(data));\n console.log(log.infoText(messages.app.startup(LIB_VERSION)));\n console.log(log.helpText(messages.app.help()));\n\n this.start().catch(ex => log.error(ex));\n }\n );\n }\n\n restart = async () => {\n this.firstStart = false;\n this.log.line(); // add a line so we can see where the shell has been restarted\n await this.start();\n };\n\n start = async () => {\n this.refreshEnvironment();\n this.userId = '';\n const { currentEnvironment, env, log, messages } = this;\n\n if (env?.lastUserId) {\n const [credsErr, credentials] = await new CredentialProvider(\n {\n userId: env.lastUserId,\n alias: currentEnvironment,\n },\n env.passwordFallback\n ).Init();\n if (credsErr && !credentials.current) {\n log.error(credsErr.message);\n }\n if (credentials.current) {\n if (this.firstStart) {\n const token = await cliCommand(['login', env.lastUserId]).Login(\n env.lastUserId,\n {\n promptPassword: false,\n silent: true,\n }\n );\n if (token) {\n this.userId = env.lastUserId;\n if (!env.currentProject) log.warning(messages.projects.tip());\n }\n this.firstStart = false;\n this.refreshEnvironment();\n } else {\n this.userId = env.lastUserId;\n }\n }\n }\n await this.contensisPrompt();\n };\n\n contensisPrompt = async (): Promise<any> => {\n const { currentEnvironment, env, log, messages, userId } = this;\n\n const availableCommands = [\n {\n filter: (str: string) => {\n return str.replace(/ \\[.*$/, '');\n },\n },\n 'connect',\n ...Object.keys(this.cache.environments || {}).map(\n alias => `connect ${alias}`\n ),\n 'list envs',\n 'quit',\n ];\n\n if (currentEnvironment)\n availableCommands.push(\n 'login',\n 'list projects',\n 'set project',\n ...(this.env.projects || []).map(project => `set project ${project}`)\n );\n if (userId)\n availableCommands.push(\n 'copy field',\n 'create key',\n 'create project',\n 'create role',\n 'diff models',\n 'execute block action release',\n 'execute block action makelive',\n 'execute block action rollback',\n 'execute block action markasbroken',\n 'get assets',\n 'get block',\n 'get block logs',\n 'get contenttype',\n 'get component',\n 'get entries',\n 'get nodes',\n 'get model',\n 'get project',\n 'get proxy',\n 'get renderer',\n 'get role',\n 'get token',\n 'get version',\n 'get webhook',\n 'get workflow',\n 'import contenttypes',\n 'import components',\n 'import entries',\n 'import models',\n 'import nodes',\n 'list blocks',\n 'list contenttypes',\n 'list components',\n 'list keys',\n 'list models',\n 'list proxies',\n 'list renderers',\n 'list roles',\n 'list webhooks',\n 'list workflows',\n 'push block',\n 'remove components',\n 'remove contenttypes',\n 'remove key',\n 'remove entries',\n 'remove nodes',\n 'remove role',\n 'set project name',\n 'set project description',\n 'set role name',\n 'set role description',\n 'set role assignments',\n 'set role enabled',\n 'set role permissions'\n );\n\n const prompt = inquirer.createPromptModule();\n prompt.registerPrompt('command', inquirerPrompt);\n return prompt([\n {\n type: 'command',\n name: 'cmd',\n autoCompletion: availableCommands.sort(),\n autocompletePrompt: log.infoText(messages.app.autocomplete()),\n message: `${userId ? `${userId}@` : ''}${currentEnvironment || ''}>`,\n context: 0,\n validate: (val: string) => {\n if (!val) this.emptyInputCounter++;\n if (this.emptyInputCounter > 1)\n console.log(this.log.infoText(this.messages.app.suggestions()));\n if (val) {\n this.emptyInputCounter = 0;\n return true;\n }\n },\n prefix: `${env?.currentProject || log.infoText('contensis')}`,\n short: true,\n },\n ])\n .then(async (answers: { cmd: string }) => {\n if (answers.cmd === 'quit') {\n this.quit();\n } else {\n try {\n if (answers.cmd) {\n const program = commands();\n await program.parseAsync(\n split(answers.cmd).map(e => e.replace(/\\\\\"/g, '\"')),\n // answers.cmd\n // .match(/\"[^\"]+\"|[^\\s]+/g)\n // ?.map(e => e.replace(/\"(.+)\"/, '$1')),\n {\n from: 'user',\n }\n );\n }\n } catch (ex: any) {\n const str = ex.toString();\n if (!str.includes('CommanderError'))\n logError(\n ex,\n `Shell ${\n ex instanceof Error\n ? ex.toString()\n : JSON.stringify(ex, null, 2)\n }`\n );\n }\n return this.contensisPrompt();\n }\n })\n .catch((err: Error) => {\n log.error(err.message);\n this.quit();\n });\n };\n\n quit = (error?: Error) => {\n const { log, messages } = this;\n process.removeAllListeners('exit');\n\n if (error) {\n log.error(error.message);\n process.exit(1);\n } else {\n log.success(messages.app.quit());\n process.exitCode = 0;\n process.exit(0);\n }\n };\n}\n\nlet globalShell: ContensisShell;\n\nexport const shell = () => {\n // Return a benign function for shell().restart() when used in cli context\n // as some commands need to restart the shell to show an updated prompt\n // after successful connect / login / set project\n if (typeof process.argv?.[2] !== 'undefined')\n return {\n quit: ContensisCli.quit,\n restart() {},\n } as any;\n if (!globalShell) globalShell = new ContensisShell();\n return globalShell;\n};\n\nprocess.on('uncaughtException', function (err) {\n // Handle the error safely\n console.log(err);\n});\n\nprocess.on('SIGINT', () => {\n Logger.warning('received SIGINT');\n shell().quit();\n // setTimeout(() => {\n // }, 2000);\n});\n\nprocess.on('SIGTERM', () => {\n Logger.warning('received SIGTERM');\n shell().quit();\n});\n\nprocess.stdin.on('data', key => {\n if ((key as any) == '\\u0003') {\n console.log('');\n Logger.info(`[CTRL]+[C] detected, exiting shell...`);\n shell().quit();\n }\n});\n\n// process.env.http_proxy = 'http://127.0.0.1:8888';\n"],
5
+ "mappings": "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",
6
6
  "names": ["ContensisCli", "inquirerPrompt", "figlet", "CredentialProvider", "inquirer", "commands"]
7
7
  }
package/dist/version.js CHANGED
@@ -21,7 +21,7 @@ __export(version_exports, {
21
21
  LIB_VERSION: () => LIB_VERSION
22
22
  });
23
23
  module.exports = __toCommonJS(version_exports);
24
- const LIB_VERSION = "1.3.1-beta.1";
24
+ const LIB_VERSION = "1.3.1-beta.3";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  LIB_VERSION
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["export const LIB_VERSION = \"1.3.1-beta.1\";\n"],
4
+ "sourcesContent": ["export const LIB_VERSION = \"1.3.1-beta.3\";\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contensis-cli",
3
- "version": "1.3.1-beta.1",
3
+ "version": "1.3.1-beta.3",
4
4
  "description": "A fully featured Contensis command line interface with a shell UI provides simple and intuitive ways to manage or profile your content in any NodeJS terminal.",
5
5
  "repository": "https://github.com/contensis/cli",
6
6
  "homepage": "https://github.com/contensis/cli/tree/main/packages/contensis-cli#readme",
@@ -9,6 +9,7 @@ import {
9
9
  latest,
10
10
  mapContensisOpts,
11
11
  noCache,
12
+ noPublish,
12
13
  outputDetail,
13
14
  saveEntries,
14
15
  versionStatus,
@@ -45,6 +46,7 @@ export const makeCopyCommand = () => {
45
46
  .addOption(ignoreErrors)
46
47
  .addOption(outputDetail)
47
48
  .addOption(noCache)
49
+ .addOption(noPublish)
48
50
  .option(
49
51
  '--search <phrase>',
50
52
  'get entries with the search phrase, use quotes for multiple words'
@@ -49,6 +49,7 @@ export const mapContensisOpts = (opts: any = {}): MigrateRequest => ({
49
49
  noCache: !opts.cache, // arg is inverted automatically from `--no-cache` to `cache: false`
50
50
  includeDefaults: opts.defaults, // arg is inverted automatically from `--no-defaults` to `defaults: false`
51
51
  concurrency: opts.concurrency ? Number(opts.concurrency) : undefined,
52
+ noPublish: !opts.publish, // arg is inverted automatically from `--no-publish` to `publish: false`
52
53
  });
53
54
 
54
55
  /* Output options */
@@ -177,7 +178,12 @@ export const concurrency = new Option(
177
178
 
178
179
  export const noCache = new Option(
179
180
  '--no-cache',
180
- 'add this flag to ignore internal cache and rebuild all resources from scratch'
181
+ 'ignore internal cache and rebuild all resources from scratch'
182
+ );
183
+
184
+ export const noPublish = new Option(
185
+ '--no-publish',
186
+ 'don\'t publish created or updated entries'
181
187
  );
182
188
 
183
189
  export const addConnectOptions = (program: Command) =>
@@ -10,6 +10,7 @@ import {
10
10
  latest,
11
11
  mapContensisOpts,
12
12
  noCache,
13
+ noPublish,
13
14
  outputDetail,
14
15
  saveEntries,
15
16
  versionStatus,
@@ -139,6 +140,7 @@ Example call:
139
140
  .addOption(outputDetail)
140
141
  .addOption(ignoreErrors)
141
142
  .addOption(noCache)
143
+ .addOption(noPublish)
142
144
  .addOption(saveEntries)
143
145
  .addHelpText(
144
146
  'after',
@@ -107,7 +107,7 @@ class ContensisCli {
107
107
  const environments = this.cache.environments || {};
108
108
 
109
109
  if (!currentEnvironment) return {} as EnvironmentCache;
110
- else if (!!environments[currentEnvironment])
110
+ else if (environments[currentEnvironment])
111
111
  return environments[currentEnvironment];
112
112
  else {
113
113
  return {
@@ -126,14 +126,14 @@ class ContensisCli {
126
126
  ) {
127
127
  // console.log('args: ', JSON.stringify(args, null, 2));
128
128
 
129
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
130
129
  const [exe, script, verb = '', noun = '', ...restArgs] = args;
131
130
  this.verb = verb?.toLowerCase();
132
131
  this.noun = noun?.toLowerCase();
133
132
  this.thirdArg = restArgs?.[0];
134
133
 
135
- const commandText = `${this.verb} ${this.noun} ${restArgs ? restArgs.join(' ') : ''
136
- }`.trim();
134
+ const commandText = `${this.verb} ${this.noun} ${
135
+ restArgs ? restArgs.join(' ') : ''
136
+ }`.trim();
137
137
 
138
138
  this.session = new SessionCacheProvider();
139
139
 
@@ -295,12 +295,12 @@ class ContensisCli {
295
295
  commit?: boolean;
296
296
  fromFile?: string;
297
297
  importDataType?:
298
- | 'entries'
299
- | 'contentTypes'
300
- | 'components'
301
- | 'models'
302
- | 'nodes'
303
- | 'user-input';
298
+ | 'entries'
299
+ | 'contentTypes'
300
+ | 'components'
301
+ | 'models'
302
+ | 'nodes'
303
+ | 'user-input';
304
304
  }) => {
305
305
  const source: 'contensis' | 'file' = fromFile ? 'file' : 'contensis';
306
306
 
@@ -645,9 +645,10 @@ class ContensisCli {
645
645
  color = chalk.white;
646
646
  }
647
647
  console.log(
648
- `${nextCurrentProject === project.id
649
- ? `>> ${log.boldText(color(project.id))}`
650
- : ` ${color(project.id)}`
648
+ `${
649
+ nextCurrentProject === project.id
650
+ ? `>> ${log.boldText(color(project.id))}`
651
+ : ` ${color(project.id)}`
651
652
  } ${log.infoText(
652
653
  `[${project.supportedLanguages
653
654
  .map(l =>
@@ -762,7 +763,8 @@ class ContensisCli {
762
763
  modifiedBy,
763
764
  } of apiKeys) {
764
765
  console.log(
765
- ` - ${name}${description ? ` (${description})` : ''
766
+ ` - ${name}${
767
+ description ? ` (${description})` : ''
766
768
  } [${dateModified.toString().substring(0, 10)} ${modifiedBy}]`
767
769
  );
768
770
  console.log(` ${id}`);
@@ -1191,8 +1193,8 @@ class ContensisCli {
1191
1193
  // Models to output to console
1192
1194
  const returnModels = modelIds?.length
1193
1195
  ? models?.filter((m: Model) =>
1194
- modelIds.some(id => id.toLowerCase() === m.id.toLowerCase())
1195
- )
1196
+ modelIds.some(id => id.toLowerCase() === m.id.toLowerCase())
1197
+ )
1196
1198
  : undefined;
1197
1199
  const exportResources: (ContentType | Component)[] = [];
1198
1200
 
@@ -1278,17 +1280,22 @@ class ContensisCli {
1278
1280
  const hasAny =
1279
1281
  components + contentTypes + dependencies + dependencyOf;
1280
1282
  log.raw(
1281
- ` - ${log.highlightText(log.boldText(model.id))} ${hasAny
1282
- ? log.infoText(
1283
- `{ ${components ? `components: ${components}, ` : ''
1284
- }${contentTypes
1285
- ? `contentTypes: ${contentTypes}, `
1286
- : ''
1287
- }${defaults ? `defaults: ${defaults}, ` : ''}${dependencies ? `references: ${dependencies}, ` : ''
1288
- }${dependencyOf ? `required by: ${dependencyOf}` : ''
1289
- } }`
1290
- )
1291
- : ''
1283
+ ` - ${log.highlightText(log.boldText(model.id))} ${
1284
+ hasAny
1285
+ ? log.infoText(
1286
+ `{ ${
1287
+ components ? `components: ${components}, ` : ''
1288
+ }${
1289
+ contentTypes
1290
+ ? `contentTypes: ${contentTypes}, `
1291
+ : ''
1292
+ }${defaults ? `defaults: ${defaults}, ` : ''}${
1293
+ dependencies ? `references: ${dependencies}, ` : ''
1294
+ }${
1295
+ dependencyOf ? `required by: ${dependencyOf}` : ''
1296
+ } }`
1297
+ )
1298
+ : ''
1292
1299
  }`
1293
1300
  );
1294
1301
  }
@@ -1419,7 +1426,8 @@ class ContensisCli {
1419
1426
  for (const contentType of contentTypes) {
1420
1427
  const fieldsLength = contentType.fields?.length || 0;
1421
1428
  console.log(
1422
- ` - ${contentType.id} [${fieldsLength} field${fieldsLength !== 1 ? 's' : ''
1429
+ ` - ${contentType.id} [${fieldsLength} field${
1430
+ fieldsLength !== 1 ? 's' : ''
1423
1431
  }]`
1424
1432
  );
1425
1433
  }
@@ -1518,10 +1526,9 @@ class ContensisCli {
1518
1526
  contentType.projectId = currentProject;
1519
1527
  delete contentType.uuid;
1520
1528
 
1521
- const [err, , createStatus] =
1522
- await contensis.models.targetRepos[
1523
- currentProject
1524
- ].repo.UpsertContentType(false, contentType);
1529
+ const [err, , createStatus] = await contensis.models.targetRepos[
1530
+ currentProject
1531
+ ].repo.UpsertContentType(false, contentType);
1525
1532
 
1526
1533
  if (err) log.error(err.message, err);
1527
1534
  if (createStatus) {
@@ -1533,7 +1540,7 @@ class ContensisCli {
1533
1540
  )
1534
1541
  );
1535
1542
  // print the content type to console
1536
- await this.HandleFormattingAndOutput(contentType, () => { });
1543
+ await this.HandleFormattingAndOutput(contentType, () => {});
1537
1544
  }
1538
1545
  }
1539
1546
  else {
@@ -1611,7 +1618,8 @@ class ContensisCli {
1611
1618
  for (const component of components) {
1612
1619
  const fieldsLength = component.fields?.length || 0;
1613
1620
  console.log(
1614
- ` - ${component.id} [${fieldsLength} field${fieldsLength !== 1 ? 's' : ''
1621
+ ` - ${component.id} [${fieldsLength} field${
1622
+ fieldsLength !== 1 ? 's' : ''
1615
1623
  }]`
1616
1624
  );
1617
1625
  }
@@ -1709,10 +1717,9 @@ class ContensisCli {
1709
1717
  component.projectId = currentProject;
1710
1718
  delete component.uuid;
1711
1719
 
1712
- const [err, , createStatus] =
1713
- await contensis.models.targetRepos[
1714
- currentProject
1715
- ].repo.UpsertComponent(false, component);
1720
+ const [err, , createStatus] = await contensis.models.targetRepos[
1721
+ currentProject
1722
+ ].repo.UpsertComponent(false, component);
1716
1723
 
1717
1724
  if (err) log.error(err.message, err);
1718
1725
  if (createStatus) {
@@ -1724,7 +1731,7 @@ class ContensisCli {
1724
1731
  )
1725
1732
  );
1726
1733
  // print the component to console
1727
- await this.HandleFormattingAndOutput(component, () => { });
1734
+ await this.HandleFormattingAndOutput(component, () => {});
1728
1735
  }
1729
1736
  }
1730
1737
  else {
@@ -1793,15 +1800,23 @@ class ContensisCli {
1793
1800
  // Add a full sys.uri to asset entries
1794
1801
  // Add sys.metadata.exportCms
1795
1802
  // Add sys.metadata.exportProjectId
1803
+ const nodes = contensis.content.source.nodes.raw;
1804
+ const combinedOutput = [...entries, ...nodes];
1796
1805
 
1797
- await this.HandleFormattingAndOutput(entries, () =>
1806
+ await this.HandleFormattingAndOutput(combinedOutput, () => {
1798
1807
  // print the entries to console
1799
1808
  logEntitiesTable({
1800
1809
  entries,
1801
1810
  projectId: currentProject,
1802
1811
  fields: contensis.payload.query?.fields,
1803
- })
1804
- );
1812
+ });
1813
+ if (nodes.length)
1814
+ logEntitiesTable({
1815
+ nodes,
1816
+ projectId: currentProject,
1817
+ fields: contensis.payload.query?.fields,
1818
+ });
1819
+ });
1805
1820
  } else {
1806
1821
  log.warning(messages.models.noList(currentProject));
1807
1822
  log.help(messages.connect.tip());
@@ -1842,7 +1857,11 @@ class ContensisCli {
1842
1857
  const { entries, nodes } = contensis.content.targets[currentProject];
1843
1858
 
1844
1859
  const output = saveEntries
1845
- ? entries.migrate?.map(me => me.toJSON())
1860
+ ? // include entries and dependent nodes when saving entries
1861
+ [
1862
+ entries.migrate?.map(me => me.toJSON()) || [],
1863
+ nodes.migrateNodes.map(mn => mn.node),
1864
+ ].flat()
1846
1865
  : result;
1847
1866
  await this.HandleFormattingAndOutput(output, () => {
1848
1867
  // print the migrateResult to console
@@ -1876,13 +1895,13 @@ class ContensisCli {
1876
1895
  commit,
1877
1896
  commit
1878
1897
  ? (result.migrateResult?.created || 0) +
1879
- (result.migrateResult?.updated || 0)
1898
+ (result.migrateResult?.updated || 0)
1880
1899
  : result.entriesToMigrate[currentProject].totalCount,
1881
1900
  commit
1882
1901
  ? (result.nodesResult?.created || 0) +
1883
- (result.nodesResult?.updated || 0)
1902
+ (result.nodesResult?.updated || 0)
1884
1903
  : (result.nodesToMigrate?.[currentProject]
1885
- .totalCount as number) || 0
1904
+ .totalCount as number) || 0
1886
1905
  )
1887
1906
  );
1888
1907
  if (!commit) {
@@ -1935,8 +1954,8 @@ class ContensisCli {
1935
1954
  if (result) {
1936
1955
  const output = saveEntries
1937
1956
  ? contensis.content.copy.targets[currentProject].entries.migrate?.map(
1938
- me => me.toJSON()
1939
- )
1957
+ me => me.toJSON()
1958
+ )
1940
1959
  : result;
1941
1960
  await this.HandleFormattingAndOutput(output, () => {
1942
1961
  // print the migrateResult to console
@@ -1962,7 +1981,7 @@ class ContensisCli {
1962
1981
  commit,
1963
1982
  commit
1964
1983
  ? (result.migrateResult?.created || 0) +
1965
- (result.migrateResult?.updated || 0)
1984
+ (result.migrateResult?.updated || 0)
1966
1985
  : result.entriesToMigrate[currentProject].totalCount
1967
1986
  )
1968
1987
  );
@@ -2153,14 +2172,14 @@ class ContensisCli {
2153
2172
 
2154
2173
  const filteredResults = subscriptionIdsOrNames?.length
2155
2174
  ? webhooks?.filter(
2156
- w =>
2157
- subscriptionIdsOrNames?.some(idname =>
2158
- w.name?.toLowerCase().includes(idname.toLowerCase())
2159
- ) ||
2160
- subscriptionIdsOrNames?.some(
2161
- id => id.toLowerCase() === w.id.toLowerCase()
2162
- )
2163
- )
2175
+ w =>
2176
+ subscriptionIdsOrNames?.some(idname =>
2177
+ w.name?.toLowerCase().includes(idname.toLowerCase())
2178
+ ) ||
2179
+ subscriptionIdsOrNames?.some(
2180
+ id => id.toLowerCase() === w.id.toLowerCase()
2181
+ )
2182
+ )
2164
2183
  : webhooks;
2165
2184
 
2166
2185
  if (Array.isArray(filteredResults)) {
@@ -2187,7 +2206,8 @@ class ContensisCli {
2187
2206
  version.modified || version.created
2188
2207
  )
2189
2208
  .toString()
2190
- .substring(0, 10)} ${version.modifiedBy || version.createdBy
2209
+ .substring(0, 10)} ${
2210
+ version.modifiedBy || version.createdBy
2191
2211
  }]`
2192
2212
  )
2193
2213
  );
@@ -2256,12 +2276,14 @@ class ContensisCli {
2256
2276
  versionsSinceLive,
2257
2277
  } of blocks) {
2258
2278
  console.log(
2259
- ` - ${id}${description ? ` (${description})` : ''}${madeLive
2260
- ? ` [${madeLive.toString().substring(0, 10)} v${liveVersion}]`
2261
- : ''
2262
- }${versionsSinceLive
2263
- ? log.warningText(` +${versionsSinceLive}`)
2264
- : ''
2279
+ ` - ${id}${description ? ` (${description})` : ''}${
2280
+ madeLive
2281
+ ? ` [${madeLive.toString().substring(0, 10)} v${liveVersion}]`
2282
+ : ''
2283
+ }${
2284
+ versionsSinceLive
2285
+ ? log.warningText(` +${versionsSinceLive}`)
2286
+ : ''
2265
2287
  }`
2266
2288
  );
2267
2289
  for (const branch of branches)
@@ -2326,11 +2348,11 @@ class ContensisCli {
2326
2348
  block,
2327
2349
  !version
2328
2350
  ? {
2329
- showImage: false,
2330
- showSource: true,
2331
- showStaticPaths: false,
2332
- showStatus: false,
2333
- }
2351
+ showImage: false,
2352
+ showSource: true,
2353
+ showStaticPaths: false,
2354
+ showStatus: false,
2355
+ }
2334
2356
  : undefined
2335
2357
  );
2336
2358
  });
@@ -2357,9 +2379,8 @@ class ContensisCli {
2357
2379
  const contensis = await this.ConnectContensis();
2358
2380
  if (contensis) {
2359
2381
  // Push new block version
2360
- const [err, blockVersion] = await contensis.blocks.PushBlockVersion(
2361
- block
2362
- );
2382
+ const [err, blockVersion] =
2383
+ await contensis.blocks.PushBlockVersion(block);
2363
2384
  if (!err) {
2364
2385
  log.success(
2365
2386
  messages.blocks.pushed(
@@ -2436,9 +2457,8 @@ class ContensisCli {
2436
2457
 
2437
2458
  // If action is release and version is latest, find the latest version number
2438
2459
  if (action === 'release' && version === 'latest') {
2439
- const [getErr, blockVersion] = await this.GetLatestBlockVersion(
2440
- blockId
2441
- );
2460
+ const [getErr, blockVersion] =
2461
+ await this.GetLatestBlockVersion(blockId);
2442
2462
 
2443
2463
  if (getErr) {
2444
2464
  // Log error getting latest block version no
@@ -2525,7 +2545,8 @@ class ContensisCli {
2525
2545
  await this.HandleFormattingAndOutput(renderLogs, () => {
2526
2546
  // print the logs to console
2527
2547
  console.log(
2528
- ` - ${blockId} ${branch} ${Number(version) ? `v${version}` : version
2548
+ ` - ${blockId} ${branch} ${
2549
+ Number(version) ? `v${version}` : version
2529
2550
  } ${dataCenter ? `[${dataCenter}]` : ''}`
2530
2551
  );
2531
2552
  log.line();
@@ -2578,11 +2599,11 @@ class ContensisCli {
2578
2599
 
2579
2600
  const [lastErr, lastLogs] = following
2580
2601
  ? await contensis.blocks.GetBlockLogs({
2581
- blockId,
2582
- branchId: branch,
2583
- version,
2584
- dataCenter,
2585
- })
2602
+ blockId,
2603
+ branchId: branch,
2604
+ version,
2605
+ dataCenter,
2606
+ })
2586
2607
  : [null, null];
2587
2608
 
2588
2609
  if (lastLogs) {
@@ -2630,7 +2651,8 @@ class ContensisCli {
2630
2651
  log.success(messages.proxies.list(currentEnv, env.currentProject));
2631
2652
  for (const { id, name, description, endpoints, version } of proxies) {
2632
2653
  console.log(
2633
- ` - ${name} [${version.versionNo
2654
+ ` - ${name} [${
2655
+ version.versionNo
2634
2656
  }] ${id} ${log.infoText`${description}`}`
2635
2657
  );
2636
2658
  for (const [language, endpoint] of Object.entries(
@@ -2684,8 +2706,9 @@ class ContensisCli {
2684
2706
  for (const rule of rules)
2685
2707
  if (rule.return)
2686
2708
  console.log(
2687
- log.infoText` ${rule.return.endpointId ? 'endpointId' : 'blockId'
2688
- }: ${rule.return.endpointId || rule.return.blockId}`
2709
+ log.infoText` ${
2710
+ rule.return.endpointId ? 'endpointId' : 'blockId'
2711
+ }: ${rule.return.endpointId || rule.return.blockId}`
2689
2712
  );
2690
2713
  }
2691
2714
  });