contensis-cli 1.3.1-beta.6 → 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/push.js +89 -0
- package/dist/commands/push.js.map +3 -3
- package/dist/commands/update.js +70 -0
- package/dist/commands/update.js.map +7 -0
- package/dist/services/ContensisCliService.js +65 -6
- 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/push.ts +125 -1
- package/src/commands/update.ts +84 -0
- package/src/services/ContensisCliService.ts +95 -4
- 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
|
};
|
package/src/commands/push.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import mapJson from 'jsonpath-mapper';
|
|
3
|
-
import { PushBlockParams } from 'migratortron';
|
|
3
|
+
import { generateGuid, PushBlockParams } from 'migratortron';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { Asset } from 'contensis-delivery-api';
|
|
4
6
|
import { cliCommand } from '~/services/ContensisCliService';
|
|
7
|
+
import {
|
|
8
|
+
commit,
|
|
9
|
+
mapContensisOpts,
|
|
10
|
+
noPublish,
|
|
11
|
+
outputDetail,
|
|
12
|
+
saveEntries,
|
|
13
|
+
} from './globalOptions';
|
|
14
|
+
import { jsonFormatter } from '~/util/json.formatter';
|
|
15
|
+
import { cwdPath } from '~/providers/file-provider';
|
|
5
16
|
|
|
6
17
|
export const makePushCommand = () => {
|
|
7
18
|
const push = new Command()
|
|
@@ -11,6 +22,119 @@ export const makePushCommand = () => {
|
|
|
11
22
|
.showHelpAfterError(true)
|
|
12
23
|
.exitOverride();
|
|
13
24
|
|
|
25
|
+
push
|
|
26
|
+
.command('asset')
|
|
27
|
+
.description('push an asset')
|
|
28
|
+
.argument('<content-type-id>', 'the content type id of the asset to push')
|
|
29
|
+
.argument(
|
|
30
|
+
'<title>',
|
|
31
|
+
'the title of the asset as it appears in the cms (use quotes)'
|
|
32
|
+
)
|
|
33
|
+
.argument(
|
|
34
|
+
'[description]',
|
|
35
|
+
'the description or altText of the asset (use quotes)'
|
|
36
|
+
)
|
|
37
|
+
.option(
|
|
38
|
+
'-from --from-file <fromFile>',
|
|
39
|
+
'the local file path of the source asset'
|
|
40
|
+
)
|
|
41
|
+
.option('-url --from-url <fromUrl>', 'the full url of the source asset')
|
|
42
|
+
.option(
|
|
43
|
+
'-to --target-file-path <targetFilePath>',
|
|
44
|
+
'the file path in the cms project to push the asset to e.g. "/asset-library/"'
|
|
45
|
+
)
|
|
46
|
+
.option(
|
|
47
|
+
'-name --target-file-name <targetFileName>',
|
|
48
|
+
'set the file name in the cms project'
|
|
49
|
+
)
|
|
50
|
+
.option('-i --id <id>', 'push the asset with a specific guid')
|
|
51
|
+
.addOption(commit)
|
|
52
|
+
.addOption(noPublish)
|
|
53
|
+
.addOption(outputDetail)
|
|
54
|
+
.addOption(saveEntries)
|
|
55
|
+
.usage('<content-type-id> <title> [description] [options]')
|
|
56
|
+
.addHelpText(
|
|
57
|
+
'after',
|
|
58
|
+
`
|
|
59
|
+
Example call:
|
|
60
|
+
> push asset pdf "Example file" "An example of a PDF asset" --from-file example.pdf --target-file-path /asset-library/pdf/\n`
|
|
61
|
+
)
|
|
62
|
+
.action(
|
|
63
|
+
async (
|
|
64
|
+
contentTypeId: string,
|
|
65
|
+
title: string,
|
|
66
|
+
description: string,
|
|
67
|
+
opts
|
|
68
|
+
) => {
|
|
69
|
+
const cli = cliCommand(
|
|
70
|
+
['push', 'asset', contentTypeId, title, description],
|
|
71
|
+
opts,
|
|
72
|
+
mapContensisOpts({ preserveGuids: true, ...opts, id: undefined })
|
|
73
|
+
);
|
|
74
|
+
const mapSourceVars = {
|
|
75
|
+
contentTypeId,
|
|
76
|
+
title,
|
|
77
|
+
description,
|
|
78
|
+
...opts,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const assetEntry: Asset = mapJson(mapSourceVars, {
|
|
82
|
+
entryTitle: 'title',
|
|
83
|
+
title: 'title',
|
|
84
|
+
entryDescription: 'description',
|
|
85
|
+
description: 'description',
|
|
86
|
+
altText: ({ contentTypeId, description }) =>
|
|
87
|
+
contentTypeId === 'image' ? description : undefined,
|
|
88
|
+
sys: {
|
|
89
|
+
dataFormat: () => 'asset',
|
|
90
|
+
contentTypeId: 'contentTypeId',
|
|
91
|
+
id: 'id',
|
|
92
|
+
isPublished: () => true, // can be overridden by !opts.publish
|
|
93
|
+
properties: {
|
|
94
|
+
filename: {
|
|
95
|
+
$path: ['targetFileName', 'fromFile', 'fromUrl'],
|
|
96
|
+
$formatting: (nameOrPath: string) => {
|
|
97
|
+
return path.basename(nameOrPath);
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
filePath: {
|
|
101
|
+
$path: 'targetFilePath',
|
|
102
|
+
$default: (_, { fromFile, fromUrl }) => {
|
|
103
|
+
const toPosixPath = (windowsPath: string) =>
|
|
104
|
+
windowsPath.replace(/^(\w):|\\+/g, '/$1');
|
|
105
|
+
|
|
106
|
+
return path.dirname(
|
|
107
|
+
toPosixPath(fromFile || fromUrl.split(':/')[1])
|
|
108
|
+
);
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
uri: {
|
|
113
|
+
$path: ['fromFile', 'fromUrl'],
|
|
114
|
+
$formatting: (from: string) =>
|
|
115
|
+
from?.startsWith('http') ? from : cwdPath(from),
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
if (!assetEntry.sys.id)
|
|
121
|
+
assetEntry.sys.id = generateGuid(
|
|
122
|
+
cli.currentEnv,
|
|
123
|
+
cli.currentProject,
|
|
124
|
+
`${assetEntry.sys.contentTypeId}-${assetEntry.sys.properties.filePath.replaceAll('/', '').toLowerCase()}-${assetEntry.sys.properties.filename.toLowerCase()}`
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
console.log(jsonFormatter(assetEntry));
|
|
128
|
+
|
|
129
|
+
await cli.ImportEntries({
|
|
130
|
+
commit: opts.commit,
|
|
131
|
+
logOutput: opts.outputDetail,
|
|
132
|
+
saveEntries: opts.saveEntries,
|
|
133
|
+
data: [assetEntry],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
|
|
14
138
|
push
|
|
15
139
|
.command('block')
|
|
16
140
|
.description('push a block')
|
|
@@ -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
|
+
|
|
@@ -127,6 +127,7 @@ class ContensisCli {
|
|
|
127
127
|
) {
|
|
128
128
|
// console.log('args: ', JSON.stringify(args, null, 2));
|
|
129
129
|
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
130
131
|
const [exe, script, verb = '', noun = '', ...restArgs] = args;
|
|
131
132
|
this.verb = verb?.toLowerCase();
|
|
132
133
|
this.noun = noun?.toLowerCase();
|
|
@@ -324,6 +325,7 @@ class ContensisCli {
|
|
|
324
325
|
commit = false,
|
|
325
326
|
fromFile,
|
|
326
327
|
importDataType,
|
|
328
|
+
importData,
|
|
327
329
|
}: {
|
|
328
330
|
commit?: boolean;
|
|
329
331
|
fromFile?: string;
|
|
@@ -334,10 +336,13 @@ class ContensisCli {
|
|
|
334
336
|
| 'models'
|
|
335
337
|
| 'nodes'
|
|
336
338
|
| 'user-input';
|
|
339
|
+
importData?: any[];
|
|
337
340
|
}) => {
|
|
338
|
-
const source: 'contensis' | 'file' =
|
|
341
|
+
const source: 'contensis' | 'file' =
|
|
342
|
+
fromFile || importData ? 'file' : 'contensis';
|
|
339
343
|
|
|
340
|
-
const fileData =
|
|
344
|
+
const fileData =
|
|
345
|
+
importData || (fromFile ? (await readFileAsJSON(fromFile)) || [] : []);
|
|
341
346
|
|
|
342
347
|
if (typeof fileData === 'string')
|
|
343
348
|
throw new Error(`Import file format must be of type JSON`);
|
|
@@ -1861,11 +1866,13 @@ class ContensisCli {
|
|
|
1861
1866
|
fromFile,
|
|
1862
1867
|
logOutput,
|
|
1863
1868
|
saveEntries,
|
|
1869
|
+
data,
|
|
1864
1870
|
}: {
|
|
1865
1871
|
commit: boolean;
|
|
1866
|
-
fromFile
|
|
1872
|
+
fromFile?: string;
|
|
1867
1873
|
logOutput: string;
|
|
1868
1874
|
saveEntries: boolean;
|
|
1875
|
+
data?: any[];
|
|
1869
1876
|
}) => {
|
|
1870
1877
|
const { currentEnv, currentProject, log, messages } = this;
|
|
1871
1878
|
|
|
@@ -1873,6 +1880,7 @@ class ContensisCli {
|
|
|
1873
1880
|
commit,
|
|
1874
1881
|
fromFile,
|
|
1875
1882
|
importDataType: 'entries',
|
|
1883
|
+
importData: data,
|
|
1876
1884
|
});
|
|
1877
1885
|
|
|
1878
1886
|
if (contensis) {
|
|
@@ -1903,7 +1911,10 @@ class ContensisCli {
|
|
|
1903
1911
|
showDiff: logOutput === 'all' || logOutput === 'changes',
|
|
1904
1912
|
showChanged: logOutput === 'changes',
|
|
1905
1913
|
});
|
|
1906
|
-
if (
|
|
1914
|
+
if (
|
|
1915
|
+
['all', 'changes'].includes(logOutput) &&
|
|
1916
|
+
nodes.migrateNodes.length
|
|
1917
|
+
)
|
|
1907
1918
|
printNodeTreeOutput(
|
|
1908
1919
|
this,
|
|
1909
1920
|
{
|
|
@@ -2033,6 +2044,86 @@ class ContensisCli {
|
|
|
2033
2044
|
}
|
|
2034
2045
|
};
|
|
2035
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
|
+
};
|
|
2036
2127
|
GetNodes = async (rootPath: string, depth = 0) => {
|
|
2037
2128
|
const { currentProject, log, messages } = this;
|
|
2038
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";
|