@strapi/strapi 5.48.1 → 5.49.0
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/admin.js +17 -7
- package/dist/admin.js.map +1 -1
- package/dist/node/create-build-context.d.ts +0 -4
- package/dist/node/create-build-context.d.ts.map +1 -1
- package/dist/node/vite/config.d.ts.map +1 -1
- package/dist/node/vite/resolve-development-config.test.d.ts +2 -0
- package/dist/node/vite/resolve-development-config.test.d.ts.map +1 -0
- package/dist/node/vite/watch.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/admin/active-user.js +6 -2
- package/dist/src/cli/commands/admin/active-user.js.map +1 -1
- package/dist/src/cli/commands/admin/block-user.js +6 -2
- package/dist/src/cli/commands/admin/block-user.js.map +1 -1
- package/dist/src/cli/commands/admin/create-user.js +5 -1
- package/dist/src/cli/commands/admin/create-user.js.map +1 -1
- package/dist/src/cli/commands/admin/delete-user.js +6 -2
- package/dist/src/cli/commands/admin/delete-user.js.map +1 -1
- package/dist/src/cli/commands/admin/list-users.js +16 -11
- package/dist/src/cli/commands/admin/list-users.js.map +1 -1
- package/dist/src/cli/commands/admin/reset-user-password.js +6 -2
- package/dist/src/cli/commands/admin/reset-user-password.js.map +1 -1
- package/dist/src/cli/commands/components/list.js +7 -2
- package/dist/src/cli/commands/components/list.js.map +1 -1
- package/dist/src/cli/commands/configuration/dump.js +5 -1
- package/dist/src/cli/commands/configuration/dump.js.map +1 -1
- package/dist/src/cli/commands/configuration/restore.js +8 -3
- package/dist/src/cli/commands/configuration/restore.js.map +1 -1
- package/dist/src/cli/commands/console.js +5 -1
- package/dist/src/cli/commands/console.js.map +1 -1
- package/dist/src/cli/commands/content-types/list.js +7 -2
- package/dist/src/cli/commands/content-types/list.js.map +1 -1
- package/dist/src/cli/commands/controllers/list.js +7 -2
- package/dist/src/cli/commands/controllers/list.js.map +1 -1
- package/dist/src/cli/commands/develop.js +5 -1
- package/dist/src/cli/commands/develop.js.map +1 -1
- package/dist/src/cli/commands/export/action.js +11 -5
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/hooks/list.js +7 -2
- package/dist/src/cli/commands/hooks/list.js.map +1 -1
- package/dist/src/cli/commands/import/action.js +7 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/command.js +6 -2
- package/dist/src/cli/commands/import/command.js.map +1 -1
- package/dist/src/cli/commands/middlewares/list.js +7 -2
- package/dist/src/cli/commands/middlewares/list.js.map +1 -1
- package/dist/src/cli/commands/openapi/generate.js +17 -11
- package/dist/src/cli/commands/openapi/generate.js.map +1 -1
- package/dist/src/cli/commands/policies/list.js +7 -2
- package/dist/src/cli/commands/policies/list.js.map +1 -1
- package/dist/src/cli/commands/routes/list.js +8 -3
- package/dist/src/cli/commands/routes/list.js.map +1 -1
- package/dist/src/cli/commands/services/list.js +7 -2
- package/dist/src/cli/commands/services/list.js.map +1 -1
- package/dist/src/cli/commands/start.js +8 -3
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/commands/telemetry/disable.js +14 -9
- package/dist/src/cli/commands/telemetry/disable.js.map +1 -1
- package/dist/src/cli/commands/telemetry/enable.js +14 -9
- package/dist/src/cli/commands/telemetry/enable.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +5 -1
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/ts/generate-types.js +5 -1
- package/dist/src/cli/commands/ts/generate-types.js.map +1 -1
- package/dist/src/cli/utils/commander.js +5 -1
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +28 -21
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/helpers.js +7 -3
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/logger.js +15 -10
- package/dist/src/cli/utils/logger.js.map +1 -1
- package/dist/src/cli/utils/tsconfig.js +9 -4
- package/dist/src/cli/utils/tsconfig.js.map +1 -1
- package/dist/src/node/build.js +3 -2
- package/dist/src/node/build.js.map +1 -1
- package/dist/src/node/core/admin-customisations.js +6 -2
- package/dist/src/node/core/admin-customisations.js.map +1 -1
- package/dist/src/node/core/aliases.js +5 -1
- package/dist/src/node/core/aliases.js.map +1 -1
- package/dist/src/node/core/config.js +5 -1
- package/dist/src/node/core/config.js.map +1 -1
- package/dist/src/node/core/dependencies.js +33 -22
- package/dist/src/node/core/dependencies.js.map +1 -1
- package/dist/src/node/core/ensure-admin-dependencies.js +5 -1
- package/dist/src/node/core/ensure-admin-dependencies.js.map +1 -1
- package/dist/src/node/core/env.js +7 -2
- package/dist/src/node/core/env.js.map +1 -1
- package/dist/src/node/core/errors.js +9 -3
- package/dist/src/node/core/errors.js.map +1 -1
- package/dist/src/node/core/files.js +6 -2
- package/dist/src/node/core/files.js.map +1 -1
- package/dist/src/node/core/linked-packages.js +5 -1
- package/dist/src/node/core/linked-packages.js.map +1 -1
- package/dist/src/node/core/monorepo.js +8 -3
- package/dist/src/node/core/monorepo.js.map +1 -1
- package/dist/src/node/core/plugins.js +17 -10
- package/dist/src/node/core/plugins.js.map +1 -1
- package/dist/src/node/core/resolve-module.js +8 -3
- package/dist/src/node/core/resolve-module.js.map +1 -1
- package/dist/src/node/create-build-context.js +16 -9
- package/dist/src/node/create-build-context.js.map +1 -1
- package/dist/src/node/create-build-context.mjs.map +1 -1
- package/dist/src/node/develop.js +14 -8
- package/dist/src/node/develop.js.map +1 -1
- package/dist/src/node/staticFiles.js +11 -5
- package/dist/src/node/staticFiles.js.map +1 -1
- package/dist/src/node/vite/config.js +14 -3
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +9 -2
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/dist/src/node/vite/watch.js +7 -62
- package/dist/src/node/vite/watch.js.map +1 -1
- package/dist/src/node/vite/watch.mjs +2 -62
- package/dist/src/node/vite/watch.mjs.map +1 -1
- package/dist/src/node/webpack/build.js +5 -1
- package/dist/src/node/webpack/build.js.map +1 -1
- package/dist/src/node/webpack/config.js +17 -8
- package/dist/src/node/webpack/config.js.map +1 -1
- package/dist/src/node/webpack/watch.js +11 -4
- package/dist/src/node/webpack/watch.js.map +1 -1
- package/package.json +22 -22
|
@@ -6,6 +6,10 @@ var fp = require('lodash/fp');
|
|
|
6
6
|
var helpers = require('./helpers.js');
|
|
7
7
|
var getInquirer = require('./get-inquirer.js');
|
|
8
8
|
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
12
|
+
|
|
9
13
|
/**
|
|
10
14
|
* argParser: Parse a comma-delimited string as an array
|
|
11
15
|
*/ const parseList = (value)=>{
|
|
@@ -100,7 +104,7 @@ const confirmMessage = async (message, { force } = {})=>{
|
|
|
100
104
|
// if we have a force option, respond yes
|
|
101
105
|
if (force === true) {
|
|
102
106
|
// attempt to mimic the inquirer prompt exactly
|
|
103
|
-
console.log(`${
|
|
107
|
+
console.log(`${chalk__default.default.green('?')} ${chalk__default.default.bold(message)} ${chalk__default.default.cyan('Yes')}`);
|
|
104
108
|
return true;
|
|
105
109
|
}
|
|
106
110
|
const inquirer = await getInquirer.getInquirer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commander.js","sources":["../../../../src/cli/utils/commander.ts"],"sourcesContent":["/**\n * This file includes hooks to use for commander.hook and argParsers for commander.argParser\n */\n\nimport { Command, InvalidOptionArgumentError, Option } from 'commander';\nimport chalk from 'chalk';\nimport { isNaN } from 'lodash/fp';\nimport { exitWith } from './helpers';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * argParser: Parse a comma-delimited string as an array\n */\nconst parseList = (value: string) => {\n try {\n return value.split(',').map((item) => item.trim()); // trim shouldn't be necessary but might help catch unexpected whitespace characters\n } catch (e) {\n exitWith(1, `Unrecognized input: ${value}`);\n }\n\n return [];\n};\n\n/**\n * Returns an argParser that returns a list\n */\nconst getParseListWithChoices = (choices: string[], errorMessage = 'Invalid options:') => {\n return (value: string) => {\n const list = parseList(value);\n const invalid = list.filter((item) => {\n return !choices.includes(item);\n });\n\n if (invalid.length > 0) {\n exitWith(1, `${errorMessage}: ${invalid.join(',')}`);\n }\n\n return list;\n };\n};\n\n/**\n * argParser: Parse a string as an integer\n */\nconst parseInteger = (value: string) => {\n // parseInt takes a string and a radix\n const parsedValue = parseInt(value, 10);\n if (isNaN(parsedValue)) {\n throw new InvalidOptionArgumentError(`Not an integer: ${value}`);\n }\n return parsedValue;\n};\n\n/**\n * argParser: Parse a string as a URL object\n */\nconst parseURL = (value: string) => {\n try {\n const url = new URL(value);\n if (!url.host) {\n throw new InvalidOptionArgumentError(`Could not parse url ${value}`);\n }\n\n return url;\n } catch (e) {\n throw new InvalidOptionArgumentError(`Could not parse url ${value}`);\n }\n};\n\n/**\n * hook: if encrypt==true and key not provided, prompt for it\n */\nconst promptEncryptionKey = async (thisCommand: Command) => {\n const opts = thisCommand.opts();\n\n if (!opts.encrypt && opts.key) {\n return exitWith(1, 'Key may not be present unless encryption is used');\n }\n\n // if encrypt==true but we have no key, prompt for it\n if (opts.encrypt && !(opts.key && opts.key.length > 0)) {\n try {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter an encryption key',\n name: 'key',\n validate(key: string) {\n if (key.length > 0) return true;\n\n return 'Key must be present when using the encrypt option';\n },\n },\n ]);\n opts.key = answers.key;\n } catch (e) {\n return exitWith(1, 'Failed to get encryption key');\n }\n if (!opts.key) {\n return exitWith(1, 'Failed to get encryption key');\n }\n }\n};\n\n/**\n * hook: require a confirmation message to be accepted unless forceOption (-f,--force) is used\n */\nconst getCommanderConfirmMessage = (\n message: string,\n { failMessage }: { failMessage?: string } = {}\n) => {\n return async (command: Command) => {\n const confirmed = await confirmMessage(message, { force: command.opts().force });\n if (!confirmed) {\n exitWith(1, failMessage);\n }\n };\n};\n\nconst confirmMessage = async (message: string, { force }: { force?: boolean } = {}) => {\n // if we have a force option, respond yes\n if (force === true) {\n // attempt to mimic the inquirer prompt exactly\n console.log(`${chalk.green('?')} ${chalk.bold(message)} ${chalk.cyan('Yes')}`);\n return true;\n }\n\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n message,\n name: `confirm`,\n default: false,\n },\n ]);\n\n return answers.confirm;\n};\n\nconst forceOption = new Option(\n '--force',\n `Automatically answer \"yes\" to all prompts, including potentially destructive requests, and run non-interactively.`\n);\n\nexport {\n getParseListWithChoices,\n parseList,\n parseURL,\n parseInteger,\n promptEncryptionKey,\n getCommanderConfirmMessage,\n confirmMessage,\n forceOption,\n};\n"],"names":["parseList","value","split","map","item","trim","e","exitWith","getParseListWithChoices","choices","errorMessage","list","invalid","filter","includes","length","join","parseInteger","parsedValue","parseInt","isNaN","InvalidOptionArgumentError","parseURL","url","URL","host","promptEncryptionKey","thisCommand","opts","encrypt","key","inquirer","getInquirer","answers","prompt","type","message","name","validate","getCommanderConfirmMessage","failMessage","command","confirmed","confirmMessage","force","console","log","chalk","green","bold","cyan","default","confirm","forceOption","Option"],"mappings":"
|
|
1
|
+
{"version":3,"file":"commander.js","sources":["../../../../src/cli/utils/commander.ts"],"sourcesContent":["/**\n * This file includes hooks to use for commander.hook and argParsers for commander.argParser\n */\n\nimport { Command, InvalidOptionArgumentError, Option } from 'commander';\nimport chalk from 'chalk';\nimport { isNaN } from 'lodash/fp';\nimport { exitWith } from './helpers';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * argParser: Parse a comma-delimited string as an array\n */\nconst parseList = (value: string) => {\n try {\n return value.split(',').map((item) => item.trim()); // trim shouldn't be necessary but might help catch unexpected whitespace characters\n } catch (e) {\n exitWith(1, `Unrecognized input: ${value}`);\n }\n\n return [];\n};\n\n/**\n * Returns an argParser that returns a list\n */\nconst getParseListWithChoices = (choices: string[], errorMessage = 'Invalid options:') => {\n return (value: string) => {\n const list = parseList(value);\n const invalid = list.filter((item) => {\n return !choices.includes(item);\n });\n\n if (invalid.length > 0) {\n exitWith(1, `${errorMessage}: ${invalid.join(',')}`);\n }\n\n return list;\n };\n};\n\n/**\n * argParser: Parse a string as an integer\n */\nconst parseInteger = (value: string) => {\n // parseInt takes a string and a radix\n const parsedValue = parseInt(value, 10);\n if (isNaN(parsedValue)) {\n throw new InvalidOptionArgumentError(`Not an integer: ${value}`);\n }\n return parsedValue;\n};\n\n/**\n * argParser: Parse a string as a URL object\n */\nconst parseURL = (value: string) => {\n try {\n const url = new URL(value);\n if (!url.host) {\n throw new InvalidOptionArgumentError(`Could not parse url ${value}`);\n }\n\n return url;\n } catch (e) {\n throw new InvalidOptionArgumentError(`Could not parse url ${value}`);\n }\n};\n\n/**\n * hook: if encrypt==true and key not provided, prompt for it\n */\nconst promptEncryptionKey = async (thisCommand: Command) => {\n const opts = thisCommand.opts();\n\n if (!opts.encrypt && opts.key) {\n return exitWith(1, 'Key may not be present unless encryption is used');\n }\n\n // if encrypt==true but we have no key, prompt for it\n if (opts.encrypt && !(opts.key && opts.key.length > 0)) {\n try {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter an encryption key',\n name: 'key',\n validate(key: string) {\n if (key.length > 0) return true;\n\n return 'Key must be present when using the encrypt option';\n },\n },\n ]);\n opts.key = answers.key;\n } catch (e) {\n return exitWith(1, 'Failed to get encryption key');\n }\n if (!opts.key) {\n return exitWith(1, 'Failed to get encryption key');\n }\n }\n};\n\n/**\n * hook: require a confirmation message to be accepted unless forceOption (-f,--force) is used\n */\nconst getCommanderConfirmMessage = (\n message: string,\n { failMessage }: { failMessage?: string } = {}\n) => {\n return async (command: Command) => {\n const confirmed = await confirmMessage(message, { force: command.opts().force });\n if (!confirmed) {\n exitWith(1, failMessage);\n }\n };\n};\n\nconst confirmMessage = async (message: string, { force }: { force?: boolean } = {}) => {\n // if we have a force option, respond yes\n if (force === true) {\n // attempt to mimic the inquirer prompt exactly\n console.log(`${chalk.green('?')} ${chalk.bold(message)} ${chalk.cyan('Yes')}`);\n return true;\n }\n\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n message,\n name: `confirm`,\n default: false,\n },\n ]);\n\n return answers.confirm;\n};\n\nconst forceOption = new Option(\n '--force',\n `Automatically answer \"yes\" to all prompts, including potentially destructive requests, and run non-interactively.`\n);\n\nexport {\n getParseListWithChoices,\n parseList,\n parseURL,\n parseInteger,\n promptEncryptionKey,\n getCommanderConfirmMessage,\n confirmMessage,\n forceOption,\n};\n"],"names":["parseList","value","split","map","item","trim","e","exitWith","getParseListWithChoices","choices","errorMessage","list","invalid","filter","includes","length","join","parseInteger","parsedValue","parseInt","isNaN","InvalidOptionArgumentError","parseURL","url","URL","host","promptEncryptionKey","thisCommand","opts","encrypt","key","inquirer","getInquirer","answers","prompt","type","message","name","validate","getCommanderConfirmMessage","failMessage","command","confirmed","confirmMessage","force","console","log","chalk","green","bold","cyan","default","confirm","forceOption","Option"],"mappings":"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"}
|
|
@@ -12,13 +12,20 @@ var dataTransfer = require('@strapi/data-transfer');
|
|
|
12
12
|
var helpers = require('./helpers.js');
|
|
13
13
|
var commander$1 = require('./commander.js');
|
|
14
14
|
|
|
15
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
|
|
17
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
18
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
19
|
+
var CLITable__default = /*#__PURE__*/_interopDefault(CLITable);
|
|
20
|
+
var ora__default = /*#__PURE__*/_interopDefault(ora);
|
|
21
|
+
|
|
15
22
|
const { errors: { TransferEngineInitializationError } } = dataTransfer.engine;
|
|
16
23
|
const exitMessageText = (process1, error = false)=>{
|
|
17
24
|
const processCapitalized = process1[0].toUpperCase() + process1.slice(1);
|
|
18
25
|
if (!error) {
|
|
19
|
-
return
|
|
26
|
+
return chalk__default.default.bold(chalk__default.default.green(`${processCapitalized} process has been completed successfully!`));
|
|
20
27
|
}
|
|
21
|
-
return
|
|
28
|
+
return chalk__default.default.bold(chalk__default.default.red(`${processCapitalized} process failed.`));
|
|
22
29
|
};
|
|
23
30
|
const pad = (n)=>{
|
|
24
31
|
return (n < 10 ? '0' : '') + String(n);
|
|
@@ -35,12 +42,12 @@ const buildTransferTable = (resultData)=>{
|
|
|
35
42
|
return;
|
|
36
43
|
}
|
|
37
44
|
// Build pretty table
|
|
38
|
-
const table = new
|
|
45
|
+
const table = new CLITable__default.default({
|
|
39
46
|
head: [
|
|
40
47
|
'Type',
|
|
41
48
|
'Count',
|
|
42
49
|
'Size'
|
|
43
|
-
].map((text)=>
|
|
50
|
+
].map((text)=>chalk__default.default.bold.blue(text))
|
|
44
51
|
});
|
|
45
52
|
let totalBytes = 0;
|
|
46
53
|
let totalItems = 0;
|
|
@@ -52,7 +59,7 @@ const buildTransferTable = (resultData)=>{
|
|
|
52
59
|
table.push([
|
|
53
60
|
{
|
|
54
61
|
hAlign: 'left',
|
|
55
|
-
content:
|
|
62
|
+
content: chalk__default.default.bold(stage)
|
|
56
63
|
},
|
|
57
64
|
{
|
|
58
65
|
hAlign: 'right',
|
|
@@ -74,15 +81,15 @@ const buildTransferTable = (resultData)=>{
|
|
|
74
81
|
table.push([
|
|
75
82
|
{
|
|
76
83
|
hAlign: 'left',
|
|
77
|
-
content: `-- ${
|
|
84
|
+
content: `-- ${chalk__default.default.bold.grey(subkey)}`
|
|
78
85
|
},
|
|
79
86
|
{
|
|
80
87
|
hAlign: 'right',
|
|
81
|
-
content:
|
|
88
|
+
content: chalk__default.default.grey(subitem.count)
|
|
82
89
|
},
|
|
83
90
|
{
|
|
84
91
|
hAlign: 'right',
|
|
85
|
-
content:
|
|
92
|
+
content: chalk__default.default.grey(`(${helpers.readableBytes(subitem.bytes, 1, 11)})`)
|
|
86
93
|
}
|
|
87
94
|
]);
|
|
88
95
|
});
|
|
@@ -91,15 +98,15 @@ const buildTransferTable = (resultData)=>{
|
|
|
91
98
|
table.push([
|
|
92
99
|
{
|
|
93
100
|
hAlign: 'left',
|
|
94
|
-
content:
|
|
101
|
+
content: chalk__default.default.bold.green('Total')
|
|
95
102
|
},
|
|
96
103
|
{
|
|
97
104
|
hAlign: 'right',
|
|
98
|
-
content:
|
|
105
|
+
content: chalk__default.default.bold.green(totalItems)
|
|
99
106
|
},
|
|
100
107
|
{
|
|
101
108
|
hAlign: 'right',
|
|
102
|
-
content: `${
|
|
109
|
+
content: `${chalk__default.default.bold.green(helpers.readableBytes(totalBytes, 1, 11))} `
|
|
103
110
|
}
|
|
104
111
|
]);
|
|
105
112
|
return table;
|
|
@@ -167,9 +174,9 @@ const validateExcludeOnly = (command)=>{
|
|
|
167
174
|
}
|
|
168
175
|
};
|
|
169
176
|
const errorColors = {
|
|
170
|
-
fatal:
|
|
171
|
-
error:
|
|
172
|
-
silly:
|
|
177
|
+
fatal: chalk__default.default.red,
|
|
178
|
+
error: chalk__default.default.red,
|
|
179
|
+
silly: chalk__default.default.yellow
|
|
173
180
|
};
|
|
174
181
|
const formatDiagnostic = (operation, verbose)=>{
|
|
175
182
|
let logger$1;
|
|
@@ -177,7 +184,7 @@ const formatDiagnostic = (operation, verbose)=>{
|
|
|
177
184
|
const getLogger = ()=>{
|
|
178
185
|
if (!logger$1) {
|
|
179
186
|
logFileBasename = `${operation}_${Date.now()}.log`;
|
|
180
|
-
const absoluteLogPath =
|
|
187
|
+
const absoluteLogPath = path__default.default.resolve(process.cwd(), logFileBasename);
|
|
181
188
|
logger$1 = logger.createLogger(logger.configs.createOutputFileConfiguration(logFileBasename, {
|
|
182
189
|
level: 'info',
|
|
183
190
|
format: logger.formats?.detailedLogs
|
|
@@ -270,7 +277,7 @@ const loadersFactory = (defaultLoaders = {})=>{
|
|
|
270
277
|
};
|
|
271
278
|
const createLoader = (stage)=>{
|
|
272
279
|
Object.assign(loaders, {
|
|
273
|
-
[stage]:
|
|
280
|
+
[stage]: ora__default.default()
|
|
274
281
|
});
|
|
275
282
|
return loaders[stage];
|
|
276
283
|
};
|
|
@@ -317,19 +324,19 @@ const loadersFactory = (defaultLoaders = {})=>{
|
|
|
317
324
|
if (uid === 'plugin::review-workflows.workflow' || uid === 'plugin::review-workflows.workflow-stage' || endPath?.startsWith('strapi_stage') || endPath?.startsWith('strapi_assignee')) {
|
|
318
325
|
workflowsStatus = diff.kind;
|
|
319
326
|
} else if (diff.kind === 'added') {
|
|
320
|
-
engine.reportWarning(
|
|
327
|
+
engine.reportWarning(chalk__default.default.red(`${chalk__default.default.bold(path)} does not exist on source`), source);
|
|
321
328
|
} else if (diff.kind === 'deleted') {
|
|
322
|
-
engine.reportWarning(
|
|
329
|
+
engine.reportWarning(chalk__default.default.red(`${chalk__default.default.bold(path)} does not exist on destination`), source);
|
|
323
330
|
} else if (diff.kind === 'modified') {
|
|
324
|
-
engine.reportWarning(
|
|
331
|
+
engine.reportWarning(chalk__default.default.red(`${chalk__default.default.bold(path)} has a different data type`), source);
|
|
325
332
|
}
|
|
326
333
|
}
|
|
327
334
|
});
|
|
328
335
|
// output the known feature warnings
|
|
329
336
|
if (workflowsStatus === 'added') {
|
|
330
|
-
engine.reportWarning(
|
|
337
|
+
engine.reportWarning(chalk__default.default.red(`Review workflows feature does not exist on source`), source);
|
|
331
338
|
} else if (workflowsStatus === 'deleted') {
|
|
332
|
-
engine.reportWarning(
|
|
339
|
+
engine.reportWarning(chalk__default.default.red(`Review workflows feature does not exist on destination`), source);
|
|
333
340
|
} else if (workflowsStatus === 'modified') {
|
|
334
341
|
engine.panic(new TransferEngineInitializationError('Unresolved differences in schema [review workflows]'));
|
|
335
342
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-transfer.js","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch (e) {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n strapi: Core.Strapi\n) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","e","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","join","getParseListWithChoices","onlyOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","Set","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","has","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","uid","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","parseRestoreFromOptions","entitiesOptions","contentTypes","include","undefined","contentInScope","restoreConfig","entities","assets","configuration","webhook","coreStore"],"mappings":";;;;;;;;;;;;;;AAmBA,MAAM,EACJA,MAAAA,EAAQ,EAAEC,iCAAiC,EAAE,EAC9C,GAAGC,mBAAAA;AAEJ,MAAMC,eAAAA,GAAkB,CAACC,QAAAA,EAAiBC,KAAAA,GAAQ,KAAK,GAAA;IACrD,MAAMC,kBAAAA,GAAqBF,QAAO,CAAC,CAAA,CAAE,CAACG,WAAW,EAAA,GAAKH,QAAAA,CAAQI,KAAK,CAAC,CAAA,CAAA;AAEpE,IAAA,IAAI,CAACH,KAAAA,EAAO;QACV,OAAOI,KAAAA,CAAMC,IAAI,CACfD,KAAAA,CAAME,KAAK,CAAC,CAAA,EAAGL,kBAAAA,CAAmB,yCAAyC,CAAC,CAAA,CAAA;AAEhF,IAAA;IAEA,OAAOG,KAAAA,CAAMC,IAAI,CAACD,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGN,kBAAAA,CAAmB,gBAAgB,CAAC,CAAA,CAAA;AACrE;AAEA,MAAMO,MAAM,CAACC,CAAAA,GAAAA;AACX,IAAA,OAAO,CAACA,CAAAA,GAAI,KAAK,GAAA,GAAM,EAAC,IAAKC,MAAAA,CAAOD,CAAAA,CAAAA;AACtC,CAAA;AAEA,MAAME,cAAAA,GAAiB,IAAA;AACrB,IAAA,MAAMC,OAAO,IAAIC,IAAAA,EAAAA;IAEjB,OACED,IAAAA,CAAKE,WAAW,EAAA,GAChBN,GAAAA,CAAII,KAAKG,QAAQ,EAAA,GAAK,CAAA,CAAA,GACtBP,GAAAA,CAAII,IAAAA,CAAKI,OAAO,MAChBR,GAAAA,CAAII,IAAAA,CAAKK,QAAQ,EAAA,CAAA,GACjBT,GAAAA,CAAII,KAAKM,UAAU,EAAA,CAAA,GACnBV,GAAAA,CAAII,IAAAA,CAAKO,UAAU,EAAA,CAAA;AAEvB,CAAA;AAEA,MAAMC,oBAAAA,GAAuB,IAAA;IAC3B,OAAO,CAAC,OAAO,EAAET,cAAAA,EAAAA,CAAAA,CAAkB;AACrC;AAOA,MAAMU,qBAAqB,CAACC,UAAAA,GAAAA;AAC1B,IAAA,IAAI,CAACA,UAAAA,EAAY;AACf,QAAA;AACF,IAAA;;IAGA,MAAMC,KAAAA,GAAQ,IAAIC,QAAAA,CAAM;QACtBC,IAAAA,EAAM;AAAC,YAAA,MAAA;AAAQ,YAAA,OAAA;AAAS,YAAA;SAAO,CAACC,GAAG,CAAC,CAACC,IAAAA,GAASvB,MAAMC,IAAI,CAACuB,IAAI,CAACD,IAAAA,CAAAA;AAChE,KAAA,CAAA;AAEA,IAAA,IAAIE,UAAAA,GAAa,CAAA;AACjB,IAAA,IAAIC,UAAAA,GAAa,CAAA;AAChBC,IAAAA,MAAAA,CAAOC,IAAI,CAACV,UAAAA,CAAAA,CAAmDW,OAAO,CAAC,CAACC,KAAAA,GAAAA;QACvE,MAAMC,IAAAA,GAAOb,UAAU,CAACY,KAAAA,CAAM;AAE9B,QAAA,IAAI,CAACC,IAAAA,EAAM;AACT,YAAA;AACF,QAAA;AAEAZ,QAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,YAAA;gBAAEC,MAAAA,EAAQ,MAAA;gBAAQC,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAAC6B,KAAAA;AAAO,aAAA;AAC7C,YAAA;gBAAEG,MAAAA,EAAQ,OAAA;AAASC,gBAAAA,OAAAA,EAASH,KAAKI;AAAM,aAAA;AACvC,YAAA;gBAAEF,MAAAA,EAAQ,OAAA;gBAASC,OAAAA,EAAS,CAAA,EAAGE,sBAAcL,IAAAA,CAAKM,KAAK,EAAE,CAAA,EAAG,EAAA,CAAA,CAAI,CAAC;AAAE;AACpE,SAAA,CAAA;AACDZ,QAAAA,UAAAA,IAAcM,KAAKM,KAAK;AACxBX,QAAAA,UAAAA,IAAcK,KAAKI,KAAK;QAExB,IAAIJ,IAAAA,CAAKO,UAAU,EAAE;YAClBX,MAAAA,CAAOC,IAAI,CAACG,IAAAA,CAAKO,UAAU,EACzBC,IAAI,EAAA,CACJV,OAAO,CAAC,CAACW,MAAAA,GAAAA;gBACR,IAAI,CAACT,IAAAA,CAAKO,UAAU,EAAE;AACpB,oBAAA;AACF,gBAAA;AAEA,gBAAA,MAAMG,OAAAA,GAAUV,IAAAA,CAAKO,UAAU,CAACE,MAAAA,CAAO;AAEvCrB,gBAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,oBAAA;wBAAEC,MAAAA,EAAQ,MAAA;wBAAQC,OAAAA,EAAS,CAAC,GAAG,EAAElC,KAAAA,CAAMC,IAAI,CAACyC,IAAI,CAACF,MAAAA,CAAAA,CAAAA;AAAU,qBAAA;AAC3D,oBAAA;wBAAEP,MAAAA,EAAQ,OAAA;AAASC,wBAAAA,OAAAA,EAASlC,KAAAA,CAAM0C,IAAI,CAACD,OAAAA,CAAQN,KAAK;AAAE,qBAAA;AACtD,oBAAA;wBAAEF,MAAAA,EAAQ,OAAA;AAASC,wBAAAA,OAAAA,EAASlC,KAAAA,CAAM0C,IAAI,CAAC,CAAC,CAAC,EAAEN,qBAAAA,CAAcK,OAAAA,CAAQJ,KAAK,EAAE,CAAA,EAAG,EAAA,CAAA,CAAI,CAAC,CAAC;AAAE;AACpF,iBAAA,CAAA;AACH,YAAA,CAAA,CAAA;AACJ,QAAA;AACF,IAAA,CAAA,CAAA;AACAlB,IAAAA,KAAAA,CAAMa,IAAI,CAAC;AACT,QAAA;YAAEC,MAAAA,EAAQ,MAAA;AAAQC,YAAAA,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAAC,OAAA;AAAS,SAAA;AACrD,QAAA;YAAE+B,MAAAA,EAAQ,OAAA;AAASC,YAAAA,OAAAA,EAASlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAACwB,UAAAA;AAAY,SAAA;AACzD,QAAA;YAAEO,MAAAA,EAAQ,OAAA;YAASC,OAAAA,EAAS,CAAA,EAAGlC,KAAAA,CAAMC,IAAI,CAACC,KAAK,CAACkC,qBAAAA,CAAcX,UAAAA,EAAY,CAAA,EAAG,EAAA,CAAA,CAAA,CAAK,CAAC;AAAE;AACtF,KAAA,CAAA;IAED,OAAON,KAAAA;AACT;AAEA,MAAMwB,6BAAAA,GAAgC;AAAC,IAAA;AAAU,CAAA;AAEjD,MAAMC,qBAAAA,GAAwB;AAC5B,IAAA,kCAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,oBAAAA,GAAuB,CAACC,IAAAA,GAC5BH,6BAAAA,CAA8BI,IAAI,CAAC,CAACC,MAAAA,GAAWF,IAAAA,CAAKG,UAAU,CAACD,MAAAA,CAAAA,CAAAA,IAC/DJ,qBAAAA,CAAsBM,QAAQ,CAACJ,IAAAA;AAEjC,MAAMK,gBAAgB,OAAO,EAC3BC,MAAM,EACNC,MAAAA,EAAAA,OAAM,EAIP,GAAA;IACC,IAAI;AACF,QAAA,MAAMD,OAAOD,aAAa,EAAA;AAC1B,QAAA,MAAME,QAAOC,OAAO,EAAA;AACtB,IAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;;QAEV,OAAO,KAAA;AACT,IAAA;IACA,OAAO,IAAA;AACT;AAEA,MAAMC,gBAAAA,GAAmB,OACvBC,OAAAA,EACAC,OAAAA,GAAU;AAAC,IAAA,QAAA;AAAU,IAAA,SAAA;AAAW,IAAA;AAAU,CAAA,GAAA;IAE1CA,OAAAA,CAAQ7B,OAAO,CAAC,CAAC8B,MAAAA,GAAAA;;;AAGfhE,QAAAA,OAAAA,CAAQiE,kBAAkB,CAACD,MAAAA,CAAAA;QAC3BhE,OAAAA,CAAQkE,EAAE,CAACF,MAAAA,EAAQF,OAAAA,CAAAA;AACrB,IAAA,CAAA,CAAA;AACF;AAEA,MAAMK,oBAAAA,GAAuB,OAAOC,IAAAA,GAA8B,EAAE,GAAA;IAClE,IAAI;AACF,QAAA,MAAMC,aAAa,MAAMC,kBAAAA,EAAAA;AACzB,QAAA,MAAMC,MAAMC,iBAAAA,CAAa;AAAE,YAAA,GAAGJ,IAAI;AAAE,YAAA,GAAGC;AAAW,SAAA,CAAA;AAElDE,QAAAA,GAAAA,CAAIE,GAAG,CAACC,KAAK,GAAGN,IAAAA,CAAKO,QAAQ,IAAI,OAAA;QACjC,OAAO,MAAMJ,IAAIK,IAAI,EAAA;AACvB,IAAA,CAAA,CAAE,OAAO3E,KAAAA,EAAO;AACd,QAAA,IAAIA,iBAAiB4E,KAAAA,IAAS,MAAA,IAAU5E,SAASA,KAAAA,CAAM6E,IAAI,KAAK,cAAA,EAAgB;AAC9E,YAAA,MAAM,IAAID,KAAAA,CAAM,yEAAA,CAAA;AAClB,QAAA;QAEA,MAAM5E,KAAAA;AACR,IAAA;AACF;AAEA,MAAM8E,iBAAAA,GAAoB/C,MAAAA,CAAOC,IAAI,CAACnC,oBAAmBkF,oBAAoB,CAAA;AAE7E,MAAMC,cAAAA,GAAiB,IAAIC,gBAAAA,CACzB,sCAAA,EACA,CAAC,2DAA2D,CAAC,CAAA,CAE5DC,SAAS,CAACC,wBAAAA,CAAAA,CACVC,QAAQ;AAEX,MAAMC,aAAAA,GAAgB,IAAIJ,gBAAAA,CACxB,wCAAA,EACA,CAAC,2DAA2D,EAAEH,iBAAAA,CAAkBQ,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM,CAAA,CAC3FJ,SAAS,CAACK,oCAAwBT,iBAAAA,EAAmB,+BAAA,CAAA;AAEvD,MAAMU,UAAAA,GAAa,IAAIP,gBAAAA,CACrB,uCAAA,EACA,CAAC,kEAAkE,EAAEH,iBAAAA,CAAkBQ,IAAI,CAAC,GAAA,CAAA,CAAA,CAAM,CAAA,CAClGJ,SAAS,CAACK,oCAAwBT,iBAAAA,EAAmB,4BAAA,CAAA;AAEvD,MAAMW,sBAAsB,CAACC,OAAAA,GAAAA;AAC3B,IAAA,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGF,QAAQvB,IAAI,EAAA;IACtC,IAAI,CAACyB,IAAAA,IAAQ,CAACD,OAAAA,EAAS;AACrB,QAAA;AACF,IAAA;AAEA,IAAA,MAAME,aAAAA,GAAgBD,IAAAA,CAAKE,MAAM,CAAC,CAACrF,CAAAA,GAAAA;AACjC,QAAA,OAAOkF,OAAAA,CAAQI,OAAO,CAACtF,CAAAA,CAAAA,KAAO,EAAC;AACjC,IAAA,CAAA,CAAA;IACA,IAAIoF,aAAAA,CAAcG,MAAM,GAAG,CAAA,EAAG;AAC5BC,QAAAA,gBAAAA,CACE,GACA,CAAC,4FAA4F,EAAEJ,aAAAA,CAAcP,IAAI,CAC/G,GAAA,CAAA,CAAA,CACC,CAAA;AAEP,IAAA;AACF;AAEA,MAAMY,WAAAA,GAAc;AAClBC,IAAAA,KAAAA,EAAO/F,MAAMG,GAAG;AAChBP,IAAAA,KAAAA,EAAOI,MAAMG,GAAG;AAChB6F,IAAAA,KAAAA,EAAOhG,MAAMiG;AACf,CAAA;AAEA,MAAMC,gBAAAA,GAAmB,CACvBC,SAAAA,EACAC,OAAAA,GAAAA;IAEA,IAAIC,QAAAA;IACJ,IAAIC,eAAAA;AAEJ,IAAA,MAAMC,SAAAA,GAAY,IAAA;AAChB,QAAA,IAAI,CAACF,QAAAA,EAAQ;YACXC,eAAAA,GAAkB,CAAA,EAAGH,UAAU,CAAC,EAAE1F,KAAK+F,GAAG,EAAA,CAAG,IAAI,CAAC;AAClD,YAAA,MAAMC,kBAAkBC,IAAAA,CAAKC,OAAO,CAAChH,OAAAA,CAAQiH,GAAG,EAAA,EAAIN,eAAAA,CAAAA;AAEpDD,YAAAA,QAAAA,GAASQ,mBAAAA,CACPC,cAAAA,CAAQC,6BAA6B,CACnCT,eAAAA,EACA;gBACEjC,KAAAA,EAAO,MAAA;AACP2C,gBAAAA,MAAAA,EAAQC,cAAAA,EAASC;aACnB,EACA;AACEC,gBAAAA,YAAAA,EAAcf,UAAU,MAAA,GAAS;AACnC,aAAA,CAAA,CAAA;YAIJC,QAAAA,CAAOe,IAAI,CACT,CAAC,CAAC,EAAEjB,UAAU,uBAAuB,EAAEM,eAAAA,CAAgB,8DAA8D,CAAC,CAAA;AAE1H,QAAA;QACA,OAAOJ,QAAAA;AACT,IAAA,CAAA;AAEA,IAAA,OAAO,CAAC,EAAEgB,OAAO,EAAEC,IAAI,EAAE,GAAA;QACvB,IAAI;AACF,YAAA,IAAIA,SAAS,OAAA,EAAS;AACpB,gBAAA,MAAM,EAAEC,OAAO,EAAEC,QAAAA,GAAW,OAAO,EAAE,GAAGH,OAAAA;gBAExC,MAAMI,aAAAA,GAAgB3B,WAAW,CAAC0B,QAAAA,CAAS;gBAC3C,MAAME,YAAAA,GAAeD,aAAAA,CAAc,CAAC,CAAC,EAAED,SAAS1H,WAAW,EAAA,CAAG,EAAE,EAAEyH,OAAAA,CAAAA,CAAS,CAAA;AAE3EhB,gBAAAA,SAAAA,EAAAA,CAAY3G,KAAK,CAAC8H,YAAAA,CAAAA;AACpB,YAAA;AACA,YAAA,IAAIJ,SAAS,MAAA,EAAQ;AACnB,gBAAA,MAAM,EAAEC,OAAO,EAAEI,MAAM,EAAEC,MAAM,EAAE,GAAGP,OAAAA;AAEpC,gBAAA,MAAMQ,MAAM,CAAC,CAAC,EAAED,MAAAA,IAAU,UAAA,CAAW,EAAE,EAAEL,OAAAA,CAAQ,EAAE,EAAEI,SAASG,IAAAA,CAAKC,SAAS,CAACJ,MAAAA,EAAQ,IAAA,EAAM,KAAK,EAAA,CAAA,CAAI;AAEpGpB,gBAAAA,SAAAA,EAAAA,CAAYa,IAAI,CAACS,GAAAA,CAAAA;AACnB,YAAA;AACA,YAAA,IAAIP,SAAS,SAAA,EAAW;AACtB,gBAAA,MAAM,EAAEM,MAAM,EAAEL,OAAO,EAAE,GAAGF,OAAAA;gBAE5Bd,SAAAA,EAAAA,CAAYyB,IAAI,CAAC,CAAC,CAAC,EAAEJ,MAAAA,IAAU,UAAA,CAAW,EAAE,EAAEL,OAAAA,CAAAA,CAAS,CAAA;AACzD,YAAA;AACF,QAAA,CAAA,CAAE,OAAOU,GAAAA,EAAK;AACZ1B,YAAAA,SAAAA,EAAAA,CAAY3G,KAAK,CAACqI,GAAAA,CAAAA;AACpB,QAAA;AACF,IAAA,CAAA;AACF;AAiBA,wGACA,MAAMC,2BAAAA,GAA8B,IAAIC,GAAAA,CAAsC;AAC5E,IAAA,UAAA;AACA,IAAA;AACD,CAAA,CAAA;AAED,MAAMC,UAAAA,GAAa,QAAA;AAEnB;;;AAGC,IACD,MAAMC,aAAAA,GAAgB,CAACC,SAAAA,EAAmBC,IAAAA,EAAcC,KAAAA,GAAAA;AACtD,IAAA,IAAIF,YAAY,GAAA,IAAOC,IAAAA,IAAQ,KAAKC,KAAAA,IAAS,CAAA,IAAKD,QAAQC,KAAAA,EAAO;QAC/D,OAAO,IAAA;AACT,IAAA;AACA,IAAA,MAAMC,YAAYF,IAAAA,GAAOD,SAAAA;AACzB,IAAA,MAAMI,YAAYF,KAAAA,GAAQD,IAAAA;AAC1B,IAAA,MAAMI,QAAQD,SAAAA,GAAYD,SAAAA;IAC1B,IAAI,CAACG,OAAOC,QAAQ,CAACF,UAAUA,KAAAA,IAAS,CAAA,IAAKA,SAASP,UAAAA,EAAY;QAChE,OAAO,IAAA;AACT,IAAA;IACA,OAAOO,KAAAA;AACT,CAAA;AAEA,MAAMG,cAAAA,GAAiB,CAACC,cAAAA,GAA0B,EAAa,GAAA;AAC7D,IAAA,MAAMC,OAAAA,GAAUD,cAAAA;IAChB,MAAME,YAAAA,GAAe,CAACnH,KAAAA,EAAyCoH,IAAAA,GAAAA;AAC7D,QAAA,IAAI,EAAEpH,KAAAA,IAASkH,OAAM,CAAA,EAAI;YACvBG,YAAAA,CAAarH,KAAAA,CAAAA;AACf,QAAA;QAEA,MAAMsH,SAAAA,GAAYF,IAAI,CAACpH,KAAAA,CAAM;AAC7B,QAAA,MAAMuH,WAAAA,GAAcD,SAAAA,EAAWE,SAAAA,GAC1BF,CAAAA,SAAAA,EAAWG,OAAAA,IAAW9I,IAAAA,CAAK+F,GAAG,EAAC,IAAK4C,SAAAA,CAAUE,SAAS,GACxD,CAAA;QACJ,MAAMjH,KAAAA,GAAQ+G,WAAW/G,KAAAA,IAAS,CAAA;QAClC,MAAMF,KAAAA,GAAQiH,WAAWjH,KAAAA,IAAS,CAAA;AAClC,QAAA,MAAMV,aAAa2H,SAAAA,EAAW3H,UAAAA;AAC9B,QAAA,MAAM+H,aAAaJ,SAAAA,EAAWI,UAAAA;QAE9B,MAAMC,UAAAA,GACJD,UAAAA,IAAc,IAAA,IAAQA,UAAAA,GAAa,CAAA,GAAI,CAAA,EAAGrH,KAAAA,CAAM,GAAG,EAAEqH,UAAAA,CAAAA,CAAY,GAAGlJ,MAAAA,CAAO6B,KAAAA,CAAAA;AAC7E,QAAA,MAAMuH,WAAAA,GACJjI,UAAAA,IAAc,IAAA,IAAQA,UAAAA,GAAa,CAAA,GAC/B,CAAA,EAAGW,qBAAAA,CAAcC,KAAAA,CAAAA,CAAO,GAAG,EAAED,qBAAAA,CAAcX,UAAAA,CAAAA,CAAAA,CAAa,GACxDW,qBAAAA,CAAcC,KAAAA,CAAAA;AAEpB,QAAA,MAAMsH,KAAAA,GAAkB;AAAC,YAAA,CAAA,EAAG7H,KAAAA,CAAM,EAAE,EAAE2H,UAAAA,CAAW,YAAY,CAAC;AAAEC,YAAAA;AAAY,SAAA;AAE5E,QAAA,IAAIL,WAAAA,GAAc,CAAA,IAAK,CAACD,SAAAA,EAAWG,OAAAA,EAAS;YAC1C,IAAIrB,2BAAAA,CAA4B0B,GAAG,CAAC9H,KAAAA,CAAAA,EAAQ;gBAC1C,MAAM+H,WAAAA,GAAc,KAAC1H,GAAQ,IAAA,GAAQkH,WAAAA;gBACrCM,KAAAA,CAAM3H,IAAI,CAAC,CAAA,EAAG6H,WAAAA,CAAYC,OAAO,CAAC,CAAA,CAAA,CAAG,QAAQ,CAAC,CAAA;YAChD,CAAA,MAAO;gBACLH,KAAAA,CAAM3H,IAAI,CAAC,CAAA,EAAGI,qBAAAA,CAAc,KAACC,GAAQ,IAAA,GAAQgH,WAAAA,CAAAA,CAAa,EAAE,CAAC,CAAA;AAC/D,YAAA;AACF,QAAA;AAEA,QAAA,IAAIV,KAAAA,GAAuB,IAAA;QAC3B,IAAI,CAACS,WAAWG,OAAAA,EAAS;AACvB,YAAA,IAAIrB,2BAAAA,CAA4B0B,GAAG,CAAC9H,KAAAA,CAAAA,IAAU0H,cAAc,IAAA,EAAM;gBAChEb,KAAAA,GAAQN,aAAAA,CAAcgB,aAAalH,KAAAA,EAAOqH,UAAAA,CAAAA;YAC5C,CAAA,MAAO,IAAI/H,cAAc,IAAA,EAAM;gBAC7BkH,KAAAA,GAAQN,aAAAA,CAAcgB,aAAahH,KAAAA,EAAOZ,UAAAA,CAAAA;AAC5C,YAAA;AACF,QAAA;AACAkI,QAAAA,KAAAA,CAAM3H,IAAI,CAAC+H,2CAAAA,CAAoCV,WAAAA,IAAe,CAAA,EAAGV,KAAAA,CAAAA,CAAAA;AAEjEK,QAAAA,OAAO,CAAClH,KAAAA,CAAM,CAACP,IAAI,GAAGoI,KAAAA,CAAMzE,IAAI,CAAC8E,mCAAAA,CAAAA;QAEjC,OAAOhB,OAAO,CAAClH,KAAAA,CAAM;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMqH,eAAe,CAACrH,KAAAA,GAAAA;QACpBH,MAAAA,CAAOsI,MAAM,CAACjB,OAAAA,EAAS;AAAE,YAAA,CAAClH,QAAQoI,GAAAA;AAAM,SAAA,CAAA;QACxC,OAAOlB,OAAO,CAAClH,KAAAA,CAAM;AACvB,IAAA,CAAA;AAEA,IAAA,MAAMqI,YAAY,CAACrI,KAAAA,GAAAA;QACjB,OAAOkH,OAAO,CAAClH,KAAAA,CAAM;AACvB,IAAA,CAAA;IAEA,OAAO;AACLmH,QAAAA,YAAAA;AACAE,QAAAA,YAAAA;AACAgB,QAAAA;AACF,KAAA;AACF;AAEA;;IAGA,MAAMC,8BAA8B,CAAChH,MAAAA,GAAAA;IACnC,OAAO;QACLiH,eAAAA,EAAiB;AACfC,YAAAA,MAAAA,EAAQlH,QAAQmH,cAAAA,EAAgBC,IAAAA;AAChCC,YAAAA,WAAAA,EAAarH,QAAQsH,mBAAAA,EAAqBF;AAC5C;AACF,KAAA;AACF;AAEA;;IAGA,MAAMG,iBAAiB,CACrBvH,MAAAA,EACA,EACEwH,KAAK,EACLC,MAAM,EAIP,GAAA;AAED,IAAA,OAAO,OACLC,OAAAA,EACAC,IAAAA,GAAAA;;QAGAvH,gBAAAA,CAAiB,UAAA;AACf,YAAA,MAAML,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA;YAC5DwC,gBAAAA,CAAS,CAAA,EAAGnG,gBAAgBmL,MAAAA,EAAQ,IAAA,CAAA,CAAA;AACtC,QAAA,CAAA,CAAA;QAEA,IAAIG,eAAAA;AACJ,QAAA,MAAMV,MAAAA,GAAS,kBAAA;QAEf3I,MAAAA,CAAOsJ,OAAO,CAACH,OAAAA,CAAQI,KAAK,CAAA,CAAErJ,OAAO,CAAC,CAAC,CAACsJ,GAAAA,EAAKD,KAAAA,CAAM,GAAA;YACjD,KAAK,MAAME,QAAQF,KAAAA,CAAO;AACxB,gBAAA,MAAMxE,IAAAA,GAAO;AAACyE,oBAAAA;AAAI,iBAAA,CAACE,MAAM,CAACD,IAAAA,CAAK1E,IAAI,CAAA,CAAExB,IAAI,CAAC,GAAA,CAAA;gBAC1C,MAAMoG,OAAAA,GAAUF,KAAK1E,IAAI,CAAC0E,KAAK1E,IAAI,CAACd,MAAM,GAAG,CAAA,CAAE;;gBAG/C,IACEuF,GAAAA,KAAQ,uCACRA,GAAAA,KAAQ,yCAAA,IACRG,SAASrI,UAAAA,CAAW,cAAA,CAAA,IACpBqI,OAAAA,EAASrI,UAAAA,CAAW,iBAAA,CAAA,EACpB;AACA+H,oBAAAA,eAAAA,GAAkBI,KAAK9D,IAAI;AAC7B,gBAAA,CAAA,MAEK,IAAI8D,IAAAA,CAAK9D,IAAI,KAAK,OAAA,EAAS;AAC9BlE,oBAAAA,MAAAA,CAAOmI,aAAa,CAACvL,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAACyG,IAAAA,CAAAA,CAAM,yBAAyB,CAAC,CAAA,EAAG4D,MAAAA,CAAAA;AAClF,gBAAA,CAAA,MAAO,IAAIc,IAAAA,CAAK9D,IAAI,KAAK,SAAA,EAAW;AAClClE,oBAAAA,MAAAA,CAAOmI,aAAa,CAClBvL,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAACyG,IAAAA,CAAAA,CAAM,8BAA8B,CAAC,CAAA,EAC7D4D,MAAAA,CAAAA;AAEJ,gBAAA,CAAA,MAAO,IAAIc,IAAAA,CAAK9D,IAAI,KAAK,UAAA,EAAY;AACnClE,oBAAAA,MAAAA,CAAOmI,aAAa,CAACvL,KAAAA,CAAMG,GAAG,CAAC,CAAA,EAAGH,KAAAA,CAAMC,IAAI,CAACyG,IAAAA,CAAAA,CAAM,0BAA0B,CAAC,CAAA,EAAG4D,MAAAA,CAAAA;AACnF,gBAAA;AACF,YAAA;AACF,QAAA,CAAA,CAAA;;AAGA,QAAA,IAAIU,oBAAoB,OAAA,EAAS;YAC/B5H,MAAAA,CAAOmI,aAAa,CAACvL,KAAAA,CAAMG,GAAG,CAAC,CAAC,iDAAiD,CAAC,CAAA,EAAGmK,MAAAA,CAAAA;QACvF,CAAA,MAAO,IAAIU,oBAAoB,SAAA,EAAW;YACxC5H,MAAAA,CAAOmI,aAAa,CAClBvL,KAAAA,CAAMG,GAAG,CAAC,CAAC,sDAAsD,CAAC,CAAA,EAClEmK,MAAAA,CAAAA;QAEJ,CAAA,MAAO,IAAIU,oBAAoB,UAAA,EAAY;YACzC5H,MAAAA,CAAOoI,KAAK,CACV,IAAIhM,iCAAAA,CAAkC,qDAAA,CAAA,CAAA;AAE1C,QAAA;QAEA,MAAMiM,SAAAA,GAAY,MAAMC,0BAAAA,CACtB,gJAAA,EACA;AACEd,YAAAA;AACF,SAAA,CAAA;;AAIFpH,QAAAA,gBAAAA,CAAiB,IAAML,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA,CAAA;AAE7E,QAAA,IAAIoI,SAAAA,EAAW;AACbX,YAAAA,OAAAA,CAAQa,YAAY,GAAGC,QAAAA,CAAMd,QAAQI,KAAK,EAAEJ,QAAQa,YAAY,CAAA;AAClE,QAAA;AAEA,QAAA,OAAOZ,IAAAA,CAAKD,OAAAA,CAAAA;AACd,IAAA,CAAA;AACF;AAEA,MAAMe,yBAAyB,CAC7BzI,MAAAA,EACA,EACEwH,KAAK,EACLC,MAAM,EAIP,GAAA;AAED,IAAA,OAAO,OACLC,OAAAA,EACAC,IAAAA,GAAAA;;QAGAvH,gBAAAA,CAAiB,UAAA;AACf,YAAA,MAAML,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA;YAC5DwC,gBAAAA,CAAS,CAAA,EAAGnG,gBAAgBmL,MAAAA,EAAQ,IAAA,CAAA,CAAA;AACtC,QAAA,CAAA,CAAA;AAEAiB,QAAAA,OAAAA,CAAQ9D,IAAI,CACV,0IAAA,CAAA;QAEF,MAAMyD,SAAAA,GAAY,MAAMC,0BAAAA,CACtB,uEAAA,EACA;AACEd,YAAAA;AACF,SAAA,CAAA;AAGF,QAAA,IAAIa,SAAAA,EAAW;AACbX,YAAAA,OAAAA,CAAQiB,MAAM,GAAG,IAAA;AACnB,QAAA;;AAGAvI,QAAAA,gBAAAA,CAAiB,IAAML,aAAAA,CAAc;AAAEC,gBAAAA,MAAAA;gBAAQC,MAAAA,EAAQA;AAAsB,aAAA,CAAA,CAAA;AAC7E,QAAA,OAAO0H,IAAAA,CAAKD,OAAAA,CAAAA;AACd,IAAA,CAAA;AACF;AAEA,MAAMkB,eAAAA,GAAkB,CACtBjI,IAAAA,EACAkI,QAAAA,GAAAA;AAEA,IAAA,IAAIlI,IAAAA,CAAKwB,OAAO,EAAErC,QAAAA,CAAS+I,QAAAA,CAAAA,EAAW;QACpC,OAAO,IAAA;AACT,IAAA;IACA,IAAIlI,IAAAA,CAAKyB,IAAI,EAAE;AACb,QAAA,OAAO,CAACzB,IAAAA,CAAKyB,IAAI,CAACtC,QAAQ,CAAC+I,QAAAA,CAAAA;AAC7B,IAAA;IAEA,OAAO,KAAA;AACT;AAMA;AACA,MAAMC,uBAAAA,GAA0B,CAC9BnI,IAAAA,EACAV,OAAAA,GAAAA;AAEA,IAAA,MAAM8I,eAAAA,GAA6C;QACjD5G,OAAAA,EAAS;AACJ5D,YAAAA,GAAAA,MAAAA,CAAOC,IAAI,CAACyB,OAAAA,CAAO+I,YAAY,CAAA,CAAE1G,MAAM,CAAC7C,oBAAAA,CAAAA;AACxCD,YAAAA,GAAAA;AACJ,SAAA;QACDyJ,OAAAA,EAASC;AACX,KAAA;AAEA,IAAA,MAAMC,iBAAiB,EACrB,IAACxI,CAAKyB,IAAI,IAAI,CAACzB,IAAAA,CAAKyB,IAAI,CAACtC,QAAQ,CAAC,SAAA,CAAA,IAClCa,KAAKwB,OAAO,EAAErC,SAAS,SAAA,CAAS,CAAA;AAGlC,IAAA,IAAI,CAACqJ,cAAAA,EAAgB;;QAEnBJ,eAAAA,CAAgBE,OAAO,GAAG,EAAE;IAC9B,CAAA,MAAO,IAAIL,eAAAA,CAAgBjI,IAAAA,EAAM,QAAA,CAAA,EAAW;;;AAG1CoI,QAAAA,eAAAA,CAAgBE,OAAO,GAAG1K,MAAAA,CAAOC,IAAI,CAACyB,OAAAA,CAAO+I,YAAY,CAAA,CAAE1G,MAAM,CAC/D,CAACyF,GAAAA,GAAQ,CAACtI,oBAAAA,CAAqBsI,GAAAA,CAAAA,CAAAA;AAEnC,IAAA;AAEA,IAAA,MAAMqB,aAAAA,GACJ;QACEC,QAAAA,EAAUN,eAAAA;QACVO,MAAAA,EAAQ,CAACV,gBAAgBjI,IAAAA,EAAM,OAAA,CAAA;QAC/B4I,aAAAA,EAAe;YACbC,OAAAA,EAAS,CAACZ,gBAAgBjI,IAAAA,EAAM,QAAA,CAAA;YAChC8I,SAAAA,EAAW,CAACb,gBAAgBjI,IAAAA,EAAM,QAAA;AACpC;AACF,KAAA;IAEF,OAAOyI,aAAAA;AACT;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"data-transfer.js","sources":["../../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport path from 'node:path';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger, type winston, formats } from '@strapi/logger';\nimport { createStrapi, compileStrapi } from '@strapi/core';\nimport ora from 'ora';\nimport { merge } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\nimport { engine as engineDataTransfer, strapi as strapiDataTransfer } from '@strapi/data-transfer';\n\nimport {\n readableBytes,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n exitWith,\n} from './helpers';\nimport { getParseListWithChoices, parseInteger, confirmMessage } from './commander';\n\nconst {\n errors: { TransferEngineInitializationError },\n} = engineDataTransfer;\n\nconst exitMessageText = (process: string, error = false) => {\n const processCapitalized = process[0].toUpperCase() + process.slice(1);\n\n if (!error) {\n return chalk.bold(\n chalk.green(`${processCapitalized} process has been completed successfully!`)\n );\n }\n\n return chalk.bold(chalk.red(`${processCapitalized} process failed.`));\n};\n\nconst pad = (n: number) => {\n return (n < 10 ? '0' : '') + String(n);\n};\n\nconst yyyymmddHHMMSS = () => {\n const date = new Date();\n\n return (\n date.getFullYear() +\n pad(date.getMonth() + 1) +\n pad(date.getDate()) +\n pad(date.getHours()) +\n pad(date.getMinutes()) +\n pad(date.getSeconds())\n );\n};\n\nconst getDefaultExportName = () => {\n return `export_${yyyymmddHHMMSS()}`;\n};\n\ntype ResultData = engineDataTransfer.ITransferResults<\n engineDataTransfer.ISourceProvider,\n engineDataTransfer.IDestinationProvider\n>['engine'];\n\nconst buildTransferTable = (resultData: ResultData) => {\n if (!resultData) {\n return;\n }\n\n // Build pretty table\n const table = new Table({\n head: ['Type', 'Count', 'Size'].map((text) => chalk.bold.blue(text)),\n });\n\n let totalBytes = 0;\n let totalItems = 0;\n (Object.keys(resultData) as engineDataTransfer.TransferStage[]).forEach((stage) => {\n const item = resultData[stage];\n\n if (!item) {\n return;\n }\n\n table.push([\n { hAlign: 'left', content: chalk.bold(stage) },\n { hAlign: 'right', content: item.count },\n { hAlign: 'right', content: `${readableBytes(item.bytes, 1, 11)} ` },\n ]);\n totalBytes += item.bytes;\n totalItems += item.count;\n\n if (item.aggregates) {\n (Object.keys(item.aggregates) as (keyof typeof item.aggregates)[])\n .sort()\n .forEach((subkey) => {\n if (!item.aggregates) {\n return;\n }\n\n const subitem = item.aggregates[subkey];\n\n table.push([\n { hAlign: 'left', content: `-- ${chalk.bold.grey(subkey)}` },\n { hAlign: 'right', content: chalk.grey(subitem.count) },\n { hAlign: 'right', content: chalk.grey(`(${readableBytes(subitem.bytes, 1, 11)})`) },\n ]);\n });\n }\n });\n table.push([\n { hAlign: 'left', content: chalk.bold.green('Total') },\n { hAlign: 'right', content: chalk.bold.green(totalItems) },\n { hAlign: 'right', content: `${chalk.bold.green(readableBytes(totalBytes, 1, 11))} ` },\n ]);\n\n return table;\n};\n\nconst IGNORED_CONTENT_TYPE_PREFIXES = ['admin::'];\n\nconst IGNORED_CONTENT_TYPES = [\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst isIgnoredContentType = (type: string) =>\n IGNORED_CONTENT_TYPE_PREFIXES.some((prefix) => type.startsWith(prefix)) ||\n IGNORED_CONTENT_TYPES.includes(type);\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.Strapi;\n}) => {\n try {\n await engine.abortTransfer();\n await strapi.destroy();\n } catch (e) {\n // ignore because there's not much else we can do\n return false;\n }\n return true;\n};\n\nconst setSignalHandler = async (\n handler: (...args: unknown[]) => void,\n signals = ['SIGINT', 'SIGTERM', 'SIGQUIT']\n) => {\n signals.forEach((signal) => {\n // We specifically remove ALL listeners because we have to clear the one added in Strapi bootstrap that has a process.exit\n // TODO: Ideally Strapi bootstrap would not add that listener, and then this could be more flexible and add/remove only what it needs to\n process.removeAllListeners(signal);\n process.on(signal, handler);\n });\n};\n\nconst createStrapiInstance = async (opts: { logLevel?: string } = {}): Promise<Core.Strapi> => {\n try {\n const appContext = await compileStrapi();\n const app = createStrapi({ ...opts, ...appContext });\n\n app.log.level = opts.logLevel || 'error';\n return await app.load();\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ECONNREFUSED') {\n throw new Error('Process failed. Check the database connection with your Strapi project.');\n }\n\n throw error;\n }\n};\n\nconst transferDataTypes = Object.keys(engineDataTransfer.TransferGroupPresets);\n\nconst throttleOption = new Option(\n '--throttle <delay after each entity>',\n `Add a delay in milliseconds between each transferred entity`\n)\n .argParser(parseInteger)\n .hideHelp(); // This option is not publicly documented\n\nconst excludeOption = new Option(\n '--exclude <comma-separated data types>',\n `Exclude data using comma-separated types. Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"exclude\"'));\n\nconst onlyOption = new Option(\n '--only <command-separated data types>',\n `Include only these types of data (plus schemas). Available types: ${transferDataTypes.join(',')}`\n).argParser(getParseListWithChoices(transferDataTypes, 'Invalid options for \"only\"'));\n\nconst validateExcludeOnly = (command: Command) => {\n const { exclude, only } = command.opts();\n if (!only || !exclude) {\n return;\n }\n\n const choicesInBoth = only.filter((n: string) => {\n return exclude.indexOf(n) !== -1;\n });\n if (choicesInBoth.length > 0) {\n exitWith(\n 1,\n `Data types may not be used in both \"exclude\" and \"only\" in the same command. Found in both: ${choicesInBoth.join(\n ','\n )}`\n );\n }\n};\n\nconst errorColors = {\n fatal: chalk.red,\n error: chalk.red,\n silly: chalk.yellow,\n} as const;\n\nconst formatDiagnostic = (\n operation: string,\n verbose?: boolean\n): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] => {\n let logger: undefined | winston.Logger;\n let logFileBasename: string | undefined;\n\n const getLogger = () => {\n if (!logger) {\n logFileBasename = `${operation}_${Date.now()}.log`;\n const absoluteLogPath = path.resolve(process.cwd(), logFileBasename);\n\n logger = createLogger(\n configs.createOutputFileConfiguration(\n logFileBasename,\n {\n level: 'info',\n format: formats?.detailedLogs,\n },\n {\n consoleLevel: verbose ? 'info' : 'warn',\n }\n )\n );\n\n logger.info(\n `[${operation}] Diagnostic log file: ${absoluteLogPath} (info-level messages are written here even without --verbose)`\n );\n }\n return logger;\n };\n\n return ({ details, kind }) => {\n try {\n if (kind === 'error') {\n const { message, severity = 'fatal' } = details;\n\n const colorizeError = errorColors[severity];\n const errorMessage = colorizeError(`[${severity.toUpperCase()}] ${message}`);\n\n getLogger().error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params, origin } = details;\n\n const msg = `[${origin ?? 'transfer'}] ${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n getLogger().info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n getLogger().warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n getLogger().error(err);\n }\n };\n};\n\ntype Loaders = {\n [key in engineDataTransfer.TransferStage]: ora.Ora;\n};\n\ntype Data = {\n [key in engineDataTransfer.TransferStage]?: {\n startTime?: number;\n endTime?: number;\n bytes?: number;\n count?: number;\n totalBytes?: number;\n totalCount?: number;\n };\n};\n\n/** Stages where throughput is dominated by DB work; items/s is more meaningful than JSON byte rate. */\nconst STAGES_WITH_ITEM_THROUGHPUT = new Set<engineDataTransfer.TransferStage>([\n 'entities',\n 'links',\n]);\n\nconst MAX_ETA_MS = 86_400_000;\n\n/**\n * Linear ETA from completed amount vs total, using average rate so far (done / elapsedMs).\n * Returns null when progress or totals are not usable yet.\n */\nconst estimateEtaMs = (elapsedMs: number, done: number, total: number): number | null => {\n if (elapsedMs < 500 || done <= 0 || total <= 0 || done >= total) {\n return null;\n }\n const ratePerMs = done / elapsedMs;\n const remaining = total - done;\n const etaMs = remaining / ratePerMs;\n if (!Number.isFinite(etaMs) || etaMs <= 0 || etaMs >= MAX_ETA_MS) {\n return null;\n }\n return etaMs;\n};\n\nconst loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {\n const loaders = defaultLoaders;\n const updateLoader = (stage: engineDataTransfer.TransferStage, data: Data) => {\n if (!(stage in loaders)) {\n createLoader(stage);\n }\n\n const stageData = data[stage];\n const elapsedTime = stageData?.startTime\n ? (stageData?.endTime || Date.now()) - stageData.startTime\n : 0;\n const bytes = stageData?.bytes ?? 0;\n const count = stageData?.count ?? 0;\n const totalBytes = stageData?.totalBytes;\n const totalCount = stageData?.totalCount;\n\n const countLabel =\n totalCount != null && totalCount > 0 ? `${count} / ${totalCount}` : String(count);\n const sizeCompact =\n totalBytes != null && totalBytes > 0\n ? `${readableBytes(bytes)} / ${readableBytes(totalBytes)}`\n : readableBytes(bytes);\n\n const parts: string[] = [`${stage}: ${countLabel} transferred`, sizeCompact];\n\n if (elapsedTime > 0 && !stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage)) {\n const itemsPerSec = (count * 1000) / elapsedTime;\n parts.push(`${itemsPerSec.toFixed(1)} items/s`);\n } else {\n parts.push(`${readableBytes((bytes * 1000) / elapsedTime)}/s`);\n }\n }\n\n let etaMs: number | null = null;\n if (!stageData?.endTime) {\n if (STAGES_WITH_ITEM_THROUGHPUT.has(stage) && totalCount != null) {\n etaMs = estimateEtaMs(elapsedTime, count, totalCount);\n } else if (totalBytes != null) {\n etaMs = estimateEtaMs(elapsedTime, bytes, totalBytes);\n }\n }\n parts.push(formatElapsedAndMaybeRemainingLabel(elapsedTime ?? 0, etaMs));\n\n loaders[stage].text = parts.join(TRANSFER_PROGRESS_FIELD_SEP);\n\n return loaders[stage];\n };\n\n const createLoader = (stage: engineDataTransfer.TransferStage) => {\n Object.assign(loaders, { [stage]: ora() });\n return loaders[stage];\n };\n\n const getLoader = (stage: engineDataTransfer.TransferStage) => {\n return loaders[stage];\n };\n\n return {\n updateLoader,\n createLoader,\n getLoader,\n };\n};\n\n/**\n * Get the telemetry data to be sent for a didDEITSProcess* event from an initialized transfer engine object\n */\nconst getTransferTelemetryPayload = (engine: engineDataTransfer.TransferEngine) => {\n return {\n eventProperties: {\n source: engine?.sourceProvider?.name,\n destination: engine?.destinationProvider?.name,\n },\n };\n};\n\n/**\n * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check\n */\nconst getDiffHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.SchemaDiffHandlerContext,\n next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n let workflowsStatus;\n const source = 'Schema Integrity';\n\n Object.entries(context.diffs).forEach(([uid, diffs]) => {\n for (const diff of diffs) {\n const path = [uid].concat(diff.path).join('.');\n const endPath = diff.path[diff.path.length - 1];\n\n // Catch known features\n if (\n uid === 'plugin::review-workflows.workflow' ||\n uid === 'plugin::review-workflows.workflow-stage' ||\n endPath?.startsWith('strapi_stage') ||\n endPath?.startsWith('strapi_assignee')\n ) {\n workflowsStatus = diff.kind;\n }\n // handle generic cases\n else if (diff.kind === 'added') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);\n } else if (diff.kind === 'deleted') {\n engine.reportWarning(\n chalk.red(`${chalk.bold(path)} does not exist on destination`),\n source\n );\n } else if (diff.kind === 'modified') {\n engine.reportWarning(chalk.red(`${chalk.bold(path)} has a different data type`), source);\n }\n }\n });\n\n // output the known feature warnings\n if (workflowsStatus === 'added') {\n engine.reportWarning(chalk.red(`Review workflows feature does not exist on source`), source);\n } else if (workflowsStatus === 'deleted') {\n engine.reportWarning(\n chalk.red(`Review workflows feature does not exist on destination`),\n source\n );\n } else if (workflowsStatus === 'modified') {\n engine.panic(\n new TransferEngineInitializationError('Unresolved differences in schema [review workflows]')\n );\n }\n\n const confirmed = await confirmMessage(\n 'There are differences in schema between the source and destination, and the data listed above will be lost. Are you sure you want to continue?',\n {\n force,\n }\n );\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n if (confirmed) {\n context.ignoredDiffs = merge(context.diffs, context.ignoredDiffs);\n }\n\n return next(context);\n };\n};\n\nconst getAssetsBackupHandler = (\n engine: engineDataTransfer.TransferEngine,\n {\n force,\n action,\n }: {\n force?: boolean;\n action: string;\n }\n) => {\n return async (\n context: engineDataTransfer.ErrorHandlerContext,\n next: (ctx: engineDataTransfer.ErrorHandlerContext) => void\n ) => {\n // if we abort here, we need to actually exit the process because of conflict with inquirer prompt\n setSignalHandler(async () => {\n await abortTransfer({ engine, strapi: strapi as Core.Strapi });\n exitWith(1, exitMessageText(action, true));\n });\n\n console.warn(\n 'The backup for the assets could not be created inside the public directory. Ensure Strapi has write permissions on the public directory.'\n );\n const confirmed = await confirmMessage(\n 'Do you want to continue without backing up your public/uploads files?',\n {\n force,\n }\n );\n\n if (confirmed) {\n context.ignore = true;\n }\n\n // reset handler back to normal\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n return next(context);\n };\n};\n\nconst shouldSkipStage = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n dataKind: engineDataTransfer.TransferFilterPreset\n) => {\n if (opts.exclude?.includes(dataKind)) {\n return true;\n }\n if (opts.only) {\n return !opts.only.includes(dataKind);\n }\n\n return false;\n};\n\ntype RestoreConfig = NonNullable<\n strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore']\n>;\n\n// Based on exclude/only from options, create the restore object to match\nconst parseRestoreFromOptions = (\n opts: Partial<engineDataTransfer.ITransferEngineOptions>,\n strapi: Core.Strapi\n) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: [\n ...Object.keys(strapi.contentTypes).filter(isIgnoredContentType),\n ...IGNORED_CONTENT_TYPES,\n ],\n include: undefined,\n };\n\n const contentInScope = !(\n (opts.only && !opts.only.includes('content')) ||\n opts.exclude?.includes('content')\n );\n\n if (!contentInScope) {\n // Nothing from the entities stage is transferred; do not delete any records beforehand.\n entitiesOptions.include = [];\n } else if (shouldSkipStage(opts, 'config')) {\n // When config is excluded, scope pre-transfer deletion to user content types only.\n // Internal models (e.g. strapi::core-store) must not be wiped via the entities path.\n entitiesOptions.include = Object.keys(strapi.contentTypes).filter(\n (uid) => !isIgnoredContentType(uid)\n );\n }\n\n const restoreConfig: strapiDataTransfer.providers.ILocalStrapiDestinationProviderOptions['restore'] =\n {\n entities: entitiesOptions,\n assets: !shouldSkipStage(opts, 'files'),\n configuration: {\n webhook: !shouldSkipStage(opts, 'config'),\n coreStore: !shouldSkipStage(opts, 'config'),\n },\n };\n\n return restoreConfig;\n};\n\nexport {\n loadersFactory,\n buildTransferTable,\n getDefaultExportName,\n getTransferTelemetryPayload,\n isIgnoredContentType,\n createStrapiInstance,\n excludeOption,\n exitMessageText,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n formatDiagnostic,\n abortTransfer,\n setSignalHandler,\n getDiffHandler,\n getAssetsBackupHandler,\n shouldSkipStage,\n parseRestoreFromOptions,\n};\n"],"names":["errors","TransferEngineInitializationError","engineDataTransfer","exitMessageText","process","error","processCapitalized","toUpperCase","slice","chalk","bold","green","red","pad","n","String","yyyymmddHHMMSS","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDefaultExportName","buildTransferTable","resultData","table","Table","head","map","text","blue","totalBytes","totalItems","Object","keys","forEach","stage","item","push","hAlign","content","count","readableBytes","bytes","aggregates","sort","subkey","subitem","grey","IGNORED_CONTENT_TYPE_PREFIXES","IGNORED_CONTENT_TYPES","isIgnoredContentType","type","some","prefix","startsWith","includes","abortTransfer","engine","strapi","destroy","e","setSignalHandler","handler","signals","signal","removeAllListeners","on","createStrapiInstance","opts","appContext","compileStrapi","app","createStrapi","log","level","logLevel","load","Error","code","transferDataTypes","TransferGroupPresets","throttleOption","Option","argParser","parseInteger","hideHelp","excludeOption","join","getParseListWithChoices","onlyOption","validateExcludeOnly","command","exclude","only","choicesInBoth","filter","indexOf","length","exitWith","errorColors","fatal","silly","yellow","formatDiagnostic","operation","verbose","logger","logFileBasename","getLogger","now","absoluteLogPath","path","resolve","cwd","createLogger","configs","createOutputFileConfiguration","format","formats","detailedLogs","consoleLevel","info","details","kind","message","severity","colorizeError","errorMessage","params","origin","msg","JSON","stringify","warn","err","STAGES_WITH_ITEM_THROUGHPUT","Set","MAX_ETA_MS","estimateEtaMs","elapsedMs","done","total","ratePerMs","remaining","etaMs","Number","isFinite","loadersFactory","defaultLoaders","loaders","updateLoader","data","createLoader","stageData","elapsedTime","startTime","endTime","totalCount","countLabel","sizeCompact","parts","has","itemsPerSec","toFixed","formatElapsedAndMaybeRemainingLabel","TRANSFER_PROGRESS_FIELD_SEP","assign","ora","getLoader","getTransferTelemetryPayload","eventProperties","source","sourceProvider","name","destination","destinationProvider","getDiffHandler","force","action","context","next","workflowsStatus","entries","diffs","uid","diff","concat","endPath","reportWarning","panic","confirmed","confirmMessage","ignoredDiffs","merge","getAssetsBackupHandler","console","ignore","shouldSkipStage","dataKind","parseRestoreFromOptions","entitiesOptions","contentTypes","include","undefined","contentInScope","restoreConfig","entities","assets","configuration","webhook","coreStore"],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@ var chalk = require('chalk');
|
|
|
4
4
|
var fp = require('lodash/fp');
|
|
5
5
|
require('boxen');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
10
|
+
|
|
7
11
|
/**
|
|
8
12
|
* Helper functions for the Strapi CLI
|
|
9
13
|
*/ const bytesPerKb = 1024;
|
|
@@ -66,9 +70,9 @@ function floorToDecimal(value, decimals) {
|
|
|
66
70
|
const { logger = console, prc = process } = options;
|
|
67
71
|
const log = (message)=>{
|
|
68
72
|
if (code === 0) {
|
|
69
|
-
logger.log(
|
|
73
|
+
logger.log(chalk__default.default.green(message));
|
|
70
74
|
} else {
|
|
71
|
-
logger.error(
|
|
75
|
+
logger.error(chalk__default.default.red(message));
|
|
72
76
|
}
|
|
73
77
|
};
|
|
74
78
|
if (fp.isString(message)) {
|
|
@@ -114,7 +118,7 @@ function floorToDecimal(value, decimals) {
|
|
|
114
118
|
};
|
|
115
119
|
const assertCwdContainsStrapiProject = (name)=>{
|
|
116
120
|
const logErrorAndExit = ()=>{
|
|
117
|
-
console.log(`You need to run ${
|
|
121
|
+
console.log(`You need to run ${chalk__default.default.yellow(`strapi ${name}`)} in a Strapi project. Make sure you are in the right directory.`);
|
|
118
122
|
process.exit(1);
|
|
119
123
|
};
|
|
120
124
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch (err) {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\nimport { getInquirer } from './get-inquirer';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${(bytes / bytesPerKb ** i).toFixed(decimals)} ${sizes[i].padStart(2)}`;\n\n return result.padStart(padStart);\n};\n\n// Helper to floor a number to a given number of decimal places\nfunction floorToDecimal(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.floor(value * factor) / factor;\n}\n\n/**\n * Convert elapsed time to a human readable formatted string, for example \"1024\" becomes \"1s\"\n */\nconst readableTime = (elapsedTime: number, decimals = 1, padStart = 0): string => {\n let value: number;\n let unit: string;\n\n if (elapsedTime >= 60000) {\n value = elapsedTime / 60000;\n unit = 'm';\n } else if (elapsedTime >= 1000) {\n value = elapsedTime / 1000;\n unit = 's';\n } else {\n value = elapsedTime;\n unit = 'ms';\n }\n\n const floored = floorToDecimal(value, decimals);\n const result = `${floored.toFixed(decimals)}${unit}`;\n return result.padStart(padStart);\n};\n\n/**\n * Separates transfer progress segments (count, size, elapsed, rate, ETA) instead of nested\n * parentheses — easier to scan in a single terminal line.\n */\nconst TRANSFER_PROGRESS_FIELD_SEP = ' · ';\n\n/**\n * Stage / prep timing: plain `readableTime` (e.g. `1.2s`) when no ETA; with ETA, append\n * `, ~4.0s remaining` (`~` = approximate). Same base format for every stage; remaining is additive.\n */\nconst formatElapsedAndMaybeRemainingLabel = (\n elapsedMs: number,\n remainingMs: number | null\n): string =>\n remainingMs != null\n ? `${readableTime(elapsedMs)}, ~${readableTime(remainingMs)} remaining`\n : readableTime(elapsedMs);\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch (err) {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const inquirer = await getInquirer();\n const { confirmed } = await inquirer.prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n readableTime,\n formatElapsedAndMaybeRemainingLabel,\n TRANSFER_PROGRESS_FIELD_SEP,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","toFixed","floorToDecimal","value","factor","readableTime","elapsedTime","unit","floored","TRANSFER_PROGRESS_FIELD_SEP","formatElapsedAndMaybeRemainingLabel","elapsedMs","remainingMs","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -4,7 +4,10 @@ var chalk = require('chalk');
|
|
|
4
4
|
var ora = require('ora');
|
|
5
5
|
var cliProgress = require('cli-progress');
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
8
11
|
var n = Object.create(null);
|
|
9
12
|
if (e) {
|
|
10
13
|
Object.keys(e).forEach(function (k) {
|
|
@@ -21,7 +24,9 @@ function _interopNamespaceDefault(e) {
|
|
|
21
24
|
return Object.freeze(n);
|
|
22
25
|
}
|
|
23
26
|
|
|
24
|
-
var
|
|
27
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
28
|
+
var ora__default = /*#__PURE__*/_interopDefault(ora);
|
|
29
|
+
var cliProgress__namespace = /*#__PURE__*/_interopNamespace(cliProgress);
|
|
25
30
|
|
|
26
31
|
const silentSpinner = {
|
|
27
32
|
succeed () {
|
|
@@ -64,52 +69,52 @@ const createLogger = (options = {})=>{
|
|
|
64
69
|
if (silent || !debug) {
|
|
65
70
|
return;
|
|
66
71
|
}
|
|
67
|
-
console.log(
|
|
72
|
+
console.log(chalk__default.default.cyan(`[DEBUG]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
68
73
|
},
|
|
69
74
|
info (...args) {
|
|
70
75
|
if (silent) {
|
|
71
76
|
return;
|
|
72
77
|
}
|
|
73
|
-
console.info(
|
|
78
|
+
console.info(chalk__default.default.blue(`[INFO]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
74
79
|
},
|
|
75
80
|
log (...args) {
|
|
76
81
|
if (silent) {
|
|
77
82
|
return;
|
|
78
83
|
}
|
|
79
|
-
console.info(
|
|
84
|
+
console.info(chalk__default.default.blue(`${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
80
85
|
},
|
|
81
86
|
success (...args) {
|
|
82
87
|
if (silent) {
|
|
83
88
|
return;
|
|
84
89
|
}
|
|
85
|
-
console.info(
|
|
90
|
+
console.info(chalk__default.default.green(`[SUCCESS]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
86
91
|
},
|
|
87
92
|
warn (...args) {
|
|
88
93
|
state.warning += 1;
|
|
89
94
|
if (silent) {
|
|
90
95
|
return;
|
|
91
96
|
}
|
|
92
|
-
console.warn(
|
|
97
|
+
console.warn(chalk__default.default.yellow(`[WARN]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
93
98
|
},
|
|
94
99
|
error (...args) {
|
|
95
100
|
state.errors += 1;
|
|
96
101
|
if (silent) {
|
|
97
102
|
return;
|
|
98
103
|
}
|
|
99
|
-
console.error(
|
|
104
|
+
console.error(chalk__default.default.red(`[ERROR]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
100
105
|
},
|
|
101
106
|
spinner (text) {
|
|
102
107
|
if (silent) {
|
|
103
108
|
return silentSpinner;
|
|
104
109
|
}
|
|
105
|
-
return
|
|
110
|
+
return ora__default.default(text);
|
|
106
111
|
},
|
|
107
112
|
progressBar (totalSize, text) {
|
|
108
113
|
if (silent) {
|
|
109
114
|
return silentProgressBar;
|
|
110
115
|
}
|
|
111
116
|
const progressBar = new cliProgress__namespace.SingleBar({
|
|
112
|
-
format: `${text ? `${text} |` : ''}${
|
|
117
|
+
format: `${text ? `${text} |` : ''}${chalk__default.default.green('{bar}')}| {percentage}%`,
|
|
113
118
|
barCompleteChar: '\u2588',
|
|
114
119
|
barIncompleteChar: '\u2591',
|
|
115
120
|
hideCursor: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
|