@strapi/strapi 5.42.1 → 5.43.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/cli/commands/admin/active-user.d.ts +15 -0
- package/dist/cli/commands/admin/active-user.d.ts.map +1 -0
- package/dist/cli/commands/admin/block-user.d.ts +15 -0
- package/dist/cli/commands/admin/block-user.d.ts.map +1 -0
- package/dist/cli/commands/admin/delete-user.d.ts +14 -0
- package/dist/cli/commands/admin/delete-user.d.ts.map +1 -0
- package/dist/cli/commands/admin/list-users.d.ts +11 -0
- package/dist/cli/commands/admin/list-users.d.ts.map +1 -0
- package/dist/cli/commands/export/action.d.ts.map +1 -1
- package/dist/cli/commands/import/action.d.ts.map +1 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/transfer/action.d.ts +1 -0
- package/dist/cli/commands/transfer/action.d.ts.map +1 -1
- package/dist/cli/commands/transfer/command.d.ts.map +1 -1
- package/dist/cli/utils/data-transfer.d.ts +6 -4
- package/dist/cli/utils/data-transfer.d.ts.map +1 -1
- package/dist/cli/utils/helpers.d.ts +15 -1
- package/dist/cli/utils/helpers.d.ts.map +1 -1
- package/dist/node/build.d.ts.map +1 -1
- package/dist/node/develop.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 +73 -0
- package/dist/src/cli/commands/admin/active-user.js.map +1 -0
- package/dist/src/cli/commands/admin/active-user.mjs +70 -0
- package/dist/src/cli/commands/admin/active-user.mjs.map +1 -0
- package/dist/src/cli/commands/admin/block-user.js +73 -0
- package/dist/src/cli/commands/admin/block-user.js.map +1 -0
- package/dist/src/cli/commands/admin/block-user.mjs +70 -0
- package/dist/src/cli/commands/admin/block-user.mjs.map +1 -0
- package/dist/src/cli/commands/admin/delete-user.js +88 -0
- package/dist/src/cli/commands/admin/delete-user.js.map +1 -0
- package/dist/src/cli/commands/admin/delete-user.mjs +85 -0
- package/dist/src/cli/commands/admin/delete-user.mjs.map +1 -0
- package/dist/src/cli/commands/admin/list-users.js +62 -0
- package/dist/src/cli/commands/admin/list-users.js.map +1 -0
- package/dist/src/cli/commands/admin/list-users.mjs +59 -0
- package/dist/src/cli/commands/admin/list-users.mjs.map +1 -0
- package/dist/src/cli/commands/export/action.js +2 -2
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/export/action.mjs +3 -3
- package/dist/src/cli/commands/export/action.mjs.map +1 -1
- package/dist/src/cli/commands/import/action.js +3 -3
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/action.mjs +4 -4
- package/dist/src/cli/commands/import/action.mjs.map +1 -1
- package/dist/src/cli/commands/index.js +8 -0
- package/dist/src/cli/commands/index.js.map +1 -1
- package/dist/src/cli/commands/index.mjs +34 -26
- package/dist/src/cli/commands/index.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +105 -6
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.mjs +107 -8
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/command.js +1 -1
- package/dist/src/cli/commands/transfer/command.js.map +1 -1
- package/dist/src/cli/commands/transfer/command.mjs +1 -1
- package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +69 -21
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.mjs +70 -22
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
- package/dist/src/cli/utils/helpers.js +36 -1
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/helpers.mjs +34 -2
- package/dist/src/cli/utils/helpers.mjs.map +1 -1
- package/dist/src/node/build.js +10 -5
- package/dist/src/node/build.js.map +1 -1
- package/dist/src/node/build.mjs +10 -5
- package/dist/src/node/build.mjs.map +1 -1
- package/dist/src/node/develop.js +194 -148
- package/dist/src/node/develop.js.map +1 -1
- package/dist/src/node/develop.mjs +194 -148
- package/dist/src/node/develop.mjs.map +1 -1
- package/dist/src/node/webpack/config.js +2 -2
- package/dist/src/node/webpack/config.js.map +1 -1
- package/dist/src/node/webpack/config.mjs +2 -2
- package/dist/src/node/webpack/config.mjs.map +1 -1
- package/package.json +22 -22
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var commander = require('commander');
|
|
4
|
+
var utils = require('@strapi/utils');
|
|
5
|
+
var _ = require('lodash');
|
|
6
|
+
var core = require('@strapi/core');
|
|
7
|
+
var helpers = require('../../utils/helpers.js');
|
|
8
|
+
var getInquirer = require('../../utils/get-inquirer.js');
|
|
9
|
+
|
|
10
|
+
const emailValidator = utils.yup.string().email('Invalid email address').lowercase();
|
|
11
|
+
const adminDeleteSchema = utils.yup.object().shape({
|
|
12
|
+
email: emailValidator
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Same as create-user: `QuestionCollection` so async `validate` matches Inquirer typings
|
|
16
|
+
* (not `ReadonlyArray<DistinctQuestion<Answers>>`).
|
|
17
|
+
*/ const promptQuestions = [
|
|
18
|
+
{
|
|
19
|
+
type: 'input',
|
|
20
|
+
name: 'email',
|
|
21
|
+
message: 'Admin email?',
|
|
22
|
+
async validate (value) {
|
|
23
|
+
const validEmail = await emailValidator.validate(value);
|
|
24
|
+
return validEmail === value || validEmail;
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: 'confirm',
|
|
29
|
+
name: 'confirm',
|
|
30
|
+
message: 'Do you really want to delete this admin?'
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
async function deleteAdmin({ email }) {
|
|
34
|
+
const appContext = await core.compileStrapi();
|
|
35
|
+
const app = await core.createStrapi(appContext).load();
|
|
36
|
+
const user = await app.admin.services.user.findOneByEmail(email);
|
|
37
|
+
if (!user) {
|
|
38
|
+
console.error(`User with email "${email}" does not exist`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await app.admin.services.user.deleteById(user.id);
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error(err.message);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
console.log(`Successfully deleted admin`);
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Delete an admin user
|
|
52
|
+
*/ const action = async (cmdOptions = {})=>{
|
|
53
|
+
let { email } = cmdOptions;
|
|
54
|
+
if (_.isEmpty(email) && process.stdin.isTTY) {
|
|
55
|
+
const inquirer = await getInquirer.getInquirer();
|
|
56
|
+
const inquiry = await inquirer.prompt(promptQuestions);
|
|
57
|
+
if (!inquiry.confirm) {
|
|
58
|
+
process.exit(0);
|
|
59
|
+
}
|
|
60
|
+
({ email } = inquiry);
|
|
61
|
+
}
|
|
62
|
+
if (_.isEmpty(email)) {
|
|
63
|
+
console.error('Missing required option `email`');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
await adminDeleteSchema.validate({
|
|
68
|
+
email
|
|
69
|
+
});
|
|
70
|
+
} catch (err) {
|
|
71
|
+
if (err instanceof utils.yup.ValidationError) {
|
|
72
|
+
console.error(err.errors[0]);
|
|
73
|
+
}
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
return deleteAdmin({
|
|
77
|
+
email
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* `$ strapi admin:delete-user`
|
|
82
|
+
*/ const command = ()=>{
|
|
83
|
+
return commander.createCommand('admin:delete-user').alias('admin:delete').description('Delete an existing admin').option('-e, --email <email>', 'Email of the current admin').action(helpers.runAction('admin:delete-user', action));
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.action = action;
|
|
87
|
+
exports.command = command;
|
|
88
|
+
//# sourceMappingURL=delete-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-user.js","sources":["../../../../../src/cli/commands/admin/delete-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport type { QuestionCollection } from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst adminDeleteSchema = yup.object().shape({\n email: emailValidator,\n});\n\ninterface Answers {\n email: string;\n confirm: boolean;\n}\n\n/**\n * Same as create-user: `QuestionCollection` so async `validate` matches Inquirer typings\n * (not `ReadonlyArray<DistinctQuestion<Answers>>`).\n */\nconst promptQuestions: QuestionCollection<Answers> = [\n {\n type: 'input',\n name: 'email',\n message: 'Admin email?',\n async validate(value: string) {\n const validEmail = await emailValidator.validate(value);\n return validEmail === value || validEmail;\n },\n },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to delete this admin?',\n },\n];\n\nasync function deleteAdmin({ email }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin.services.user.findOneByEmail(email);\n\n if (!user) {\n console.error(`User with email \"${email}\" does not exist`);\n process.exit(1);\n }\n\n try {\n await app.admin!.services.user.deleteById(user.id);\n } catch (err: any) {\n console.error(err.message);\n process.exit(1);\n }\n\n console.log(`Successfully deleted admin`);\n process.exit(0);\n}\n\n/**\n * Delete an admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email } = cmdOptions;\n\n if (_.isEmpty(email) && process.stdin.isTTY) {\n const inquirer = await getInquirer();\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email } = inquiry);\n }\n\n if (_.isEmpty(email)) {\n console.error('Missing required option `email`');\n process.exit(1);\n }\n\n try {\n await adminDeleteSchema.validate({ email });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n console.error(err.errors[0]);\n }\n\n process.exit(1);\n }\n\n return deleteAdmin({ email });\n};\n\n/**\n * `$ strapi admin:delete-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:delete-user')\n .alias('admin:delete')\n .description('Delete an existing admin')\n .option('-e, --email <email>', 'Email of the current admin')\n .action(runAction('admin:delete-user', action));\n};\n\nexport { action, command };\n"],"names":["emailValidator","yup","string","email","lowercase","adminDeleteSchema","object","shape","promptQuestions","type","name","message","validate","value","validEmail","deleteAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","findOneByEmail","console","error","process","exit","deleteById","id","err","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createCommand } from 'commander';
|
|
2
|
+
import { yup } from '@strapi/utils';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { compileStrapi, createStrapi } from '@strapi/core';
|
|
5
|
+
import { runAction } from '../../utils/helpers.mjs';
|
|
6
|
+
import { getInquirer } from '../../utils/get-inquirer.mjs';
|
|
7
|
+
|
|
8
|
+
const emailValidator = yup.string().email('Invalid email address').lowercase();
|
|
9
|
+
const adminDeleteSchema = yup.object().shape({
|
|
10
|
+
email: emailValidator
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Same as create-user: `QuestionCollection` so async `validate` matches Inquirer typings
|
|
14
|
+
* (not `ReadonlyArray<DistinctQuestion<Answers>>`).
|
|
15
|
+
*/ const promptQuestions = [
|
|
16
|
+
{
|
|
17
|
+
type: 'input',
|
|
18
|
+
name: 'email',
|
|
19
|
+
message: 'Admin email?',
|
|
20
|
+
async validate (value) {
|
|
21
|
+
const validEmail = await emailValidator.validate(value);
|
|
22
|
+
return validEmail === value || validEmail;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'confirm',
|
|
27
|
+
name: 'confirm',
|
|
28
|
+
message: 'Do you really want to delete this admin?'
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
async function deleteAdmin({ email }) {
|
|
32
|
+
const appContext = await compileStrapi();
|
|
33
|
+
const app = await createStrapi(appContext).load();
|
|
34
|
+
const user = await app.admin.services.user.findOneByEmail(email);
|
|
35
|
+
if (!user) {
|
|
36
|
+
console.error(`User with email "${email}" does not exist`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
await app.admin.services.user.deleteById(user.id);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
console.error(err.message);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
console.log(`Successfully deleted admin`);
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Delete an admin user
|
|
50
|
+
*/ const action = async (cmdOptions = {})=>{
|
|
51
|
+
let { email } = cmdOptions;
|
|
52
|
+
if (_.isEmpty(email) && process.stdin.isTTY) {
|
|
53
|
+
const inquirer = await getInquirer();
|
|
54
|
+
const inquiry = await inquirer.prompt(promptQuestions);
|
|
55
|
+
if (!inquiry.confirm) {
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
({ email } = inquiry);
|
|
59
|
+
}
|
|
60
|
+
if (_.isEmpty(email)) {
|
|
61
|
+
console.error('Missing required option `email`');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await adminDeleteSchema.validate({
|
|
66
|
+
email
|
|
67
|
+
});
|
|
68
|
+
} catch (err) {
|
|
69
|
+
if (err instanceof yup.ValidationError) {
|
|
70
|
+
console.error(err.errors[0]);
|
|
71
|
+
}
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
return deleteAdmin({
|
|
75
|
+
email
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* `$ strapi admin:delete-user`
|
|
80
|
+
*/ const command = ()=>{
|
|
81
|
+
return createCommand('admin:delete-user').alias('admin:delete').description('Delete an existing admin').option('-e, --email <email>', 'Email of the current admin').action(runAction('admin:delete-user', action));
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export { action, command };
|
|
85
|
+
//# sourceMappingURL=delete-user.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-user.mjs","sources":["../../../../../src/cli/commands/admin/delete-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport type { QuestionCollection } from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst adminDeleteSchema = yup.object().shape({\n email: emailValidator,\n});\n\ninterface Answers {\n email: string;\n confirm: boolean;\n}\n\n/**\n * Same as create-user: `QuestionCollection` so async `validate` matches Inquirer typings\n * (not `ReadonlyArray<DistinctQuestion<Answers>>`).\n */\nconst promptQuestions: QuestionCollection<Answers> = [\n {\n type: 'input',\n name: 'email',\n message: 'Admin email?',\n async validate(value: string) {\n const validEmail = await emailValidator.validate(value);\n return validEmail === value || validEmail;\n },\n },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to delete this admin?',\n },\n];\n\nasync function deleteAdmin({ email }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin.services.user.findOneByEmail(email);\n\n if (!user) {\n console.error(`User with email \"${email}\" does not exist`);\n process.exit(1);\n }\n\n try {\n await app.admin!.services.user.deleteById(user.id);\n } catch (err: any) {\n console.error(err.message);\n process.exit(1);\n }\n\n console.log(`Successfully deleted admin`);\n process.exit(0);\n}\n\n/**\n * Delete an admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email } = cmdOptions;\n\n if (_.isEmpty(email) && process.stdin.isTTY) {\n const inquirer = await getInquirer();\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email } = inquiry);\n }\n\n if (_.isEmpty(email)) {\n console.error('Missing required option `email`');\n process.exit(1);\n }\n\n try {\n await adminDeleteSchema.validate({ email });\n } catch (err) {\n if (err instanceof yup.ValidationError) {\n console.error(err.errors[0]);\n }\n\n process.exit(1);\n }\n\n return deleteAdmin({ email });\n};\n\n/**\n * `$ strapi admin:delete-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:delete-user')\n .alias('admin:delete')\n .description('Delete an existing admin')\n .option('-e, --email <email>', 'Email of the current admin')\n .action(runAction('admin:delete-user', action));\n};\n\nexport { action, command };\n"],"names":["emailValidator","yup","string","email","lowercase","adminDeleteSchema","object","shape","promptQuestions","type","name","message","validate","value","validEmail","deleteAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","findOneByEmail","console","error","process","exit","deleteById","id","err","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var commander = require('commander');
|
|
4
|
+
var CLITable = require('cli-table3');
|
|
5
|
+
var chalk = require('chalk');
|
|
6
|
+
var core = require('@strapi/core');
|
|
7
|
+
var helpers = require('../../utils/helpers.js');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* List admin users
|
|
11
|
+
*/ const action = async ()=>{
|
|
12
|
+
const appContext = await core.compileStrapi();
|
|
13
|
+
const app = await core.createStrapi(appContext).load();
|
|
14
|
+
const list = await app.admin.services.user.findPage({
|
|
15
|
+
select: [
|
|
16
|
+
'id',
|
|
17
|
+
'firstname',
|
|
18
|
+
'lastname',
|
|
19
|
+
'email',
|
|
20
|
+
'isActive',
|
|
21
|
+
'blocked'
|
|
22
|
+
],
|
|
23
|
+
populate: [
|
|
24
|
+
'roles'
|
|
25
|
+
],
|
|
26
|
+
pageSize: 100
|
|
27
|
+
});
|
|
28
|
+
const infoTable = new CLITable({
|
|
29
|
+
head: [
|
|
30
|
+
chalk.blue('ID'),
|
|
31
|
+
chalk.blue('Email'),
|
|
32
|
+
chalk.blue('First Name'),
|
|
33
|
+
chalk.blue('Last Name'),
|
|
34
|
+
chalk.blue('Active'),
|
|
35
|
+
chalk.blue('Blocked'),
|
|
36
|
+
chalk.blue('Roles')
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
list.results.forEach((user)=>{
|
|
40
|
+
const roles = user.roles.map((role)=>role.name).join(', ');
|
|
41
|
+
infoTable.push([
|
|
42
|
+
user.id,
|
|
43
|
+
user.email,
|
|
44
|
+
user.firstname,
|
|
45
|
+
user.lastname,
|
|
46
|
+
user.isActive === true ? chalk.green('true') : chalk.red('false'),
|
|
47
|
+
user.blocked === true ? chalk.red('true') : chalk.green('false'),
|
|
48
|
+
roles.length > 0 ? roles : chalk.yellow('No roles assigned')
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
console.log(infoTable.toString());
|
|
52
|
+
await app.destroy();
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* `$ strapi admin:list-users`
|
|
56
|
+
*/ const command = ()=>{
|
|
57
|
+
return commander.createCommand('admin:list-users').alias('admin:list').description('List all the admin users').action(helpers.runAction('admin:list-users', action));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
exports.action = action;
|
|
61
|
+
exports.command = command;
|
|
62
|
+
//# sourceMappingURL=list-users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-users.js","sources":["../../../../../src/cli/commands/admin/list-users.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport CLITable from 'cli-table3';\nimport chalk from 'chalk';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\n/**\n * List admin users\n */\nconst action = async () => {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const list = await app.admin.services.user.findPage({\n select: ['id', 'firstname', 'lastname', 'email', 'isActive', 'blocked'],\n populate: ['roles'],\n pageSize: 100,\n });\n\n const infoTable = new CLITable({\n head: [\n chalk.blue('ID'),\n chalk.blue('Email'),\n chalk.blue('First Name'),\n chalk.blue('Last Name'),\n chalk.blue('Active'),\n chalk.blue('Blocked'),\n chalk.blue('Roles'),\n ],\n });\n\n list.results.forEach((user: any) => {\n const roles = user.roles.map((role: any) => role.name).join(', ');\n infoTable.push([\n user.id,\n user.email,\n user.firstname,\n user.lastname,\n user.isActive === true ? chalk.green('true') : chalk.red('false'),\n user.blocked === true ? chalk.red('true') : chalk.green('false'),\n roles.length > 0 ? roles : chalk.yellow('No roles assigned'),\n ]);\n });\n\n console.log(infoTable.toString());\n\n await app.destroy();\n};\n\n/**\n * `$ strapi admin:list-users`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:list-users')\n .alias('admin:list')\n .description('List all the admin users')\n .action(runAction('admin:list-users', action));\n};\n\nexport { action, command };\n"],"names":["action","appContext","compileStrapi","app","createStrapi","load","list","admin","services","user","findPage","select","populate","pageSize","infoTable","CLITable","head","chalk","blue","results","forEach","roles","map","role","name","join","push","id","email","firstname","lastname","isActive","green","red","blocked","length","yellow","console","log","toString","destroy","command","createCommand","alias","description","runAction"],"mappings":";;;;;;;;AAQA;;AAEC,UACKA,MAAAA,GAAS,UAAA;AACb,IAAA,MAAMC,aAAa,MAAMC,kBAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,iBAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMC,IAAAA,GAAO,MAAMH,GAAAA,CAAII,KAAK,CAACC,QAAQ,CAACC,IAAI,CAACC,QAAQ,CAAC;QAClDC,MAAAA,EAAQ;AAAC,YAAA,IAAA;AAAM,YAAA,WAAA;AAAa,YAAA,UAAA;AAAY,YAAA,OAAA;AAAS,YAAA,UAAA;AAAY,YAAA;AAAU,SAAA;QACvEC,QAAAA,EAAU;AAAC,YAAA;AAAQ,SAAA;QACnBC,QAAAA,EAAU;AACZ,KAAA,CAAA;IAEA,MAAMC,SAAAA,GAAY,IAAIC,QAAAA,CAAS;QAC7BC,IAAAA,EAAM;AACJC,YAAAA,KAAAA,CAAMC,IAAI,CAAC,IAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,OAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,YAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,WAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,QAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,SAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,OAAA;AACZ;AACH,KAAA,CAAA;AAEAZ,IAAAA,IAAAA,CAAKa,OAAO,CAACC,OAAO,CAAC,CAACX,IAAAA,GAAAA;AACpB,QAAA,MAAMY,KAAAA,GAAQZ,IAAAA,CAAKY,KAAK,CAACC,GAAG,CAAC,CAACC,IAAAA,GAAcA,IAAAA,CAAKC,IAAI,CAAA,CAAEC,IAAI,CAAC,IAAA,CAAA;AAC5DX,QAAAA,SAAAA,CAAUY,IAAI,CAAC;AACbjB,YAAAA,IAAAA,CAAKkB,EAAE;AACPlB,YAAAA,IAAAA,CAAKmB,KAAK;AACVnB,YAAAA,IAAAA,CAAKoB,SAAS;AACdpB,YAAAA,IAAAA,CAAKqB,QAAQ;YACbrB,IAAAA,CAAKsB,QAAQ,KAAK,IAAA,GAAOd,KAAAA,CAAMe,KAAK,CAAC,MAAA,CAAA,GAAUf,KAAAA,CAAMgB,GAAG,CAAC,OAAA,CAAA;YACzDxB,IAAAA,CAAKyB,OAAO,KAAK,IAAA,GAAOjB,KAAAA,CAAMgB,GAAG,CAAC,MAAA,CAAA,GAAUhB,KAAAA,CAAMe,KAAK,CAAC,OAAA,CAAA;AACxDX,YAAAA,KAAAA,CAAMc,MAAM,GAAG,CAAA,GAAId,KAAAA,GAAQJ,KAAAA,CAAMmB,MAAM,CAAC,mBAAA;AACzC,SAAA,CAAA;AACH,IAAA,CAAA,CAAA;IAEAC,OAAAA,CAAQC,GAAG,CAACxB,SAAAA,CAAUyB,QAAQ,EAAA,CAAA;AAE9B,IAAA,MAAMpC,IAAIqC,OAAO,EAAA;AACnB;AAEA;;AAEC,UACKC,OAAAA,GAAyB,IAAA;IAC7B,OAAOC,uBAAAA,CAAc,kBAAA,CAAA,CAClBC,KAAK,CAAC,YAAA,CAAA,CACNC,WAAW,CAAC,0BAAA,CAAA,CACZ5C,MAAM,CAAC6C,iBAAAA,CAAU,kBAAA,EAAoB7C,MAAAA,CAAAA,CAAAA;AAC1C;;;;;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createCommand } from 'commander';
|
|
2
|
+
import CLITable from 'cli-table3';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { compileStrapi, createStrapi } from '@strapi/core';
|
|
5
|
+
import { runAction } from '../../utils/helpers.mjs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* List admin users
|
|
9
|
+
*/ const action = async ()=>{
|
|
10
|
+
const appContext = await compileStrapi();
|
|
11
|
+
const app = await createStrapi(appContext).load();
|
|
12
|
+
const list = await app.admin.services.user.findPage({
|
|
13
|
+
select: [
|
|
14
|
+
'id',
|
|
15
|
+
'firstname',
|
|
16
|
+
'lastname',
|
|
17
|
+
'email',
|
|
18
|
+
'isActive',
|
|
19
|
+
'blocked'
|
|
20
|
+
],
|
|
21
|
+
populate: [
|
|
22
|
+
'roles'
|
|
23
|
+
],
|
|
24
|
+
pageSize: 100
|
|
25
|
+
});
|
|
26
|
+
const infoTable = new CLITable({
|
|
27
|
+
head: [
|
|
28
|
+
chalk.blue('ID'),
|
|
29
|
+
chalk.blue('Email'),
|
|
30
|
+
chalk.blue('First Name'),
|
|
31
|
+
chalk.blue('Last Name'),
|
|
32
|
+
chalk.blue('Active'),
|
|
33
|
+
chalk.blue('Blocked'),
|
|
34
|
+
chalk.blue('Roles')
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
list.results.forEach((user)=>{
|
|
38
|
+
const roles = user.roles.map((role)=>role.name).join(', ');
|
|
39
|
+
infoTable.push([
|
|
40
|
+
user.id,
|
|
41
|
+
user.email,
|
|
42
|
+
user.firstname,
|
|
43
|
+
user.lastname,
|
|
44
|
+
user.isActive === true ? chalk.green('true') : chalk.red('false'),
|
|
45
|
+
user.blocked === true ? chalk.red('true') : chalk.green('false'),
|
|
46
|
+
roles.length > 0 ? roles : chalk.yellow('No roles assigned')
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
console.log(infoTable.toString());
|
|
50
|
+
await app.destroy();
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* `$ strapi admin:list-users`
|
|
54
|
+
*/ const command = ()=>{
|
|
55
|
+
return createCommand('admin:list-users').alias('admin:list').description('List all the admin users').action(runAction('admin:list-users', action));
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export { action, command };
|
|
59
|
+
//# sourceMappingURL=list-users.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-users.mjs","sources":["../../../../../src/cli/commands/admin/list-users.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport CLITable from 'cli-table3';\nimport chalk from 'chalk';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\n/**\n * List admin users\n */\nconst action = async () => {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const list = await app.admin.services.user.findPage({\n select: ['id', 'firstname', 'lastname', 'email', 'isActive', 'blocked'],\n populate: ['roles'],\n pageSize: 100,\n });\n\n const infoTable = new CLITable({\n head: [\n chalk.blue('ID'),\n chalk.blue('Email'),\n chalk.blue('First Name'),\n chalk.blue('Last Name'),\n chalk.blue('Active'),\n chalk.blue('Blocked'),\n chalk.blue('Roles'),\n ],\n });\n\n list.results.forEach((user: any) => {\n const roles = user.roles.map((role: any) => role.name).join(', ');\n infoTable.push([\n user.id,\n user.email,\n user.firstname,\n user.lastname,\n user.isActive === true ? chalk.green('true') : chalk.red('false'),\n user.blocked === true ? chalk.red('true') : chalk.green('false'),\n roles.length > 0 ? roles : chalk.yellow('No roles assigned'),\n ]);\n });\n\n console.log(infoTable.toString());\n\n await app.destroy();\n};\n\n/**\n * `$ strapi admin:list-users`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:list-users')\n .alias('admin:list')\n .description('List all the admin users')\n .action(runAction('admin:list-users', action));\n};\n\nexport { action, command };\n"],"names":["action","appContext","compileStrapi","app","createStrapi","load","list","admin","services","user","findPage","select","populate","pageSize","infoTable","CLITable","head","chalk","blue","results","forEach","roles","map","role","name","join","push","id","email","firstname","lastname","isActive","green","red","blocked","length","yellow","console","log","toString","destroy","command","createCommand","alias","description","runAction"],"mappings":";;;;;;AAQA;;AAEC,UACKA,MAAAA,GAAS,UAAA;AACb,IAAA,MAAMC,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,YAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMC,IAAAA,GAAO,MAAMH,GAAAA,CAAII,KAAK,CAACC,QAAQ,CAACC,IAAI,CAACC,QAAQ,CAAC;QAClDC,MAAAA,EAAQ;AAAC,YAAA,IAAA;AAAM,YAAA,WAAA;AAAa,YAAA,UAAA;AAAY,YAAA,OAAA;AAAS,YAAA,UAAA;AAAY,YAAA;AAAU,SAAA;QACvEC,QAAAA,EAAU;AAAC,YAAA;AAAQ,SAAA;QACnBC,QAAAA,EAAU;AACZ,KAAA,CAAA;IAEA,MAAMC,SAAAA,GAAY,IAAIC,QAAAA,CAAS;QAC7BC,IAAAA,EAAM;AACJC,YAAAA,KAAAA,CAAMC,IAAI,CAAC,IAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,OAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,YAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,WAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,QAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,SAAA,CAAA;AACXD,YAAAA,KAAAA,CAAMC,IAAI,CAAC,OAAA;AACZ;AACH,KAAA,CAAA;AAEAZ,IAAAA,IAAAA,CAAKa,OAAO,CAACC,OAAO,CAAC,CAACX,IAAAA,GAAAA;AACpB,QAAA,MAAMY,KAAAA,GAAQZ,IAAAA,CAAKY,KAAK,CAACC,GAAG,CAAC,CAACC,IAAAA,GAAcA,IAAAA,CAAKC,IAAI,CAAA,CAAEC,IAAI,CAAC,IAAA,CAAA;AAC5DX,QAAAA,SAAAA,CAAUY,IAAI,CAAC;AACbjB,YAAAA,IAAAA,CAAKkB,EAAE;AACPlB,YAAAA,IAAAA,CAAKmB,KAAK;AACVnB,YAAAA,IAAAA,CAAKoB,SAAS;AACdpB,YAAAA,IAAAA,CAAKqB,QAAQ;YACbrB,IAAAA,CAAKsB,QAAQ,KAAK,IAAA,GAAOd,KAAAA,CAAMe,KAAK,CAAC,MAAA,CAAA,GAAUf,KAAAA,CAAMgB,GAAG,CAAC,OAAA,CAAA;YACzDxB,IAAAA,CAAKyB,OAAO,KAAK,IAAA,GAAOjB,KAAAA,CAAMgB,GAAG,CAAC,MAAA,CAAA,GAAUhB,KAAAA,CAAMe,KAAK,CAAC,OAAA,CAAA;AACxDX,YAAAA,KAAAA,CAAMc,MAAM,GAAG,CAAA,GAAId,KAAAA,GAAQJ,KAAAA,CAAMmB,MAAM,CAAC,mBAAA;AACzC,SAAA,CAAA;AACH,IAAA,CAAA,CAAA;IAEAC,OAAAA,CAAQC,GAAG,CAACxB,SAAAA,CAAUyB,QAAQ,EAAA,CAAA;AAE9B,IAAA,MAAMpC,IAAIqC,OAAO,EAAA;AACnB;AAEA;;AAEC,UACKC,OAAAA,GAAyB,IAAA;IAC7B,OAAOC,aAAAA,CAAc,kBAAA,CAAA,CAClBC,KAAK,CAAC,YAAA,CAAA,CACNC,WAAW,CAAC,0BAAA,CAAA,CACZ5C,MAAM,CAAC6C,SAAAA,CAAU,kBAAA,EAAoB7C,MAAAA,CAAAA,CAAAA;AAC1C;;;;"}
|
|
@@ -38,14 +38,14 @@ const BYTES_IN_MB = 1024 * 1024;
|
|
|
38
38
|
links: [
|
|
39
39
|
{
|
|
40
40
|
filter (link) {
|
|
41
|
-
return !dataTransfer$1.
|
|
41
|
+
return !dataTransfer$1.isIgnoredContentType(link.left.type) && !dataTransfer$1.isIgnoredContentType(link.right.type);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
],
|
|
45
45
|
entities: [
|
|
46
46
|
{
|
|
47
47
|
filter (entity) {
|
|
48
|
-
return !dataTransfer$1.
|
|
48
|
+
return !dataTransfer$1.isIgnoredContentType(entity.type);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectoryDestinationProvider },\n} = directoryDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n normalizeExportDirFormatOpts(opts);\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log(`Starting export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n if (format === 'dir') {\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalDirectoryDestinationProvider","directoryDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","normalizeExportDirFormatOpts","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","format","metadataPath","join","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n isIgnoredContentType,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectoryDestinationProvider },\n} = directoryDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n normalizeExportDirFormatOpts(opts);\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !isIgnoredContentType(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log(`Starting export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n if (format === 'dir') {\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalDirectoryDestinationProvider","directoryDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","normalizeExportDirFormatOpts","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","format","metadataPath","join","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { isObject, isString, isFinite, toNumber } from 'lodash/fp';
|
|
|
3
3
|
import fse from 'fs-extra';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import { file, directory, strapi, engine } from '@strapi/data-transfer';
|
|
6
|
-
import { createStrapiInstance,
|
|
6
|
+
import { createStrapiInstance, isIgnoredContentType, formatDiagnostic, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, loadersFactory, getDefaultExportName } from '../../utils/data-transfer.mjs';
|
|
7
7
|
import { exitWith } from '../../utils/helpers.mjs';
|
|
8
8
|
import { normalizeExportDirFormatOpts } from './validate-dir-format.mjs';
|
|
9
9
|
|
|
@@ -36,14 +36,14 @@ const BYTES_IN_MB = 1024 * 1024;
|
|
|
36
36
|
links: [
|
|
37
37
|
{
|
|
38
38
|
filter (link) {
|
|
39
|
-
return !
|
|
39
|
+
return !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
],
|
|
43
43
|
entities: [
|
|
44
44
|
{
|
|
45
45
|
filter (entity) {
|
|
46
|
-
return !
|
|
46
|
+
return !isIgnoredContentType(entity.type);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectoryDestinationProvider },\n} = directoryDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n normalizeExportDirFormatOpts(opts);\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log(`Starting export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n if (format === 'dir') {\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalDirectoryDestinationProvider","directoryDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","normalizeExportDirFormatOpts","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","format","metadataPath","join","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":";;;;;;;;;AA4BA,MAAM,EACJA,SAAAA,EAAW,EAAEC,kCAAkC,EAAE,EAClD,GAAGC,IAAAA;AAEJ,MAAM,EACJF,SAAAA,EAAW,EAAEG,uCAAuC,EAAE,EACvD,GAAGC,SAAAA;AACJ,MAAM,EACJJ,SAAAA,EAAW,EAAEK,+BAA+B,EAAE,EAC/C,GAAGC,MAAAA;AAEJ,MAAMC,cAAc,IAAA,GAAO,IAAA;AAgB3B;;;;;;IAOA,aAAe,CAAA,OAAOC,IAAAA,GAAAA;;IAEpB,IAAI,CAACC,SAASD,IAAAA,CAAAA,EAAO;AACnBE,QAAAA,QAAAA,CAAS,CAAA,EAAG,mCAAA,CAAA;AACd,IAAA;IAEAC,4BAAAA,CAA6BH,IAAAA,CAAAA;AAE7B,IAAA,MAAMI,SAAS,MAAMC,oBAAAA,EAAAA;AAErB,IAAA,MAAMC,SAASC,oBAAAA,CAAqBH,MAAAA,CAAAA;AACpC,IAAA,MAAMI,cAAcC,yBAAAA,CAA0BT,IAAAA,CAAAA;AAE9C,IAAA,MAAMU,QAAAA,GAASC,MAAAA,CAAmBC,oBAAoB,CAACN,QAAQE,WAAAA,EAAa;QAC1EK,eAAAA,EAAiB,QAAA;QACjBC,cAAAA,EAAgB,QAAA;AAChBC,QAAAA,OAAAA,EAASf,KAAKe,OAAO;AACrBC,QAAAA,IAAAA,EAAMhB,KAAKgB,IAAI;AACfC,QAAAA,QAAAA,EAAUjB,KAAKiB,QAAQ;QACvBC,UAAAA,EAAY;YACVC,KAAAA,EAAO;AACL,gBAAA;AACEC,oBAAAA,MAAAA,CAAAA,CAAOC,IAAI,EAAA;AACT,wBAAA,OACE,CAACC,6BAAAA,CAA8BC,QAAQ,CAACF,IAAAA,CAAKG,IAAI,CAACC,IAAI,CAAA,IACtD,CAACH,8BAA8BC,QAAQ,CAACF,IAAAA,CAAKK,KAAK,CAACD,IAAI,CAAA;AAE3D,oBAAA;AACF;AACD,aAAA;YACDE,QAAAA,EAAU;AACR,gBAAA;AACEP,oBAAAA,MAAAA,CAAAA,CAAOQ,MAAM,EAAA;AACX,wBAAA,OAAO,CAACN,6BAAAA,CAA8BC,QAAQ,CAACK,OAAOH,IAAI,CAAA;AAC5D,oBAAA;AACF;AACD;AACH;AACF,KAAA,CAAA;AAEAf,IAAAA,QAAAA,CAAOmB,WAAW,CAACC,YAAY,CAACC,gBAAAA,CAAiB,QAAA,EAAU/B,KAAKgC,OAAO,CAAA,CAAA;AAEvE,IAAA,MAAMC,QAAAA,GAAWvB,QAAAA,CAAOuB,QAAQ,CAACC,MAAM;IAEvC,MAAM,EAAEC,YAAY,EAAE,GAAGC,cAAAA,EAAAA;IAEzBH,QAAAA,CAASI,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;QAC1CJ,YAAAA,CAAaG,KAAAA,EAAOC,MAAMC,KAAK,EAAA;AACjC,IAAA,CAAA,CAAA;IAEAP,QAAAA,CAASI,EAAE,CAAC,eAAA,EAAiB,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;QAC3CJ,YAAAA,CAAaG,KAAAA,EAAOC,MAAME,OAAO,EAAA;AACnC,IAAA,CAAA,CAAA;IAEAR,QAAAA,CAASI,EAAE,CAAC,iBAAA,EAAmB,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAA;AAC7CJ,QAAAA,YAAAA,CAAaG,KAAAA,EAAOC,IAAAA,CAAAA;AACtB,IAAA,CAAA,CAAA;IAEAN,QAAAA,CAASI,EAAE,CAAC,iBAAA,EAAmB,UAAA;AAC7BK,QAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAA;AAEhC,QAAA,MAAMvC,OAAOwC,SAAS,CAACC,IAAI,CAAC,wBAAwBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;AAClF,IAAA,CAAA,CAAA;IAEA,IAAIqC,OAAAA;IACJ,IAAIC,OAAAA;IACJ,IAAI;;AAEFC,QAAAA,gBAAAA,CAAiB,IAAMC,aAAAA,CAAc;AAAExC,wBAAAA,QAAAA;AAAQN,gBAAAA;AAAO,aAAA,CAAA,CAAA;QAEtD2C,OAAAA,GAAU,MAAMrC,SAAOyC,QAAQ,EAAA;AAC/BH,QAAAA,OAAAA,GAAUD,OAAAA,CAAQvC,WAAW,EAAE4C,IAAAA,EAAMC,IAAAA,IAAQ,EAAA;AAC7C,QAAA,IAAI,CAACrD,IAAAA,CAAKsD,MAAM,IAAI,KAAI,MAAO,KAAA,EAAO;AACpC,YAAA,MAAMC,YAAAA,GAAeF,IAAAA,CAAKG,IAAI,CAACR,OAAAA,EAAS,eAAA,CAAA;AACxC,YAAA,IAAI,CAAE,MAAMS,GAAAA,CAAGC,UAAU,CAACH,YAAAA,CAAAA,EAAgB;gBACxC,MAAM,IAAI5C,MAAAA,CAAmBgD,MAAM,CAACC,2BAA2B,CAC7D,CAAC,4CAA4C,EAAEZ,OAAAA,CAAQ,CAAC,CAAC,CAAA;AAE7D,YAAA;AACF,QAAA,CAAA,MAAO,IAAI,CAAE,MAAMS,GAAAA,CAAGC,UAAU,CAACV,OAAAA,CAAAA,EAAW;YAC1C,MAAM,IAAIrC,MAAAA,CAAmBgD,MAAM,CAACC,2BAA2B,CAC7D,CAAC,yBAAyB,EAAEZ,OAAAA,CAAQ,CAAC,CAAC,CAAA;AAE1C,QAAA;;AAGA,QAAA,MAAM5C,OAAOwC,SAAS,CAACC,IAAI,CAAC,yBAAyBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;QAEjF,IAAI;YACF,MAAMmD,KAAAA,GAAQC,kBAAAA,CAAmBf,OAAAA,CAAQrC,MAAM,CAAA;YAC/CgC,OAAAA,CAAQC,GAAG,CAACkB,KAAAA,EAAOE,QAAAA,EAAAA,CAAAA;AACrB,QAAA,CAAA,CAAE,OAAOC,CAAAA,EAAG;AACVtB,YAAAA,OAAAA,CAAQuB,KAAK,CAAC,4DAAA,CAAA;AAChB,QAAA;QAEAvB,OAAAA,CAAQC,GAAG,CAAC,CAAC,qBAAqB,EAAEuB,KAAAA,CAAMC,KAAK,CAACnB,OAAAA,CAAAA,CAAAA,CAAU,CAAA;AAC1D9C,QAAAA,QAAAA,CAAS,GAAGkE,eAAAA,CAAgB,QAAA,CAAA,CAAA;AAC9B,IAAA,CAAA,CAAE,OAAM;AACN,QAAA,MAAMhE,OAAOwC,SAAS,CAACC,IAAI,CAAC,uBAAuBC,2BAAAA,CAA4BpC,QAAAA,CAAAA,CAAAA;QAC/ER,QAAAA,CAAS,CAAA,EAAGkE,gBAAgB,QAAA,EAAU,IAAA,CAAA,CAAA;AACxC,IAAA;AACF,CAAA;AAEA;;IAGA,MAAM7D,uBAAuB,CAACH,MAAAA,GAAAA;AAC5B,IAAA,OAAOP,+BAAAA,CAAgC;QACrC,MAAMwE,SAAAA,CAAAA,GAAAA;YACJ,OAAOjE,MAAAA;AACT,QAAA;AACF,KAAA,CAAA;AACF,CAAA;AAEA;;IAGA,MAAMK,4BAA4B,CAACT,IAAAA,GAAAA;AACjC,IAAA,MAAM,EAAEoD,IAAI,EAAEkB,QAAQ,EAAEC,OAAO,EAAEC,GAAG,EAAEC,YAAY,EAAEnB,MAAAA,GAAS,KAAK,EAAE,GAAGtD,IAAAA;AAEvE,IAAA,MAAM0E,WAAWC,QAAAA,CAASvB,IAAAA,CAAAA,IAASA,KAAKwB,MAAM,GAAG,IAAIxB,IAAAA,GAAOyB,oBAAAA,EAAAA;AAE5D,IAAA,MAAMC,mBAAmBC,QAAAA,CAASC,QAAAA,CAASP,YAAAA,CAAAA,CAAAA,GACvCO,QAAAA,CAASP,gBAAgB1E,WAAAA,GACzBkF,SAAAA;AAEJ,IAAA,IAAI3B,WAAW,KAAA,EAAO;QACpB,MAAM4B,OAAAA,GAAU7B,IAAAA,CAAK8B,UAAU,CAACT,QAAAA,CAAAA,GAAYA,QAAAA,GAAWrB,IAAAA,CAAK+B,OAAO,CAACC,OAAAA,CAAQC,GAAG,EAAA,EAAIZ,QAAAA,CAAAA;AACnF,QAAA,OAAO/E,uCAAAA,CAAwC;YAC7C4F,SAAAA,EAAW;gBAAElC,IAAAA,EAAM6B;AAAQ,aAAA;YAC3B9B,IAAAA,EAAM;gBACJqB,YAAAA,EAAcK;AAChB;AACF,SAAA,CAAA;AACF,IAAA;AAEA,IAAA,OAAOrF,kCAAAA,CAAmC;QACxC2D,IAAAA,EAAM;YACJC,IAAAA,EAAMqB,QAAAA;YACND,YAAAA,EAAcK;AAChB,SAAA;QACAU,UAAAA,EAAY;AACVC,YAAAA,OAAAA,EAASlB,OAAAA,IAAW,KAAA;AACpBC,YAAAA,GAAAA,EAAKD,UAAUC,GAAAA,GAAMS;AACvB,SAAA;QACAS,WAAAA,EAAa;AACXD,YAAAA,OAAAA,EAASnB,QAAAA,IAAY;AACvB;AACF,KAAA,CAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import path from 'path';\nimport { isObject, isString, isFinite, toNumber } from 'lodash/fp';\nimport fs from 'fs-extra';\nimport chalk from 'chalk';\nimport type { Core } from '@strapi/types';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n getDefaultExportName,\n buildTransferTable,\n isIgnoredContentType,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\nimport { normalizeExportDirFormatOpts } from './validate-dir-format';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectoryDestinationProvider },\n} = directoryDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n /** @default 'tar' */\n format?: 'tar' | 'dir';\n encrypt?: boolean;\n verbose?: boolean;\n key?: string;\n compress?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n maxSizeJsonl?: number;\n}\n\n/**\n * Export command.\n *\n * It transfers data from a local Strapi instance to a file\n *\n * @param {ExportCommandOptions} opts\n */\nexport default async (opts: CmdOptions) => {\n // Validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse command arguments');\n }\n\n normalizeExportDirFormatOpts(opts);\n\n const strapi = await createStrapiInstance();\n\n const source = createSourceProvider(strapi);\n const destination = createDestinationProvider(opts);\n\n const engine = engineDataTransfer.createTransferEngine(source, destination, {\n versionStrategy: 'ignore', // for an export to file, versionStrategy will always be skipped\n schemaStrategy: 'ignore', // for an export to file, schemaStrategy will always be skipped\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter(entity) {\n return !isIgnoredContentType(entity.type);\n },\n },\n ],\n },\n });\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('export', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log(`Starting export...`);\n\n await strapi.telemetry.send('didDEITSProcessStart', getTransferTelemetryPayload(engine));\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n let outFile: string;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi }));\n\n results = await engine.transfer();\n outFile = results.destination?.file?.path ?? '';\n if ((opts.format ?? 'tar') === 'dir') {\n const metadataPath = path.join(outFile, 'metadata.json');\n if (!(await fs.pathExists(metadataPath))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export directory was not created correctly \"${outFile}\"`\n );\n }\n } else if (!(await fs.pathExists(outFile))) {\n throw new engineDataTransfer.errors.TransferEngineTransferError(\n `Export file not created \"${outFile}\"`\n );\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapi.telemetry.send('didDEITSProcessFinish', getTransferTelemetryPayload(engine));\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n console.log(`Export archive is in ${chalk.green(outFile)}`);\n exitWith(0, exitMessageText('export'));\n } catch {\n await strapi.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('export', true));\n }\n};\n\n/**\n * It creates a local strapi destination provider\n */\nconst createSourceProvider = (strapi: Core.Strapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file or directory destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl, format = 'tar' } = opts;\n\n const filepath = isString(file) && file.length > 0 ? file : getDefaultExportName();\n\n const maxSizeJsonlInMb = isFinite(toNumber(maxSizeJsonl))\n ? toNumber(maxSizeJsonl) * BYTES_IN_MB\n : undefined;\n\n if (format === 'dir') {\n const dirPath = path.isAbsolute(filepath) ? filepath : path.resolve(process.cwd(), filepath);\n return createLocalDirectoryDestinationProvider({\n directory: { path: dirPath },\n file: {\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n });\n }\n\n return createLocalFileDestinationProvider({\n file: {\n path: filepath,\n maxSizeJsonl: maxSizeJsonlInMb,\n },\n encryption: {\n enabled: encrypt ?? false,\n key: encrypt ? key : undefined,\n },\n compression: {\n enabled: compress ?? false,\n },\n });\n};\n"],"names":["providers","createLocalFileDestinationProvider","fileDataTransfer","createLocalDirectoryDestinationProvider","directoryDataTransfer","createLocalStrapiSourceProvider","strapiDataTransfer","BYTES_IN_MB","opts","isObject","exitWith","normalizeExportDirFormatOpts","strapi","createStrapiInstance","source","createSourceProvider","destination","createDestinationProvider","engine","engineDataTransfer","createTransferEngine","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","left","type","right","entities","entity","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","on","stage","data","start","succeed","console","log","telemetry","send","getTransferTelemetryPayload","results","outFile","setSignalHandler","abortTransfer","transfer","file","path","format","metadataPath","join","fs","pathExists","errors","TransferEngineTransferError","table","buildTransferTable","toString","e","error","chalk","green","exitMessageText","getStrapi","compress","encrypt","key","maxSizeJsonl","filepath","isString","length","getDefaultExportName","maxSizeJsonlInMb","isFinite","toNumber","undefined","dirPath","isAbsolute","resolve","process","cwd","directory","encryption","enabled","compression"],"mappings":"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"}
|
|
@@ -41,13 +41,13 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
|
|
|
41
41
|
links: [
|
|
42
42
|
{
|
|
43
43
|
filter (link) {
|
|
44
|
-
return !dataTransfer$1.
|
|
44
|
+
return !dataTransfer$1.isIgnoredContentType(link.left.type) && !dataTransfer$1.isIgnoredContentType(link.right.type);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
],
|
|
48
48
|
entities: [
|
|
49
49
|
{
|
|
50
|
-
filter: (entity)=>!dataTransfer$1.
|
|
50
|
+
filter: (entity)=>!dataTransfer$1.isIgnoredContentType(entity.type)
|
|
51
51
|
}
|
|
52
52
|
]
|
|
53
53
|
}
|
|
@@ -58,7 +58,7 @@ const { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY
|
|
|
58
58
|
},
|
|
59
59
|
autoDestroy: false,
|
|
60
60
|
strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,
|
|
61
|
-
restore: dataTransfer$1.parseRestoreFromOptions(engineOptions)
|
|
61
|
+
restore: dataTransfer$1.parseRestoreFromOptions(engineOptions, strapiInstance)
|
|
62
62
|
};
|
|
63
63
|
const destination = createLocalStrapiDestinationProvider(destinationOptions);
|
|
64
64
|
destination.onWarning = (message)=>console.warn(`\n${chalk.yellow('warn')}: ${message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { isObject } from 'lodash/fp';\nimport chalk from 'chalk';\n\nimport fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n DEFAULT_IGNORED_CONTENT_TYPES,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileSourceProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectorySourceProvider },\n} = directoryDataTransfer;\n\nconst {\n providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY },\n} = strapiDataTransfer;\n\nconst { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } =\n engineDataTransfer;\n\ninterface CmdOptions {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n verbose?: boolean;\n key?: string;\n conflictStrategy?: 'restore';\n force?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a Strapi backup file or unpacked export directory to a local Strapi instance\n */\nexport default async (opts: CmdOptions) => {\n // validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse arguments');\n }\n\n const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? createLocalDirectorySourceProvider({ directory: { path: backupPath } })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n\n /**\n * Configure and run the transfer engine\n */\n const engineOptions: EngineOptions = {\n versionStrategy: DEFAULT_VERSION_STRATEGY,\n schemaStrategy: DEFAULT_SCHEMA_STRATEGY,\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return (\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.left.type) &&\n !DEFAULT_IGNORED_CONTENT_TYPES.includes(link.right.type)\n );\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !DEFAULT_IGNORED_CONTENT_TYPES.includes(entity.type),\n },\n ],\n },\n };\n\n const destinationOptions = {\n async getStrapi() {\n return strapiInstance;\n },\n autoDestroy: false,\n strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,\n restore: parseRestoreFromOptions(engineOptions),\n };\n\n const destination = createLocalStrapiDestinationProvider(destinationOptions);\n destination.onWarning = (message) => console.warn(`\\n${chalk.yellow('warn')}: ${message}`);\n\n const engine = createTransferEngine(source, destination, engineOptions);\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('import', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n engine.onSchemaDiff(getDiffHandler(engine, { force: opts.force, action: 'import' }));\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log('Starting import...');\n await strapiInstance.telemetry.send(\n 'didDEITSProcessStart',\n getTransferTelemetryPayload(engine)\n );\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n results = await engine.transfer();\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapiInstance.telemetry.send(\n 'didDEITSProcessFinish',\n getTransferTelemetryPayload(engine)\n );\n await strapiInstance.destroy();\n\n exitWith(0, exitMessageText('import'));\n } catch (e) {\n await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('import', true));\n }\n};\n\n/**\n * Infer local file source provider options based on a given filename\n */\nconst getLocalFileSourceOptions = (opts: {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n key?: string;\n}) => {\n const options: fileDataTransfer.providers.ILocalFileSourceProviderOptions = {\n file: { path: opts.file ?? '' },\n compression: { enabled: !!opts.decompress },\n encryption: { enabled: !!opts.decrypt, key: opts.key },\n };\n\n return options;\n};\n"],"names":["providers","createLocalFileSourceProvider","fileDataTransfer","createLocalDirectorySourceProvider","directoryDataTransfer","createLocalStrapiDestinationProvider","DEFAULT_CONFLICT_STRATEGY","strapiDataTransfer","createTransferEngine","DEFAULT_VERSION_STRATEGY","DEFAULT_SCHEMA_STRATEGY","engineDataTransfer","opts","isObject","exitWith","backupPath","file","source","fs","stat","isDirectory","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","DEFAULT_IGNORED_CONTENT_TYPES","includes","left","type","right","entities","entity","destinationOptions","getStrapi","autoDestroy","strategy","conflictStrategy","restore","parseRestoreFromOptions","destination","onWarning","message","console","warn","chalk","yellow","engine","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","onSchemaDiff","getDiffHandler","force","action","on","stage","data","start","succeed","log","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../../src/cli/commands/import/action.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { isObject } from 'lodash/fp';\nimport chalk from 'chalk';\n\nimport fs from 'fs-extra';\n\nimport {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\n directory as directoryDataTransfer,\n} from '@strapi/data-transfer';\n\nimport {\n buildTransferTable,\n isIgnoredContentType,\n createStrapiInstance,\n formatDiagnostic,\n loadersFactory,\n exitMessageText,\n abortTransfer,\n getTransferTelemetryPayload,\n setSignalHandler,\n getDiffHandler,\n parseRestoreFromOptions,\n} from '../../utils/data-transfer';\nimport { exitWith } from '../../utils/helpers';\n\nconst {\n providers: { createLocalFileSourceProvider },\n} = fileDataTransfer;\n\nconst {\n providers: { createLocalDirectorySourceProvider },\n} = directoryDataTransfer;\n\nconst {\n providers: { createLocalStrapiDestinationProvider, DEFAULT_CONFLICT_STRATEGY },\n} = strapiDataTransfer;\n\nconst { createTransferEngine, DEFAULT_VERSION_STRATEGY, DEFAULT_SCHEMA_STRATEGY } =\n engineDataTransfer;\n\ninterface CmdOptions {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n verbose?: boolean;\n key?: string;\n conflictStrategy?: 'restore';\n force?: boolean;\n only?: (keyof engineDataTransfer.TransferGroupFilter)[];\n exclude?: (keyof engineDataTransfer.TransferGroupFilter)[];\n throttle?: number;\n}\n\ntype EngineOptions = Parameters<typeof createTransferEngine>[2];\n\n/**\n * Import command.\n *\n * It transfers data from a Strapi backup file or unpacked export directory to a local Strapi instance\n */\nexport default async (opts: CmdOptions) => {\n // validate inputs from Commander\n if (!isObject(opts)) {\n exitWith(1, 'Could not parse arguments');\n }\n\n const backupPath = opts.file ?? '';\n const source = (await fs.stat(backupPath)).isDirectory()\n ? createLocalDirectorySourceProvider({ directory: { path: backupPath } })\n : createLocalFileSourceProvider(getLocalFileSourceOptions(opts));\n\n /**\n * To local Strapi instance\n */\n const strapiInstance = await createStrapiInstance();\n\n /**\n * Configure and run the transfer engine\n */\n const engineOptions: EngineOptions = {\n versionStrategy: DEFAULT_VERSION_STRATEGY,\n schemaStrategy: DEFAULT_SCHEMA_STRATEGY,\n exclude: opts.exclude,\n only: opts.only,\n throttle: opts.throttle,\n transforms: {\n links: [\n {\n filter(link) {\n return !isIgnoredContentType(link.left.type) && !isIgnoredContentType(link.right.type);\n },\n },\n ],\n entities: [\n {\n filter: (entity) => !isIgnoredContentType(entity.type),\n },\n ],\n },\n };\n\n const destinationOptions = {\n async getStrapi() {\n return strapiInstance;\n },\n autoDestroy: false,\n strategy: opts.conflictStrategy || DEFAULT_CONFLICT_STRATEGY,\n restore: parseRestoreFromOptions(engineOptions, strapiInstance),\n };\n\n const destination = createLocalStrapiDestinationProvider(destinationOptions);\n destination.onWarning = (message) => console.warn(`\\n${chalk.yellow('warn')}: ${message}`);\n\n const engine = createTransferEngine(source, destination, engineOptions);\n\n engine.diagnostics.onDiagnostic(formatDiagnostic('import', opts.verbose));\n\n const progress = engine.progress.stream;\n\n const { updateLoader } = loadersFactory();\n\n engine.onSchemaDiff(getDiffHandler(engine, { force: opts.force, action: 'import' }));\n\n progress.on(`stage::start`, ({ stage, data }) => {\n updateLoader(stage, data).start();\n });\n\n progress.on('stage::finish', ({ stage, data }) => {\n updateLoader(stage, data).succeed();\n });\n\n progress.on('stage::progress', ({ stage, data }) => {\n updateLoader(stage, data);\n });\n\n progress.on('transfer::start', async () => {\n console.log('Starting import...');\n await strapiInstance.telemetry.send(\n 'didDEITSProcessStart',\n getTransferTelemetryPayload(engine)\n );\n });\n\n let results: engineDataTransfer.ITransferResults<typeof source, typeof destination>;\n try {\n // Abort transfer if user interrupts process\n setSignalHandler(() => abortTransfer({ engine, strapi: strapi as Core.Strapi }));\n\n results = await engine.transfer();\n\n try {\n const table = buildTransferTable(results.engine);\n console.log(table?.toString());\n } catch (e) {\n console.error('There was an error displaying the results of the transfer.');\n }\n\n // Note: we need to await telemetry or else the process ends before it is sent\n await strapiInstance.telemetry.send(\n 'didDEITSProcessFinish',\n getTransferTelemetryPayload(engine)\n );\n await strapiInstance.destroy();\n\n exitWith(0, exitMessageText('import'));\n } catch (e) {\n await strapiInstance.telemetry.send('didDEITSProcessFail', getTransferTelemetryPayload(engine));\n exitWith(1, exitMessageText('import', true));\n }\n};\n\n/**\n * Infer local file source provider options based on a given filename\n */\nconst getLocalFileSourceOptions = (opts: {\n file?: string;\n decompress?: boolean;\n decrypt?: boolean;\n key?: string;\n}) => {\n const options: fileDataTransfer.providers.ILocalFileSourceProviderOptions = {\n file: { path: opts.file ?? '' },\n compression: { enabled: !!opts.decompress },\n encryption: { enabled: !!opts.decrypt, key: opts.key },\n };\n\n return options;\n};\n"],"names":["providers","createLocalFileSourceProvider","fileDataTransfer","createLocalDirectorySourceProvider","directoryDataTransfer","createLocalStrapiDestinationProvider","DEFAULT_CONFLICT_STRATEGY","strapiDataTransfer","createTransferEngine","DEFAULT_VERSION_STRATEGY","DEFAULT_SCHEMA_STRATEGY","engineDataTransfer","opts","isObject","exitWith","backupPath","file","source","fs","stat","isDirectory","directory","path","getLocalFileSourceOptions","strapiInstance","createStrapiInstance","engineOptions","versionStrategy","schemaStrategy","exclude","only","throttle","transforms","links","filter","link","isIgnoredContentType","left","type","right","entities","entity","destinationOptions","getStrapi","autoDestroy","strategy","conflictStrategy","restore","parseRestoreFromOptions","destination","onWarning","message","console","warn","chalk","yellow","engine","diagnostics","onDiagnostic","formatDiagnostic","verbose","progress","stream","updateLoader","loadersFactory","onSchemaDiff","getDiffHandler","force","action","on","stage","data","start","succeed","log","telemetry","send","getTransferTelemetryPayload","results","setSignalHandler","abortTransfer","strapi","transfer","table","buildTransferTable","toString","e","error","destroy","exitMessageText","options","compression","enabled","decompress","encryption","decrypt","key"],"mappings":"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"}
|