contensis-cli 1.3.1-beta.7 → 1.3.1-beta.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.
- package/dist/commands/copy.js +1 -1
- package/dist/commands/copy.js.map +2 -2
- package/dist/commands/globalOptions.js +1 -0
- package/dist/commands/globalOptions.js.map +2 -2
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +2 -2
- package/dist/commands/update.js +70 -0
- package/dist/commands/update.js.map +7 -0
- package/dist/services/ContensisCliService.js +56 -0
- package/dist/services/ContensisCliService.js.map +2 -2
- package/dist/shell.js +2 -1
- package/dist/shell.js.map +2 -2
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/esbuild.config.js +3 -3
- package/package.json +28 -29
- package/src/commands/copy.ts +1 -1
- package/src/commands/globalOptions.ts +1 -0
- package/src/commands/index.ts +4 -0
- package/src/commands/update.ts +84 -0
- package/src/services/ContensisCliService.ts +80 -0
- package/src/shell.ts +2 -1
- package/src/version.ts +1 -1
package/dist/shell.js
CHANGED
|
@@ -217,7 +217,8 @@ class ContensisShell {
|
|
|
217
217
|
"set role description",
|
|
218
218
|
"set role assignments",
|
|
219
219
|
"set role enabled",
|
|
220
|
-
"set role permissions"
|
|
220
|
+
"set role permissions",
|
|
221
|
+
"update field"
|
|
221
222
|
);
|
|
222
223
|
const prompt = import_inquirer.default.createPromptModule();
|
|
223
224
|
prompt.registerPrompt("command", import_inquirer_command_prompt.default);
|
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 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 'remove env',\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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
|
|
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 'remove env',\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 'update field'\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.
|
|
24
|
+
const LIB_VERSION = "1.3.1-beta.8";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIB_VERSION
|
package/dist/version.js.map
CHANGED
|
@@ -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.
|
|
4
|
+
"sourcesContent": ["export const LIB_VERSION = \"1.3.1-beta.8\";\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/esbuild.config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const rimraf = require('rimraf');
|
|
1
|
+
const { rimraf } = require('rimraf');
|
|
2
2
|
const esbuild = require('esbuild');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
4
|
const { globPlugin } = require('esbuild-plugin-glob');
|
|
@@ -11,7 +11,7 @@ const completed = `${chalk.green('[contensis-cli]')} Build successful 👍\n`;
|
|
|
11
11
|
console.time(completed);
|
|
12
12
|
console.time(' - rimraf complete');
|
|
13
13
|
|
|
14
|
-
rimraf('./dist'
|
|
14
|
+
rimraf('./dist').then(() => {
|
|
15
15
|
console.timeEnd(' - rimraf complete');
|
|
16
16
|
console.time(' - esbuild complete');
|
|
17
17
|
esbuild
|
|
@@ -43,5 +43,5 @@ rimraf('./dist', () => {
|
|
|
43
43
|
replaceTscAliasPaths();
|
|
44
44
|
console.timeEnd(' - replace alias paths');
|
|
45
45
|
console.timeEnd(completed);
|
|
46
|
-
})
|
|
46
|
+
});
|
|
47
47
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "contensis-cli",
|
|
3
|
-
"version": "1.3.1-beta.
|
|
3
|
+
"version": "1.3.1-beta.8",
|
|
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",
|
|
@@ -24,50 +24,49 @@
|
|
|
24
24
|
"author": "Zengenti",
|
|
25
25
|
"license": "ISC",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@action-validator/core": "^0.
|
|
28
|
-
"adm-zip": "^0.5.
|
|
27
|
+
"@action-validator/core": "^0.6.0",
|
|
28
|
+
"adm-zip": "^0.5.16",
|
|
29
29
|
"app-root-path": "^3.1.0",
|
|
30
30
|
"chalk": "^4.1.2",
|
|
31
|
-
"commander": "^
|
|
32
|
-
"csv": "^6.
|
|
33
|
-
"dayjs": "^1.11.
|
|
34
|
-
"diff": "^
|
|
35
|
-
"figlet": "^1.
|
|
31
|
+
"commander": "^12.1.0",
|
|
32
|
+
"csv": "^6.3.11",
|
|
33
|
+
"dayjs": "^1.11.13",
|
|
34
|
+
"diff": "^7.0.0",
|
|
35
|
+
"figlet": "^1.8.0",
|
|
36
36
|
"flat": "^5.0.2",
|
|
37
37
|
"giturl": "^2.0.0",
|
|
38
|
-
"hosted-git-info": "^
|
|
38
|
+
"hosted-git-info": "^8.0.2",
|
|
39
39
|
"inquirer-command-prompt": "^0.1.0",
|
|
40
|
-
"jsonpath-mapper": "^1.1.0",
|
|
41
40
|
"keytar": "^7.9.0",
|
|
42
41
|
"lodash": "^4.17.21",
|
|
43
|
-
"migratortron": "^1.0.0-beta.
|
|
44
|
-
"nanospinner": "^1.
|
|
42
|
+
"migratortron": "^1.0.0-beta.70",
|
|
43
|
+
"nanospinner": "^1.2.0",
|
|
45
44
|
"node-fetch": "^2.6.7",
|
|
46
45
|
"parse-git-config": "^3.0.0",
|
|
47
|
-
"patch-package": "^
|
|
46
|
+
"patch-package": "^8.0.0",
|
|
48
47
|
"printable-characters": "^1.0.42",
|
|
49
48
|
"split-cmd": "^1.1.0",
|
|
50
|
-
"xml2js": "^0.
|
|
51
|
-
"yaml": "^2.
|
|
49
|
+
"xml2js": "^0.6.2",
|
|
50
|
+
"yaml": "^2.6.1"
|
|
52
51
|
},
|
|
53
52
|
"devDependencies": {
|
|
54
|
-
"@octokit/types": "^
|
|
55
|
-
"@types/adm-zip": "^0.5.
|
|
56
|
-
"@types/figlet": "^1.
|
|
57
|
-
"@types/flat": "^5.0.
|
|
58
|
-
"@types/hosted-git-info": "^3.0.
|
|
59
|
-
"@types/inquirer": "^
|
|
60
|
-
"@types/json2csv": "^5.0.
|
|
61
|
-
"@types/lodash": "^4.
|
|
62
|
-
"@types/node-fetch": "^2.6.
|
|
63
|
-
"@types/parse-git-config": "^3.0.
|
|
64
|
-
"@types/xml2js": "^0.4.
|
|
53
|
+
"@octokit/types": "^13.6.2",
|
|
54
|
+
"@types/adm-zip": "^0.5.7",
|
|
55
|
+
"@types/figlet": "^1.7.0",
|
|
56
|
+
"@types/flat": "^5.0.5",
|
|
57
|
+
"@types/hosted-git-info": "^3.0.5",
|
|
58
|
+
"@types/inquirer": "^9.0.7",
|
|
59
|
+
"@types/json2csv": "^5.0.7",
|
|
60
|
+
"@types/lodash": "^4.17.13",
|
|
61
|
+
"@types/node-fetch": "^2.6.12",
|
|
62
|
+
"@types/parse-git-config": "^3.0.4",
|
|
63
|
+
"@types/xml2js": "^0.4.14",
|
|
65
64
|
"esbuild": "^0.24.0",
|
|
66
65
|
"esbuild-node-externals": "^1.15.0",
|
|
67
66
|
"esbuild-plugin-glob": "^2.2.3",
|
|
68
67
|
"nodemon": "^2.0.18",
|
|
69
|
-
"rimraf": "^
|
|
70
|
-
"tsc-alias": "^1.
|
|
71
|
-
"typescript": "^5.
|
|
68
|
+
"rimraf": "^6.0.1",
|
|
69
|
+
"tsc-alias": "^1.8.10",
|
|
70
|
+
"typescript": "^5.7.2"
|
|
72
71
|
}
|
|
73
72
|
}
|
package/src/commands/copy.ts
CHANGED
|
@@ -16,6 +16,7 @@ export const mapContensisOpts = (opts: any = {}): MigrateRequest => ({
|
|
|
16
16
|
: undefined,
|
|
17
17
|
models: opts.modelIds,
|
|
18
18
|
copyField: opts.copyField,
|
|
19
|
+
updateField: opts.updateField,
|
|
19
20
|
// convert various cli options into MigrateRequest.query format
|
|
20
21
|
query:
|
|
21
22
|
opts.id ||
|
package/src/commands/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ import { makeLoginCommand } from './login';
|
|
|
20
20
|
import { makePushCommand } from './push';
|
|
21
21
|
import { makeRemoveCommand } from './remove';
|
|
22
22
|
import { makeSetCommand } from './set';
|
|
23
|
+
import { makeUpdateCommand } from './update';
|
|
23
24
|
|
|
24
25
|
const commands = () => {
|
|
25
26
|
const program = new Command()
|
|
@@ -89,6 +90,9 @@ const commands = () => {
|
|
|
89
90
|
program.addCommand(
|
|
90
91
|
addConnectOptions(makeSetCommand()).copyInheritedSettings(program)
|
|
91
92
|
);
|
|
93
|
+
program.addCommand(
|
|
94
|
+
addGlobalOptions(makeUpdateCommand()).copyInheritedSettings(program)
|
|
95
|
+
);
|
|
92
96
|
|
|
93
97
|
return program;
|
|
94
98
|
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { UpdateField } from 'migratortron';
|
|
3
|
+
import { cliCommand } from '~/services/ContensisCliService';
|
|
4
|
+
import {
|
|
5
|
+
commit,
|
|
6
|
+
concurrency,
|
|
7
|
+
entryId,
|
|
8
|
+
ignoreErrors,
|
|
9
|
+
latest,
|
|
10
|
+
mapContensisOpts,
|
|
11
|
+
noCache,
|
|
12
|
+
noPublish,
|
|
13
|
+
outputDetail,
|
|
14
|
+
saveEntries,
|
|
15
|
+
versionStatus,
|
|
16
|
+
zenql,
|
|
17
|
+
} from './globalOptions';
|
|
18
|
+
|
|
19
|
+
export const makeUpdateCommand = () => {
|
|
20
|
+
const update = new Command()
|
|
21
|
+
.command('update')
|
|
22
|
+
.description('update command')
|
|
23
|
+
.addHelpText('after', `\n`)
|
|
24
|
+
.showHelpAfterError(true)
|
|
25
|
+
.exitOverride();
|
|
26
|
+
|
|
27
|
+
update
|
|
28
|
+
.command('field')
|
|
29
|
+
.description('find and replace within entry fields')
|
|
30
|
+
.argument('<fieldId>', 'the id of the field to update')
|
|
31
|
+
.argument(
|
|
32
|
+
'<find>',
|
|
33
|
+
'the string to find within each entry/field (surround a phrase in double quotes)'
|
|
34
|
+
)
|
|
35
|
+
.argument(
|
|
36
|
+
'<replace>',
|
|
37
|
+
'the string to replace with (surround a phrase in double quotes)'
|
|
38
|
+
)
|
|
39
|
+
.addOption(commit)
|
|
40
|
+
.addOption(concurrency)
|
|
41
|
+
.addOption(ignoreErrors)
|
|
42
|
+
.addOption(outputDetail.default('changes'))
|
|
43
|
+
.addOption(noCache)
|
|
44
|
+
.addOption(noPublish)
|
|
45
|
+
.option(
|
|
46
|
+
'--search <phrase>',
|
|
47
|
+
'get entries with the search phrase, use quotes for multiple words'
|
|
48
|
+
)
|
|
49
|
+
.addOption(entryId)
|
|
50
|
+
.addOption(zenql)
|
|
51
|
+
.addOption(latest)
|
|
52
|
+
.addOption(versionStatus)
|
|
53
|
+
.addOption(saveEntries)
|
|
54
|
+
.usage('<fieldId> <find> <replace> (all arguments required)')
|
|
55
|
+
.addHelpText(
|
|
56
|
+
'after',
|
|
57
|
+
`
|
|
58
|
+
Example call:
|
|
59
|
+
> update field authorName "Emma Smith" "Emma Davies" --zenql "sys.contentTypeId=blog"\n`
|
|
60
|
+
)
|
|
61
|
+
.action(
|
|
62
|
+
async (fieldId: string, find: string, replace: string, opts: any) => {
|
|
63
|
+
const updateField: UpdateField = {
|
|
64
|
+
fieldId,
|
|
65
|
+
find,
|
|
66
|
+
replace,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
return await cliCommand(
|
|
70
|
+
['update', 'field', fieldId, find, replace],
|
|
71
|
+
opts,
|
|
72
|
+
mapContensisOpts({ updateField, ...opts })
|
|
73
|
+
).UpdateEntryField({
|
|
74
|
+
commit: opts.commit,
|
|
75
|
+
fromFile: opts.fromFile,
|
|
76
|
+
logOutput: opts.outputDetail,
|
|
77
|
+
saveEntries: opts.saveEntries,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
return update;
|
|
83
|
+
};
|
|
84
|
+
|
|
@@ -2044,6 +2044,86 @@ class ContensisCli {
|
|
|
2044
2044
|
}
|
|
2045
2045
|
};
|
|
2046
2046
|
|
|
2047
|
+
UpdateEntryField = async ({
|
|
2048
|
+
commit,
|
|
2049
|
+
fromFile,
|
|
2050
|
+
logOutput,
|
|
2051
|
+
saveEntries,
|
|
2052
|
+
}: {
|
|
2053
|
+
commit: boolean;
|
|
2054
|
+
fromFile: string;
|
|
2055
|
+
logOutput: string;
|
|
2056
|
+
saveEntries: boolean;
|
|
2057
|
+
}) => {
|
|
2058
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
2059
|
+
|
|
2060
|
+
const contensis = await this.ConnectContensisImport({
|
|
2061
|
+
commit,
|
|
2062
|
+
fromFile,
|
|
2063
|
+
importDataType: 'entries',
|
|
2064
|
+
});
|
|
2065
|
+
|
|
2066
|
+
if (contensis) {
|
|
2067
|
+
log.line();
|
|
2068
|
+
if (contensis.isPreview) {
|
|
2069
|
+
log.success(messages.migrate.preview());
|
|
2070
|
+
} else {
|
|
2071
|
+
log.warning(messages.migrate.commit());
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
const [err, result] = await to(
|
|
2075
|
+
contensis.content.update.UpdateFieldContent()
|
|
2076
|
+
);
|
|
2077
|
+
|
|
2078
|
+
if (err) logError(err);
|
|
2079
|
+
if (result) {
|
|
2080
|
+
const output = saveEntries
|
|
2081
|
+
? contensis.content.update.targets[
|
|
2082
|
+
currentProject
|
|
2083
|
+
].entries.migrate?.map(me => me.toJSON())
|
|
2084
|
+
: result;
|
|
2085
|
+
await this.HandleFormattingAndOutput(output, () => {
|
|
2086
|
+
// print the migrateResult to console
|
|
2087
|
+
printEntriesMigrateResult(this, result, {
|
|
2088
|
+
showAll: logOutput === 'all',
|
|
2089
|
+
showDiff: logOutput === 'all' || logOutput === 'changes',
|
|
2090
|
+
showChanged: logOutput === 'changes',
|
|
2091
|
+
});
|
|
2092
|
+
});
|
|
2093
|
+
}
|
|
2094
|
+
|
|
2095
|
+
if (
|
|
2096
|
+
result &&
|
|
2097
|
+
!err &&
|
|
2098
|
+
!result.errors?.length &&
|
|
2099
|
+
((!commit && result.entriesToMigrate[currentProject].totalCount) ||
|
|
2100
|
+
(commit &&
|
|
2101
|
+
(result.migrateResult?.created || result.migrateResult?.updated)))
|
|
2102
|
+
) {
|
|
2103
|
+
log.success(
|
|
2104
|
+
messages.entries.imported(
|
|
2105
|
+
currentEnv,
|
|
2106
|
+
commit,
|
|
2107
|
+
commit
|
|
2108
|
+
? (result.migrateResult?.created || 0) +
|
|
2109
|
+
(result.migrateResult?.updated || 0)
|
|
2110
|
+
: result.entriesToMigrate[currentProject].totalCount
|
|
2111
|
+
)
|
|
2112
|
+
);
|
|
2113
|
+
if (!commit) {
|
|
2114
|
+
log.raw(``);
|
|
2115
|
+
log.help(messages.entries.commitTip());
|
|
2116
|
+
}
|
|
2117
|
+
} else {
|
|
2118
|
+
log.error(messages.entries.failedImport(currentEnv), err);
|
|
2119
|
+
if (!result?.entriesToMigrate?.[currentProject]?.totalCount)
|
|
2120
|
+
log.help(messages.entries.notFound(currentEnv));
|
|
2121
|
+
}
|
|
2122
|
+
} else {
|
|
2123
|
+
log.warning(messages.models.noList(currentProject));
|
|
2124
|
+
log.help(messages.connect.tip());
|
|
2125
|
+
}
|
|
2126
|
+
};
|
|
2047
2127
|
GetNodes = async (rootPath: string, depth = 0) => {
|
|
2048
2128
|
const { currentProject, log, messages } = this;
|
|
2049
2129
|
const contensis = await this.ConnectContensis();
|
package/src/shell.ts
CHANGED
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const LIB_VERSION = "1.3.1-beta.
|
|
1
|
+
export const LIB_VERSION = "1.3.1-beta.8";
|