@strapi/strapi 5.0.0-beta.2 → 5.0.0-beta.4

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.
Files changed (33) hide show
  1. package/dist/admin.d.ts.map +1 -1
  2. package/dist/admin.js +4 -1
  3. package/dist/admin.js.map +1 -1
  4. package/dist/admin.mjs +3 -1
  5. package/dist/admin.mjs.map +1 -1
  6. package/dist/cli/commands/admin/create-user.js.map +1 -1
  7. package/dist/cli/commands/admin/create-user.mjs.map +1 -1
  8. package/dist/cli/commands/admin/reset-user-password.js.map +1 -1
  9. package/dist/cli/commands/admin/reset-user-password.mjs.map +1 -1
  10. package/dist/cli/commands/export/action.js.map +1 -1
  11. package/dist/cli/commands/export/action.mjs +1 -1
  12. package/dist/cli/commands/export/action.mjs.map +1 -1
  13. package/dist/cli/commands/import/action.js.map +1 -1
  14. package/dist/cli/commands/import/action.mjs +1 -1
  15. package/dist/cli/commands/import/action.mjs.map +1 -1
  16. package/dist/cli/commands/transfer/action.mjs +1 -1
  17. package/dist/cli/utils/commander.d.ts +2 -2
  18. package/dist/cli/utils/commander.d.ts.map +1 -1
  19. package/dist/cli/utils/data-transfer.d.ts +4 -4
  20. package/dist/cli/utils/data-transfer.d.ts.map +1 -1
  21. package/dist/cli/utils/data-transfer.js +1 -1
  22. package/dist/cli/utils/data-transfer.js.map +1 -1
  23. package/dist/cli/utils/data-transfer.mjs +1 -1
  24. package/dist/cli/utils/data-transfer.mjs.map +1 -1
  25. package/dist/cli/utils/helpers.d.ts +1 -1
  26. package/dist/cli/utils/helpers.d.ts.map +1 -1
  27. package/dist/cli/utils/pkg.d.ts.map +1 -1
  28. package/dist/cli/utils/tsconfig.d.ts.map +1 -1
  29. package/dist/node/core/aliases.d.ts +1 -1
  30. package/dist/node/core/aliases.d.ts.map +1 -1
  31. package/dist/node/core/config.d.ts.map +1 -1
  32. package/dist/node/create-build-context.d.ts.map +1 -1
  33. package/package.json +23 -24
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAe,MAAM,4BAA4B,CAAC;AAU1E,QAAA,MAAM,MAAM,cAAe,WAAW,GAAG,IAAI,4BAA4B,eAAe,kBAiBvF,CAAC;AAEF,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAe,MAAM,4BAA4B,CAAC;AAU1E,QAAA,MAAM,MAAM,cAAe,WAAW,GAAG,IAAI,4BAA4B,eAAe,kBAkBvF,CAAC;AAEF,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,cAAc,4BAA4B,CAAC"}
package/dist/admin.js CHANGED
@@ -7,6 +7,7 @@ const email = require("@strapi/plugin-email/strapi-admin");
7
7
  const upload = require("@strapi/plugin-upload/strapi-admin");
8
8
  const i18n = require("@strapi/plugin-i18n/strapi-admin");
9
9
  const contentReleases = require("@strapi/content-releases/strapi-admin");
10
+ const reviewWorkflows = require("@strapi/review-workflows/strapi-admin");
10
11
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
11
12
  const contentTypeBuilder__default = /* @__PURE__ */ _interopDefault(contentTypeBuilder);
12
13
  const contentManager__default = /* @__PURE__ */ _interopDefault(contentManager);
@@ -14,6 +15,7 @@ const email__default = /* @__PURE__ */ _interopDefault(email);
14
15
  const upload__default = /* @__PURE__ */ _interopDefault(upload);
15
16
  const i18n__default = /* @__PURE__ */ _interopDefault(i18n);
16
17
  const contentReleases__default = /* @__PURE__ */ _interopDefault(contentReleases);
18
+ const reviewWorkflows__default = /* @__PURE__ */ _interopDefault(reviewWorkflows);
17
19
  const render = (mountNode, { plugins, ...restArgs }) => {
18
20
  return strapiAdmin.renderAdmin(mountNode, {
19
21
  ...restArgs,
@@ -27,7 +29,8 @@ const render = (mountNode, { plugins, ...restArgs }) => {
27
29
  // @ts-expect-error – TODO: fix this, the "types" folder has it wrong.
28
30
  contentReleases: contentReleases__default.default,
29
31
  i18n: i18n__default.default,
30
- // reviewWorkflows, // ENABLE ME TO WORK ON
32
+ // @ts-expect-error – TODO: fix this, the "types" folder has it wrong.
33
+ reviewWorkflows: reviewWorkflows__default.default,
31
34
  ...plugins
32
35
  }
33
36
  });
package/dist/admin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../src/admin.ts"],"sourcesContent":["import { RenderAdminArgs, renderAdmin } from '@strapi/admin/strapi-admin';\nimport contentTypeBuilder from '@strapi/plugin-content-type-builder/strapi-admin';\nimport contentManager from '@strapi/plugin-content-manager/strapi-admin';\nimport email from '@strapi/plugin-email/strapi-admin';\n// @ts-expect-error – No types, yet.\nimport upload from '@strapi/plugin-upload/strapi-admin';\nimport i18n from '@strapi/plugin-i18n/strapi-admin';\nimport contentReleases from '@strapi/content-releases/strapi-admin';\n// import reviewWorkflows from '@strapi/review-workflows/strapi-admin'; // ENABLE ME TO WORK ON\n\nconst render = (mountNode: HTMLElement | null, { plugins, ...restArgs }: RenderAdminArgs) => {\n return renderAdmin(mountNode, {\n ...restArgs,\n plugins: {\n // @ts-expect-error – TODO: fix this\n 'content-manager': contentManager,\n 'content-type-builder': contentTypeBuilder,\n // @ts-expect-error – TODO: fix this\n email,\n upload,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n contentReleases,\n i18n,\n // reviewWorkflows, // ENABLE ME TO WORK ON\n ...plugins,\n },\n });\n};\n\nexport { render as renderAdmin };\nexport type { RenderAdminArgs };\n\nexport * from '@strapi/admin/strapi-admin';\n"],"names":["renderAdmin","contentManager","contentTypeBuilder","email","upload","contentReleases","i18n"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,SAAS,CAAC,WAA+B,EAAE,SAAS,GAAG,eAAgC;AAC3F,SAAOA,YAAAA,YAAY,WAAW;AAAA,IAC5B,GAAG;AAAA,IACH,SAAS;AAAA;AAAA,MAEP,mBAAmBC,wBAAA;AAAA,MACnB,wBAAwBC,4BAAA;AAAA;AAAA,MAAA,OAExBC,eAAA;AAAA,MAAA,QACAC,gBAAA;AAAA;AAAA,MAAA,iBAEAC,yBAAA;AAAA,MAAA,MACAC,cAAA;AAAA;AAAA,MAEA,GAAG;AAAA,IACL;AAAA,EAAA,CACD;AACH;;;;;;;;;"}
1
+ {"version":3,"file":"admin.js","sources":["../src/admin.ts"],"sourcesContent":["import { RenderAdminArgs, renderAdmin } from '@strapi/admin/strapi-admin';\nimport contentTypeBuilder from '@strapi/plugin-content-type-builder/strapi-admin';\nimport contentManager from '@strapi/plugin-content-manager/strapi-admin';\nimport email from '@strapi/plugin-email/strapi-admin';\n// @ts-expect-error – No types, yet.\nimport upload from '@strapi/plugin-upload/strapi-admin';\nimport i18n from '@strapi/plugin-i18n/strapi-admin';\nimport contentReleases from '@strapi/content-releases/strapi-admin';\nimport reviewWorkflows from '@strapi/review-workflows/strapi-admin';\n\nconst render = (mountNode: HTMLElement | null, { plugins, ...restArgs }: RenderAdminArgs) => {\n return renderAdmin(mountNode, {\n ...restArgs,\n plugins: {\n // @ts-expect-error – TODO: fix this\n 'content-manager': contentManager,\n 'content-type-builder': contentTypeBuilder,\n // @ts-expect-error – TODO: fix this\n email,\n upload,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n contentReleases,\n i18n,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n reviewWorkflows,\n ...plugins,\n },\n });\n};\n\nexport { render as renderAdmin };\nexport type { RenderAdminArgs };\n\nexport * from '@strapi/admin/strapi-admin';\n"],"names":["renderAdmin","contentManager","contentTypeBuilder","email","upload","contentReleases","i18n","reviewWorkflows"],"mappings":";;;;;;;;;;;;;;;;;;AAUA,MAAM,SAAS,CAAC,WAA+B,EAAE,SAAS,GAAG,eAAgC;AAC3F,SAAOA,YAAAA,YAAY,WAAW;AAAA,IAC5B,GAAG;AAAA,IACH,SAAS;AAAA;AAAA,MAEP,mBAAmBC,wBAAA;AAAA,MACnB,wBAAwBC,4BAAA;AAAA;AAAA,MAAA,OAExBC,eAAA;AAAA,MAAA,QACAC,gBAAA;AAAA;AAAA,MAAA,iBAEAC,yBAAA;AAAA,MAAA,MACAC,cAAA;AAAA;AAAA,MAAA,iBAEAC,yBAAA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EAAA,CACD;AACH;;;;;;;;;"}
package/dist/admin.mjs CHANGED
@@ -6,6 +6,7 @@ import email from "@strapi/plugin-email/strapi-admin";
6
6
  import upload from "@strapi/plugin-upload/strapi-admin";
7
7
  import i18n from "@strapi/plugin-i18n/strapi-admin";
8
8
  import contentReleases from "@strapi/content-releases/strapi-admin";
9
+ import reviewWorkflows from "@strapi/review-workflows/strapi-admin";
9
10
  const render = (mountNode, { plugins, ...restArgs }) => {
10
11
  return renderAdmin(mountNode, {
11
12
  ...restArgs,
@@ -19,7 +20,8 @@ const render = (mountNode, { plugins, ...restArgs }) => {
19
20
  // @ts-expect-error – TODO: fix this, the "types" folder has it wrong.
20
21
  contentReleases,
21
22
  i18n,
22
- // reviewWorkflows, // ENABLE ME TO WORK ON
23
+ // @ts-expect-error – TODO: fix this, the "types" folder has it wrong.
24
+ reviewWorkflows,
23
25
  ...plugins
24
26
  }
25
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"admin.mjs","sources":["../src/admin.ts"],"sourcesContent":["import { RenderAdminArgs, renderAdmin } from '@strapi/admin/strapi-admin';\nimport contentTypeBuilder from '@strapi/plugin-content-type-builder/strapi-admin';\nimport contentManager from '@strapi/plugin-content-manager/strapi-admin';\nimport email from '@strapi/plugin-email/strapi-admin';\n// @ts-expect-error – No types, yet.\nimport upload from '@strapi/plugin-upload/strapi-admin';\nimport i18n from '@strapi/plugin-i18n/strapi-admin';\nimport contentReleases from '@strapi/content-releases/strapi-admin';\n// import reviewWorkflows from '@strapi/review-workflows/strapi-admin'; // ENABLE ME TO WORK ON\n\nconst render = (mountNode: HTMLElement | null, { plugins, ...restArgs }: RenderAdminArgs) => {\n return renderAdmin(mountNode, {\n ...restArgs,\n plugins: {\n // @ts-expect-error – TODO: fix this\n 'content-manager': contentManager,\n 'content-type-builder': contentTypeBuilder,\n // @ts-expect-error – TODO: fix this\n email,\n upload,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n contentReleases,\n i18n,\n // reviewWorkflows, // ENABLE ME TO WORK ON\n ...plugins,\n },\n });\n};\n\nexport { render as renderAdmin };\nexport type { RenderAdminArgs };\n\nexport * from '@strapi/admin/strapi-admin';\n"],"names":[],"mappings":";;;;;;;;AAUA,MAAM,SAAS,CAAC,WAA+B,EAAE,SAAS,GAAG,eAAgC;AAC3F,SAAO,YAAY,WAAW;AAAA,IAC5B,GAAG;AAAA,IACH,SAAS;AAAA;AAAA,MAEP,mBAAmB;AAAA,MACnB,wBAAwB;AAAA;AAAA,MAExB;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA,GAAG;AAAA,IACL;AAAA,EAAA,CACD;AACH;"}
1
+ {"version":3,"file":"admin.mjs","sources":["../src/admin.ts"],"sourcesContent":["import { RenderAdminArgs, renderAdmin } from '@strapi/admin/strapi-admin';\nimport contentTypeBuilder from '@strapi/plugin-content-type-builder/strapi-admin';\nimport contentManager from '@strapi/plugin-content-manager/strapi-admin';\nimport email from '@strapi/plugin-email/strapi-admin';\n// @ts-expect-error – No types, yet.\nimport upload from '@strapi/plugin-upload/strapi-admin';\nimport i18n from '@strapi/plugin-i18n/strapi-admin';\nimport contentReleases from '@strapi/content-releases/strapi-admin';\nimport reviewWorkflows from '@strapi/review-workflows/strapi-admin';\n\nconst render = (mountNode: HTMLElement | null, { plugins, ...restArgs }: RenderAdminArgs) => {\n return renderAdmin(mountNode, {\n ...restArgs,\n plugins: {\n // @ts-expect-error – TODO: fix this\n 'content-manager': contentManager,\n 'content-type-builder': contentTypeBuilder,\n // @ts-expect-error – TODO: fix this\n email,\n upload,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n contentReleases,\n i18n,\n // @ts-expect-error – TODO: fix this, the \"types\" folder has it wrong.\n reviewWorkflows,\n ...plugins,\n },\n });\n};\n\nexport { render as renderAdmin };\nexport type { RenderAdminArgs };\n\nexport * from '@strapi/admin/strapi-admin';\n"],"names":[],"mappings":";;;;;;;;;AAUA,MAAM,SAAS,CAAC,WAA+B,EAAE,SAAS,GAAG,eAAgC;AAC3F,SAAO,YAAY,WAAW;AAAA,IAC5B,GAAG;AAAA,IACH,SAAS;AAAA;AAAA,MAEP,mBAAmB;AAAA,MACnB,wBAAwB;AAAA;AAAA,MAExB;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EAAA,CACD;AACH;"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-user.js","sources":["../../../../src/cli/commands/admin/create-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n firstname?: string;\n lastname?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst passwordValidator = yup\n .string()\n .min(8, 'Password must be at least 8 characters long')\n .matches(/[a-z]/, 'Password must contain at least one lowercase character')\n .matches(/[A-Z]/, 'Password must contain at least one uppercase character')\n .matches(/\\d/, 'Password must contain at least one number');\n\nconst adminCreateSchema = yup.object().shape({\n email: emailValidator,\n password: passwordValidator,\n firstname: yup.string().trim().required('First name is required'),\n lastname: yup.string(),\n});\n\ninterface Answers {\n email: string;\n password: string;\n firstname: string;\n lastname: string;\n confirm: boolean;\n}\n\n/**\n * It's not an observable, in reality this is\n * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\n// eslint-disable-next-line rxjs/finnish\nconst promptQuestions: inquirer.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: 'password',\n name: 'password',\n message: 'Admin password?',\n async validate(value: string) {\n const validPassword = await passwordValidator.validate(value);\n return validPassword === value || validPassword;\n },\n },\n { type: 'input', name: 'firstname', message: 'First name?' },\n { type: 'input', name: 'lastname', message: 'Last name?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to create a new admin?',\n },\n];\n\nasync function createAdmin({ email, password, firstname, lastname }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin.services.user.exists({ email });\n\n if (user) {\n console.error(`User with email \"${email}\" already exists`);\n process.exit(1);\n }\n\n const superAdminRole = await app.admin.services.role.getSuperAdmin();\n\n await app.admin.services.user.create({\n email,\n firstname,\n lastname,\n isActive: true,\n roles: [superAdminRole.id],\n ...(password && { password, registrationToken: null }),\n });\n\n console.log(`Successfully created new admin`);\n process.exit(0);\n}\n\n/**\n * Create new admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email, password, firstname, lastname } = cmdOptions;\n\n if (\n _.isEmpty(email) &&\n _.isEmpty(password) &&\n _.isEmpty(firstname) &&\n _.isEmpty(lastname) &&\n process.stdin.isTTY\n ) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email, password, firstname, lastname } = inquiry);\n }\n\n try {\n await adminCreateSchema.validate({ email, password, firstname, lastname });\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 createAdmin({ email, password, firstname, lastname });\n};\n\n/**\n * `$ strapi admin:create-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:create-user')\n .alias('admin:create')\n .description('Create a new admin')\n .option('-e, --email <email>', 'Email of the new admin')\n .option('-p, --password <password>', 'Password of the new admin')\n .option('-f, --firstname <first name>', 'First name of the new admin')\n .option('-l, --lastname <last name>', 'Last name of the new admin')\n .action(runAction('admin:create-user', action));\n};\n\nexport { action, command };\n"],"names":["yup","compileStrapi","createStrapi","_","inquirer","createCommand","runAction"],"mappings":";;;;;;;;;;;AAgBA,MAAM,iBAAiBA,MAAI,IAAA,SAAS,MAAM,uBAAuB,EAAE;AAEnE,MAAM,oBAAoBA,MACvB,IAAA,SACA,IAAI,GAAG,6CAA6C,EACpD,QAAQ,SAAS,wDAAwD,EACzE,QAAQ,SAAS,wDAAwD,EACzE,QAAQ,MAAM,2CAA2C;AAE5D,MAAM,oBAAoBA,MAAA,IAAI,OAAO,EAAE,MAAM;AAAA,EAC3C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAWA,MAAI,IAAA,OAAA,EAAS,KAAK,EAAE,SAAS,wBAAwB;AAAA,EAChE,UAAUA,UAAI,OAAO;AACvB,CAAC;AAgBD,MAAM,kBAAwD;AAAA,EAC5D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,SAAS,OAAe;AAC5B,YAAM,aAAa,MAAM,eAAe,SAAS,KAAK;AACtD,aAAO,eAAe,SAAS;AAAA,IACjC;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,SAAS,OAAe;AAC5B,YAAM,gBAAgB,MAAM,kBAAkB,SAAS,KAAK;AAC5D,aAAO,kBAAkB,SAAS;AAAA,IACpC;AAAA,EACF;AAAA,EACA,EAAE,MAAM,SAAS,MAAM,aAAa,SAAS,cAAc;AAAA,EAC3D,EAAE,MAAM,SAAS,MAAM,YAAY,SAAS,aAAa;AAAA,EACzD;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,eAAe,YAAY,EAAE,OAAO,UAAU,WAAW,YAAwB;AACzE,QAAA,aAAa,MAAMC,KAAAA;AACzB,QAAM,MAAM,MAAMC,KAAAA,aAAa,UAAU,EAAE,KAAK;AAE1C,QAAA,OAAO,MAAM,IAAI,MAAM,SAAS,KAAK,OAAO,EAAE,MAAA,CAAO;AAE3D,MAAI,MAAM;AACA,YAAA,MAAM,oBAAoB,KAAK,kBAAkB;AACzD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,iBAAiB,MAAM,IAAI,MAAM,SAAS,KAAK;AAErD,QAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO,CAAC,eAAe,EAAE;AAAA,IACzB,GAAI,YAAY,EAAE,UAAU,mBAAmB,KAAK;AAAA,EAAA,CACrD;AAED,UAAQ,IAAI,gCAAgC;AAC5C,UAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,SAAS,OAAO,aAAyB,OAAO;AACpD,MAAI,EAAE,OAAO,UAAU,WAAW,aAAa;AAE/C,MACEC,WAAAA,QAAE,QAAQ,KAAK,KACfA,WAAAA,QAAE,QAAQ,QAAQ,KAClBA,WAAA,QAAE,QAAQ,SAAS,KACnBA,WAAAA,QAAE,QAAQ,QAAQ,KAClB,QAAQ,MAAM,OACd;AACA,UAAM,UAAU,MAAMC,kBAAAA,QAAS,OAAO,eAAe;AAEjD,QAAA,CAAC,QAAQ,SAAS;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,KAAC,EAAE,OAAO,UAAU,WAAW,aAAa;AAAA,EAC9C;AAEI,MAAA;AACF,UAAM,kBAAkB,SAAS,EAAE,OAAO,UAAU,WAAW,UAAU;AAAA,WAClE,KAAK;AACR,QAAA,eAAeJ,UAAI,iBAAiB;AACtC,cAAQ,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,IAC7B;AAEA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,YAAY,EAAE,OAAO,UAAU,WAAW,UAAU;AAC7D;AAKA,MAAM,UAAyB,MAAM;AACnC,SAAOK,UAAc,cAAA,mBAAmB,EACrC,MAAM,cAAc,EACpB,YAAY,oBAAoB,EAChC,OAAO,uBAAuB,wBAAwB,EACtD,OAAO,6BAA6B,2BAA2B,EAC/D,OAAO,gCAAgC,6BAA6B,EACpE,OAAO,8BAA8B,4BAA4B,EACjE,OAAOC,QAAAA,UAAU,qBAAqB,MAAM,CAAC;AAClD;;;"}
1
+ {"version":3,"file":"create-user.js","sources":["../../../../src/cli/commands/admin/create-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n firstname?: string;\n lastname?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst passwordValidator = yup\n .string()\n .min(8, 'Password must be at least 8 characters long')\n .matches(/[a-z]/, 'Password must contain at least one lowercase character')\n .matches(/[A-Z]/, 'Password must contain at least one uppercase character')\n .matches(/\\d/, 'Password must contain at least one number');\n\nconst adminCreateSchema = yup.object().shape({\n email: emailValidator,\n password: passwordValidator,\n firstname: yup.string().trim().required('First name is required'),\n lastname: yup.string(),\n});\n\ninterface Answers {\n email: string;\n password: string;\n firstname: string;\n lastname: string;\n confirm: boolean;\n}\n\n/**\n * It's not an observable, in reality this is\n * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\n// eslint-disable-next-line rxjs/finnish\nconst promptQuestions: inquirer.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: 'password',\n name: 'password',\n message: 'Admin password?',\n async validate(value: string) {\n const validPassword = await passwordValidator.validate(value);\n return validPassword === value || validPassword;\n },\n },\n { type: 'input', name: 'firstname', message: 'First name?' },\n { type: 'input', name: 'lastname', message: 'Last name?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to create a new admin?',\n },\n];\n\nasync function createAdmin({ email, password, firstname, lastname }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin!.services.user.exists({ email });\n\n if (user) {\n console.error(`User with email \"${email}\" already exists`);\n process.exit(1);\n }\n\n const superAdminRole = await app.admin!.services.role.getSuperAdmin();\n\n await app.admin!.services.user.create({\n email,\n firstname,\n lastname,\n isActive: true,\n roles: [superAdminRole.id],\n ...(password && { password, registrationToken: null }),\n });\n\n console.log(`Successfully created new admin`);\n process.exit(0);\n}\n\n/**\n * Create new admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email, password, firstname, lastname } = cmdOptions;\n\n if (\n _.isEmpty(email) &&\n _.isEmpty(password) &&\n _.isEmpty(firstname) &&\n _.isEmpty(lastname) &&\n process.stdin.isTTY\n ) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email, password, firstname, lastname } = inquiry);\n }\n\n try {\n await adminCreateSchema.validate({ email, password, firstname, lastname });\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 createAdmin({ email, password, firstname, lastname });\n};\n\n/**\n * `$ strapi admin:create-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:create-user')\n .alias('admin:create')\n .description('Create a new admin')\n .option('-e, --email <email>', 'Email of the new admin')\n .option('-p, --password <password>', 'Password of the new admin')\n .option('-f, --firstname <first name>', 'First name of the new admin')\n .option('-l, --lastname <last name>', 'Last name of the new admin')\n .action(runAction('admin:create-user', action));\n};\n\nexport { action, command };\n"],"names":["yup","compileStrapi","createStrapi","_","inquirer","createCommand","runAction"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-user.mjs","sources":["../../../../src/cli/commands/admin/create-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n firstname?: string;\n lastname?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst passwordValidator = yup\n .string()\n .min(8, 'Password must be at least 8 characters long')\n .matches(/[a-z]/, 'Password must contain at least one lowercase character')\n .matches(/[A-Z]/, 'Password must contain at least one uppercase character')\n .matches(/\\d/, 'Password must contain at least one number');\n\nconst adminCreateSchema = yup.object().shape({\n email: emailValidator,\n password: passwordValidator,\n firstname: yup.string().trim().required('First name is required'),\n lastname: yup.string(),\n});\n\ninterface Answers {\n email: string;\n password: string;\n firstname: string;\n lastname: string;\n confirm: boolean;\n}\n\n/**\n * It's not an observable, in reality this is\n * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\n// eslint-disable-next-line rxjs/finnish\nconst promptQuestions: inquirer.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: 'password',\n name: 'password',\n message: 'Admin password?',\n async validate(value: string) {\n const validPassword = await passwordValidator.validate(value);\n return validPassword === value || validPassword;\n },\n },\n { type: 'input', name: 'firstname', message: 'First name?' },\n { type: 'input', name: 'lastname', message: 'Last name?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to create a new admin?',\n },\n];\n\nasync function createAdmin({ email, password, firstname, lastname }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin.services.user.exists({ email });\n\n if (user) {\n console.error(`User with email \"${email}\" already exists`);\n process.exit(1);\n }\n\n const superAdminRole = await app.admin.services.role.getSuperAdmin();\n\n await app.admin.services.user.create({\n email,\n firstname,\n lastname,\n isActive: true,\n roles: [superAdminRole.id],\n ...(password && { password, registrationToken: null }),\n });\n\n console.log(`Successfully created new admin`);\n process.exit(0);\n}\n\n/**\n * Create new admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email, password, firstname, lastname } = cmdOptions;\n\n if (\n _.isEmpty(email) &&\n _.isEmpty(password) &&\n _.isEmpty(firstname) &&\n _.isEmpty(lastname) &&\n process.stdin.isTTY\n ) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email, password, firstname, lastname } = inquiry);\n }\n\n try {\n await adminCreateSchema.validate({ email, password, firstname, lastname });\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 createAdmin({ email, password, firstname, lastname });\n};\n\n/**\n * `$ strapi admin:create-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:create-user')\n .alias('admin:create')\n .description('Create a new admin')\n .option('-e, --email <email>', 'Email of the new admin')\n .option('-p, --password <password>', 'Password of the new admin')\n .option('-f, --firstname <first name>', 'First name of the new admin')\n .option('-l, --lastname <last name>', 'Last name of the new admin')\n .action(runAction('admin:create-user', action));\n};\n\nexport { action, command };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-user.mjs","sources":["../../../../src/cli/commands/admin/create-user.ts"],"sourcesContent":["import { createCommand } from 'commander';\nimport { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n firstname?: string;\n lastname?: string;\n}\n\nconst emailValidator = yup.string().email('Invalid email address').lowercase();\n\nconst passwordValidator = yup\n .string()\n .min(8, 'Password must be at least 8 characters long')\n .matches(/[a-z]/, 'Password must contain at least one lowercase character')\n .matches(/[A-Z]/, 'Password must contain at least one uppercase character')\n .matches(/\\d/, 'Password must contain at least one number');\n\nconst adminCreateSchema = yup.object().shape({\n email: emailValidator,\n password: passwordValidator,\n firstname: yup.string().trim().required('First name is required'),\n lastname: yup.string(),\n});\n\ninterface Answers {\n email: string;\n password: string;\n firstname: string;\n lastname: string;\n confirm: boolean;\n}\n\n/**\n * It's not an observable, in reality this is\n * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\n// eslint-disable-next-line rxjs/finnish\nconst promptQuestions: inquirer.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: 'password',\n name: 'password',\n message: 'Admin password?',\n async validate(value: string) {\n const validPassword = await passwordValidator.validate(value);\n return validPassword === value || validPassword;\n },\n },\n { type: 'input', name: 'firstname', message: 'First name?' },\n { type: 'input', name: 'lastname', message: 'Last name?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Do you really want to create a new admin?',\n },\n];\n\nasync function createAdmin({ email, password, firstname, lastname }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n const user = await app.admin!.services.user.exists({ email });\n\n if (user) {\n console.error(`User with email \"${email}\" already exists`);\n process.exit(1);\n }\n\n const superAdminRole = await app.admin!.services.role.getSuperAdmin();\n\n await app.admin!.services.user.create({\n email,\n firstname,\n lastname,\n isActive: true,\n roles: [superAdminRole.id],\n ...(password && { password, registrationToken: null }),\n });\n\n console.log(`Successfully created new admin`);\n process.exit(0);\n}\n\n/**\n * Create new admin user\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n let { email, password, firstname, lastname } = cmdOptions;\n\n if (\n _.isEmpty(email) &&\n _.isEmpty(password) &&\n _.isEmpty(firstname) &&\n _.isEmpty(lastname) &&\n process.stdin.isTTY\n ) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n ({ email, password, firstname, lastname } = inquiry);\n }\n\n try {\n await adminCreateSchema.validate({ email, password, firstname, lastname });\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 createAdmin({ email, password, firstname, lastname });\n};\n\n/**\n * `$ strapi admin:create-user`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:create-user')\n .alias('admin:create')\n .description('Create a new admin')\n .option('-e, --email <email>', 'Email of the new admin')\n .option('-p, --password <password>', 'Password of the new admin')\n .option('-f, --firstname <first name>', 'First name of the new admin')\n .option('-l, --lastname <last name>', 'Last name of the new admin')\n .action(runAction('admin:create-user', action));\n};\n\nexport { action, command };\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reset-user-password.js","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n}\n\ninterface Answers {\n email: string;\n password: string;\n confirm: boolean;\n}\n\nconst promptQuestions: ReadonlyArray<inquirer.DistinctQuestion<Answers>> = [\n { type: 'input', name: 'email', message: 'User email?' },\n { type: 'password', name: 'password', message: 'New password?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: \"Do you really want to reset this user's password?\",\n },\n];\n\nasync function changePassword({ email, password }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n await app.admin.services.user.resetPasswordByEmail(email, password);\n\n console.log(`Successfully reset user's password`);\n process.exit(0);\n}\n\n/**\n * Reset user's password\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n const { email, password } = cmdOptions;\n\n if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n return changePassword(inquiry);\n }\n\n if (_.isEmpty(email) || _.isEmpty(password)) {\n console.error('Missing required options `email` or `password`');\n process.exit(1);\n }\n\n return changePassword({ email, password });\n};\n\n/**\n * `$ strapi admin:reset-user-password`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:reset-user-password')\n .alias('admin:reset-password')\n .description(\"Reset an admin user's password\")\n .option('-e, --email <email>', 'The user email')\n .option('-p, --password <password>', 'New password for the user')\n .action(runAction('admin:reset-user-password', action));\n};\n\nexport { action, command };\n"],"names":["compileStrapi","createStrapi","_","inquirer","createCommand","runAction"],"mappings":";;;;;;;;;;AAmBA,MAAM,kBAAqE;AAAA,EACzE,EAAE,MAAM,SAAS,MAAM,SAAS,SAAS,cAAc;AAAA,EACvD,EAAE,MAAM,YAAY,MAAM,YAAY,SAAS,gBAAgB;AAAA,EAC/D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,eAAe,eAAe,EAAE,OAAO,YAAwB;AACvD,QAAA,aAAa,MAAMA,KAAAA;AACzB,QAAM,MAAM,MAAMC,KAAAA,aAAa,UAAU,EAAE,KAAK;AAEhD,QAAM,IAAI,MAAM,SAAS,KAAK,qBAAqB,OAAO,QAAQ;AAElE,UAAQ,IAAI,oCAAoC;AAChD,UAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,SAAS,OAAO,aAAyB,OAAO;AAC9C,QAAA,EAAE,OAAO,SAAa,IAAA;AAExB,MAAAC,mBAAE,QAAQ,KAAK,KAAKA,WAAA,QAAE,QAAQ,QAAQ,KAAK,QAAQ,MAAM,OAAO;AAClE,UAAM,UAAU,MAAMC,kBAAAA,QAAS,OAAO,eAAe;AAEjD,QAAA,CAAC,QAAQ,SAAS;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAID,WAAAA,QAAE,QAAQ,KAAK,KAAKA,WAAAA,QAAE,QAAQ,QAAQ,GAAG;AAC3C,YAAQ,MAAM,gDAAgD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,eAAe,EAAE,OAAO,SAAU,CAAA;AAC3C;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAAE,UAAA,cAAc,2BAA2B,EAC7C,MAAM,sBAAsB,EAC5B,YAAY,gCAAgC,EAC5C,OAAO,uBAAuB,gBAAgB,EAC9C,OAAO,6BAA6B,2BAA2B,EAC/D,OAAOC,kBAAU,6BAA6B,MAAM,CAAC;AAC1D;;;"}
1
+ {"version":3,"file":"reset-user-password.js","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n}\n\ninterface Answers {\n email: string;\n password: string;\n confirm: boolean;\n}\n\nconst promptQuestions: ReadonlyArray<inquirer.DistinctQuestion<Answers>> = [\n { type: 'input', name: 'email', message: 'User email?' },\n { type: 'password', name: 'password', message: 'New password?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: \"Do you really want to reset this user's password?\",\n },\n];\n\nasync function changePassword({ email, password }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n await app.admin!.services.user.resetPasswordByEmail(email, password);\n\n console.log(`Successfully reset user's password`);\n process.exit(0);\n}\n\n/**\n * Reset user's password\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n const { email, password } = cmdOptions;\n\n if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n return changePassword(inquiry);\n }\n\n if (_.isEmpty(email) || _.isEmpty(password)) {\n console.error('Missing required options `email` or `password`');\n process.exit(1);\n }\n\n return changePassword({ email, password });\n};\n\n/**\n * `$ strapi admin:reset-user-password`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:reset-user-password')\n .alias('admin:reset-password')\n .description(\"Reset an admin user's password\")\n .option('-e, --email <email>', 'The user email')\n .option('-p, --password <password>', 'New password for the user')\n .action(runAction('admin:reset-user-password', action));\n};\n\nexport { action, command };\n"],"names":["compileStrapi","createStrapi","_","inquirer","createCommand","runAction"],"mappings":";;;;;;;;;;AAmBA,MAAM,kBAAqE;AAAA,EACzE,EAAE,MAAM,SAAS,MAAM,SAAS,SAAS,cAAc;AAAA,EACvD,EAAE,MAAM,YAAY,MAAM,YAAY,SAAS,gBAAgB;AAAA,EAC/D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,eAAe,eAAe,EAAE,OAAO,YAAwB;AACvD,QAAA,aAAa,MAAMA,KAAAA;AACzB,QAAM,MAAM,MAAMC,KAAAA,aAAa,UAAU,EAAE,KAAK;AAEhD,QAAM,IAAI,MAAO,SAAS,KAAK,qBAAqB,OAAO,QAAQ;AAEnE,UAAQ,IAAI,oCAAoC;AAChD,UAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,SAAS,OAAO,aAAyB,OAAO;AAC9C,QAAA,EAAE,OAAO,SAAa,IAAA;AAExB,MAAAC,mBAAE,QAAQ,KAAK,KAAKA,WAAA,QAAE,QAAQ,QAAQ,KAAK,QAAQ,MAAM,OAAO;AAClE,UAAM,UAAU,MAAMC,kBAAAA,QAAS,OAAO,eAAe;AAEjD,QAAA,CAAC,QAAQ,SAAS;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAID,WAAAA,QAAE,QAAQ,KAAK,KAAKA,WAAAA,QAAE,QAAQ,QAAQ,GAAG;AAC3C,YAAQ,MAAM,gDAAgD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,eAAe,EAAE,OAAO,SAAU,CAAA;AAC3C;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAAE,UAAA,cAAc,2BAA2B,EAC7C,MAAM,sBAAsB,EAC5B,YAAY,gCAAgC,EAC5C,OAAO,uBAAuB,gBAAgB,EAC9C,OAAO,6BAA6B,2BAA2B,EAC/D,OAAOC,kBAAU,6BAA6B,MAAM,CAAC;AAC1D;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"reset-user-password.mjs","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n}\n\ninterface Answers {\n email: string;\n password: string;\n confirm: boolean;\n}\n\nconst promptQuestions: ReadonlyArray<inquirer.DistinctQuestion<Answers>> = [\n { type: 'input', name: 'email', message: 'User email?' },\n { type: 'password', name: 'password', message: 'New password?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: \"Do you really want to reset this user's password?\",\n },\n];\n\nasync function changePassword({ email, password }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n await app.admin.services.user.resetPasswordByEmail(email, password);\n\n console.log(`Successfully reset user's password`);\n process.exit(0);\n}\n\n/**\n * Reset user's password\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n const { email, password } = cmdOptions;\n\n if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n return changePassword(inquiry);\n }\n\n if (_.isEmpty(email) || _.isEmpty(password)) {\n console.error('Missing required options `email` or `password`');\n process.exit(1);\n }\n\n return changePassword({ email, password });\n};\n\n/**\n * `$ strapi admin:reset-user-password`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:reset-user-password')\n .alias('admin:reset-password')\n .description(\"Reset an admin user's password\")\n .option('-e, --email <email>', 'The user email')\n .option('-p, --password <password>', 'New password for the user')\n .action(runAction('admin:reset-user-password', action));\n};\n\nexport { action, command };\n"],"names":[],"mappings":";;;;;AAmBA,MAAM,kBAAqE;AAAA,EACzE,EAAE,MAAM,SAAS,MAAM,SAAS,SAAS,cAAc;AAAA,EACvD,EAAE,MAAM,YAAY,MAAM,YAAY,SAAS,gBAAgB;AAAA,EAC/D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,eAAe,eAAe,EAAE,OAAO,YAAwB;AACvD,QAAA,aAAa,MAAM;AACzB,QAAM,MAAM,MAAM,aAAa,UAAU,EAAE,KAAK;AAEhD,QAAM,IAAI,MAAM,SAAS,KAAK,qBAAqB,OAAO,QAAQ;AAElE,UAAQ,IAAI,oCAAoC;AAChD,UAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,SAAS,OAAO,aAAyB,OAAO;AAC9C,QAAA,EAAE,OAAO,SAAa,IAAA;AAExB,MAAA,EAAE,QAAQ,KAAK,KAAK,EAAE,QAAQ,QAAQ,KAAK,QAAQ,MAAM,OAAO;AAClE,UAAM,UAAU,MAAM,SAAS,OAAO,eAAe;AAEjD,QAAA,CAAC,QAAQ,SAAS;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAI,EAAE,QAAQ,KAAK,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAC3C,YAAQ,MAAM,gDAAgD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,eAAe,EAAE,OAAO,SAAU,CAAA;AAC3C;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAA,cAAc,2BAA2B,EAC7C,MAAM,sBAAsB,EAC5B,YAAY,gCAAgC,EAC5C,OAAO,uBAAuB,gBAAgB,EAC9C,OAAO,6BAA6B,2BAA2B,EAC/D,OAAO,UAAU,6BAA6B,MAAM,CAAC;AAC1D;"}
1
+ {"version":3,"file":"reset-user-password.mjs","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport inquirer from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\n\ninterface CmdOptions {\n email?: string;\n password?: string;\n}\n\ninterface Answers {\n email: string;\n password: string;\n confirm: boolean;\n}\n\nconst promptQuestions: ReadonlyArray<inquirer.DistinctQuestion<Answers>> = [\n { type: 'input', name: 'email', message: 'User email?' },\n { type: 'password', name: 'password', message: 'New password?' },\n {\n type: 'confirm',\n name: 'confirm',\n message: \"Do you really want to reset this user's password?\",\n },\n];\n\nasync function changePassword({ email, password }: CmdOptions) {\n const appContext = await compileStrapi();\n const app = await createStrapi(appContext).load();\n\n await app.admin!.services.user.resetPasswordByEmail(email, password);\n\n console.log(`Successfully reset user's password`);\n process.exit(0);\n}\n\n/**\n * Reset user's password\n */\nconst action = async (cmdOptions: CmdOptions = {}) => {\n const { email, password } = cmdOptions;\n\n if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {\n const inquiry = await inquirer.prompt(promptQuestions);\n\n if (!inquiry.confirm) {\n process.exit(0);\n }\n\n return changePassword(inquiry);\n }\n\n if (_.isEmpty(email) || _.isEmpty(password)) {\n console.error('Missing required options `email` or `password`');\n process.exit(1);\n }\n\n return changePassword({ email, password });\n};\n\n/**\n * `$ strapi admin:reset-user-password`\n */\nconst command: StrapiCommand = () => {\n return createCommand('admin:reset-user-password')\n .alias('admin:reset-password')\n .description(\"Reset an admin user's password\")\n .option('-e, --email <email>', 'The user email')\n .option('-p, --password <password>', 'New password for the user')\n .action(runAction('admin:reset-user-password', action));\n};\n\nexport { action, command };\n"],"names":[],"mappings":";;;;;AAmBA,MAAM,kBAAqE;AAAA,EACzE,EAAE,MAAM,SAAS,MAAM,SAAS,SAAS,cAAc;AAAA,EACvD,EAAE,MAAM,YAAY,MAAM,YAAY,SAAS,gBAAgB;AAAA,EAC/D;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,eAAe,eAAe,EAAE,OAAO,YAAwB;AACvD,QAAA,aAAa,MAAM;AACzB,QAAM,MAAM,MAAM,aAAa,UAAU,EAAE,KAAK;AAEhD,QAAM,IAAI,MAAO,SAAS,KAAK,qBAAqB,OAAO,QAAQ;AAEnE,UAAQ,IAAI,oCAAoC;AAChD,UAAQ,KAAK,CAAC;AAChB;AAKA,MAAM,SAAS,OAAO,aAAyB,OAAO;AAC9C,QAAA,EAAE,OAAO,SAAa,IAAA;AAExB,MAAA,EAAE,QAAQ,KAAK,KAAK,EAAE,QAAQ,QAAQ,KAAK,QAAQ,MAAM,OAAO;AAClE,UAAM,UAAU,MAAM,SAAS,OAAO,eAAe;AAEjD,QAAA,CAAC,QAAQ,SAAS;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAI,EAAE,QAAQ,KAAK,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAC3C,YAAQ,MAAM,gDAAgD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO,eAAe,EAAE,OAAO,SAAU,CAAA;AAC3C;AAKA,MAAM,UAAyB,MAAM;AAC5B,SAAA,cAAc,2BAA2B,EAC7C,MAAM,sBAAsB,EAC5B,YAAY,gCAAgC,EAC5C,OAAO,uBAAuB,gBAAgB,EAC9C,OAAO,6BAA6B,2BAA2B,EAC/D,OAAO,UAAU,6BAA6B,MAAM,CAAC;AAC1D;"}
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { 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} 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';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: 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 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'));\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 const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\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.LoadedStrapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = 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 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":["fileDataTransfer","strapiDataTransfer","isObject","exitWith","createStrapiInstance","engineDataTransfer","DEFAULT_IGNORED_CONTENT_TYPES","formatDiagnostic","loadersFactory","getTransferTelemetryPayload","setSignalHandler","abortTransfer","fs","buildTransferTable","chalk","exitMessageText","isString","getDefaultExportName","isFinite","toNumber"],"mappings":"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"}
1
+ {"version":3,"file":"action.js","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { 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} 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';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: 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 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'));\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 const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\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 destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = 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 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":["fileDataTransfer","strapiDataTransfer","isObject","exitWith","createStrapiInstance","engineDataTransfer","DEFAULT_IGNORED_CONTENT_TYPES","formatDiagnostic","loadersFactory","getTransferTelemetryPayload","setSignalHandler","abortTransfer","fs","buildTransferTable","chalk","exitMessageText","isString","getDefaultExportName","isFinite","toNumber"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { isObject, isString, isFinite, toNumber } from "lodash/fp";
2
2
  import fse from "fs-extra";
3
3
  import chalk from "chalk";
4
4
  import { engine, file, strapi } from "@strapi/data-transfer";
5
- import { createStrapiInstance, DEFAULT_IGNORED_CONTENT_TYPES, formatDiagnostic, getTransferTelemetryPayload, abortTransfer, setSignalHandler, buildTransferTable, exitMessageText, loadersFactory, getDefaultExportName } from "../../utils/data-transfer.mjs";
5
+ import { createStrapiInstance, DEFAULT_IGNORED_CONTENT_TYPES, formatDiagnostic, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, loadersFactory, getDefaultExportName } from "../../utils/data-transfer.mjs";
6
6
  import { exitWith } from "../../utils/helpers.mjs";
7
7
  const {
8
8
  providers: { createLocalFileDestinationProvider }
@@ -1 +1 @@
1
- {"version":3,"file":"action.mjs","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { 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} 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';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: 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 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'));\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 const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\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.LoadedStrapi) => {\n return createLocalStrapiSourceProvider({\n async getStrapi() {\n return strapi;\n },\n });\n};\n\n/**\n * It creates a local file destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = 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 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":["fileDataTransfer","strapiDataTransfer","strapi","engine","engineDataTransfer","fs","file"],"mappings":"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"}
1
+ {"version":3,"file":"action.mjs","sources":["../../../../src/cli/commands/export/action.ts"],"sourcesContent":["import { 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} 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';\n\nconst {\n providers: { createLocalFileDestinationProvider },\n} = fileDataTransfer;\nconst {\n providers: { createLocalStrapiSourceProvider },\n} = strapiDataTransfer;\n\nconst BYTES_IN_MB = 1024 * 1024;\n\ninterface CmdOptions {\n file?: string;\n encrypt?: 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 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'));\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 const outFileExists = await fs.pathExists(outFile);\n if (!outFileExists) {\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 destination provider based on the given options\n */\nconst createDestinationProvider = (opts: CmdOptions) => {\n const { file, compress, encrypt, key, maxSizeJsonl } = 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 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":["fileDataTransfer","strapiDataTransfer","strapi","engine","engineDataTransfer","fs","file"],"mappings":"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"}
@@ -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 {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\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: { 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 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 file 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 /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\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'));\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.LoadedStrapi }));\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":["fileDataTransfer","strapiDataTransfer","engineDataTransfer","isObject","exitWith","createStrapiInstance","DEFAULT_IGNORED_CONTENT_TYPES","parseRestoreFromOptions","chalk","formatDiagnostic","loadersFactory","getDiffHandler","getTransferTelemetryPayload","setSignalHandler","abortTransfer","buildTransferTable","exitMessageText"],"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 {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\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: { 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 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 file 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 /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\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'));\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":["fileDataTransfer","strapiDataTransfer","engineDataTransfer","isObject","exitWith","createStrapiInstance","DEFAULT_IGNORED_CONTENT_TYPES","parseRestoreFromOptions","chalk","formatDiagnostic","loadersFactory","getDiffHandler","getTransferTelemetryPayload","setSignalHandler","abortTransfer","buildTransferTable","exitMessageText"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { isObject } from "lodash/fp";
2
2
  import chalk from "chalk";
3
3
  import { file, strapi as strapi$1, engine } from "@strapi/data-transfer";
4
- import { createStrapiInstance, DEFAULT_IGNORED_CONTENT_TYPES, parseRestoreFromOptions, formatDiagnostic, getDiffHandler, getTransferTelemetryPayload, abortTransfer, setSignalHandler, buildTransferTable, exitMessageText, loadersFactory } from "../../utils/data-transfer.mjs";
4
+ import { createStrapiInstance, DEFAULT_IGNORED_CONTENT_TYPES, parseRestoreFromOptions, formatDiagnostic, getDiffHandler, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, loadersFactory } from "../../utils/data-transfer.mjs";
5
5
  import { exitWith } from "../../utils/helpers.mjs";
6
6
  const {
7
7
  providers: { createLocalFileSourceProvider }
@@ -1 +1 @@
1
- {"version":3,"file":"action.mjs","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 {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\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: { 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 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 file 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 /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\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'));\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.LoadedStrapi }));\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":["fileDataTransfer","strapiDataTransfer","engineDataTransfer","engine"],"mappings":"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"}
1
+ {"version":3,"file":"action.mjs","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 {\n engine as engineDataTransfer,\n strapi as strapiDataTransfer,\n file as fileDataTransfer,\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: { 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 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 file 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 /**\n * From strapi backup file\n */\n const sourceOptions = getLocalFileSourceOptions(opts);\n\n const source = createLocalFileSourceProvider(sourceOptions);\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'));\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":["fileDataTransfer","strapiDataTransfer","engineDataTransfer","engine"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { isObject } from "lodash/fp";
2
2
  import { engine, strapi } from "@strapi/data-transfer";
3
- import { createStrapiInstance, parseRestoreFromOptions, DEFAULT_IGNORED_CONTENT_TYPES, formatDiagnostic, getDiffHandler, getAssetsBackupHandler, getTransferTelemetryPayload, abortTransfer, setSignalHandler, buildTransferTable, exitMessageText, loadersFactory } from "../../utils/data-transfer.mjs";
3
+ import { createStrapiInstance, parseRestoreFromOptions, DEFAULT_IGNORED_CONTENT_TYPES, formatDiagnostic, getDiffHandler, getAssetsBackupHandler, getTransferTelemetryPayload, setSignalHandler, abortTransfer, buildTransferTable, exitMessageText, loadersFactory } from "../../utils/data-transfer.mjs";
4
4
  import { exitWith } from "../../utils/helpers.mjs";
5
5
  const { createTransferEngine } = engine;
6
6
  const {
@@ -26,10 +26,10 @@ declare const promptEncryptionKey: (thisCommand: Command) => Promise<void>;
26
26
  * hook: require a confirmation message to be accepted unless forceOption (-f,--force) is used
27
27
  */
28
28
  declare const getCommanderConfirmMessage: (message: string, { failMessage }?: {
29
- failMessage?: string | undefined;
29
+ failMessage?: string;
30
30
  }) => (command: Command) => Promise<void>;
31
31
  declare const confirmMessage: (message: string, { force }?: {
32
- force?: boolean | undefined;
32
+ force?: boolean;
33
33
  }) => Promise<any>;
34
34
  declare const forceOption: Option;
35
35
  export { getParseListWithChoices, parseList, parseURL, parseInteger, promptEncryptionKey, getCommanderConfirmMessage, confirmMessage, forceOption, };
@@ -1 +1 @@
1
- {"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/commander.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAA8B,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxE;;GAEG;AACH,QAAA,MAAM,SAAS,UAAW,MAAM,aAQ/B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,uBAAuB,YAAa,MAAM,EAAE,oCACjC,MAAM,aAYtB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,YAAY,UAAW,MAAM,WAOlC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,QAAQ,UAAW,MAAM,QAW9B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,mBAAmB,gBAAuB,OAAO,kBA8BtD,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,0BAA0B,YACrB,MAAM;;gBAGQ,OAAO,kBAM/B,CAAC;AAEF,QAAA,MAAM,cAAc,YAAmB,MAAM;;kBAkB5C,CAAC;AAEF,QAAA,MAAM,WAAW,QAGhB,CAAC;AAEF,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/commander.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAA8B,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxE;;GAEG;AACH,QAAA,MAAM,SAAS,UAAW,MAAM,aAQ/B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,uBAAuB,YAAa,MAAM,EAAE,oCACjC,MAAM,aAYtB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,YAAY,UAAW,MAAM,WAOlC,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,QAAQ,UAAW,MAAM,QAW9B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,mBAAmB,gBAAuB,OAAO,kBA8BtD,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,0BAA0B,YACrB,MAAM,oBACE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,eAElB,OAAO,kBAM/B,CAAC;AAEF,QAAA,MAAM,cAAc,YAAmB,MAAM,cAAa;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,iBAkB5E,CAAC;AAEF,QAAA,MAAM,WAAW,QAGhB,CAAC;AAEF,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,WAAW,GACZ,CAAC"}
@@ -10,12 +10,12 @@ declare const buildTransferTable: (resultData: ResultData) => Table.Table | unde
10
10
  declare const DEFAULT_IGNORED_CONTENT_TYPES: string[];
11
11
  declare const abortTransfer: ({ engine, strapi, }: {
12
12
  engine: engineDataTransfer.TransferEngine;
13
- strapi: Core.LoadedStrapi;
13
+ strapi: Core.Strapi;
14
14
  }) => Promise<boolean>;
15
15
  declare const setSignalHandler: (handler: (...args: unknown[]) => void, signals?: string[]) => Promise<void>;
16
16
  declare const createStrapiInstance: (opts?: {
17
17
  logLevel?: string;
18
- }) => Promise<Core.Strapi & Required<Core.Strapi>>;
18
+ }) => Promise<Core.Strapi>;
19
19
  declare const throttleOption: Option;
20
20
  declare const excludeOption: Option;
21
21
  declare const onlyOption: Option;
@@ -50,11 +50,11 @@ declare const getTransferTelemetryPayload: (engine: engineDataTransfer.TransferE
50
50
  * Get a transfer engine schema diff handler that confirms with the user before bypassing a schema check
51
51
  */
52
52
  declare const getDiffHandler: (engine: engineDataTransfer.TransferEngine, { force, action, }: {
53
- force?: boolean | undefined;
53
+ force?: boolean;
54
54
  action: string;
55
55
  }) => (context: engineDataTransfer.SchemaDiffHandlerContext, next: (ctx: engineDataTransfer.SchemaDiffHandlerContext) => void) => Promise<void>;
56
56
  declare const getAssetsBackupHandler: (engine: engineDataTransfer.TransferEngine, { force, action, }: {
57
- force?: boolean | undefined;
57
+ force?: boolean;
58
58
  action: string;
59
59
  }) => (context: engineDataTransfer.ErrorHandlerContext, next: (ctx: engineDataTransfer.ErrorHandlerContext) => void) => Promise<void>;
60
60
  declare const shouldSkipStage: (opts: Partial<engineDataTransfer.ITransferEngineOptions>, dataKind: engineDataTransfer.TransferFilterPreset) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/data-transfer.ts"],"names":[],"mappings":"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"}
@@ -231,7 +231,7 @@ const getDiffHandler = (engine, {
231
231
  for (const diff of diffs) {
232
232
  const path = [uid].concat(diff.path).join(".");
233
233
  const endPath = diff.path[diff.path.length - 1];
234
- if (uid === "admin::workflow" || uid === "admin::workflow-stage" || endPath?.startsWith("strapi_stage") || endPath?.startsWith("strapi_assignee")) {
234
+ if (uid === "plugin::review-workflows.workflow" || uid === "plugin::review-workflows.workflow-stage" || endPath?.startsWith("strapi_stage") || endPath?.startsWith("strapi_assignee")) {
235
235
  workflowsStatus = diff.kind;
236
236
  } else if (diff.kind === "added") {
237
237
  engine.reportWarning(chalk__default.default.red(`${chalk__default.default.bold(path)} does not exist on source`), source);
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.js","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } 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 { readableBytes, exitWith } 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 DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.LoadedStrapi;\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 (\n opts: { logLevel?: string } = {}\n): Promise<Core.Strapi & Required<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 (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\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 logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\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 };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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.LoadedStrapi });\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 === 'admin::workflow' ||\n uid === 'admin::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.LoadedStrapi }));\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.LoadedStrapi });\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.LoadedStrapi }));\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 = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\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":["engineDataTransfer","process","chalk","Table","readableBytes","strapi","compileStrapi","createStrapi","Option","parseInteger","getParseListWithChoices","exitWith","logger","createLogger","configs","ora","confirmMessage","merge"],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.js","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } 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 { readableBytes, exitWith } 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 DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\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 (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\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 logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\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 };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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 = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\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":["engineDataTransfer","process","chalk","Table","readableBytes","strapi","compileStrapi","createStrapi","Option","parseInteger","getParseListWithChoices","exitWith","logger","createLogger","configs","ora","confirmMessage","merge"],"mappings":"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"}
@@ -225,7 +225,7 @@ const getDiffHandler = (engine2, {
225
225
  for (const diff of diffs) {
226
226
  const path = [uid].concat(diff.path).join(".");
227
227
  const endPath = diff.path[diff.path.length - 1];
228
- if (uid === "admin::workflow" || uid === "admin::workflow-stage" || endPath?.startsWith("strapi_stage") || endPath?.startsWith("strapi_assignee")) {
228
+ if (uid === "plugin::review-workflows.workflow" || uid === "plugin::review-workflows.workflow-stage" || endPath?.startsWith("strapi_stage") || endPath?.startsWith("strapi_assignee")) {
229
229
  workflowsStatus = diff.kind;
230
230
  } else if (diff.kind === "added") {
231
231
  engine2.reportWarning(chalk.red(`${chalk.bold(path)} does not exist on source`), source);
@@ -1 +1 @@
1
- {"version":3,"file":"data-transfer.mjs","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } 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 { readableBytes, exitWith } 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 DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\n\nconst abortTransfer = async ({\n engine,\n strapi,\n}: {\n engine: engineDataTransfer.TransferEngine;\n strapi: Core.LoadedStrapi;\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 (\n opts: { logLevel?: string } = {}\n): Promise<Core.Strapi & Required<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 (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\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 logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\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 };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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.LoadedStrapi });\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 === 'admin::workflow' ||\n uid === 'admin::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.LoadedStrapi }));\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.LoadedStrapi });\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.LoadedStrapi }));\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 = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\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":["engineDataTransfer","process","Table","engine","strapi"],"mappings":"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"}
1
+ {"version":3,"file":"data-transfer.mjs","sources":["../../../src/cli/utils/data-transfer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { Command, Option } from 'commander';\nimport { configs, createLogger } 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 { readableBytes, exitWith } 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 DEFAULT_IGNORED_CONTENT_TYPES = [\n 'admin::permission',\n 'admin::user',\n 'admin::role',\n 'admin::api-token',\n 'admin::api-token-permission',\n 'admin::transfer-token',\n 'admin::transfer-token-permission',\n 'admin::audit-log',\n 'plugin::content-releases.release',\n 'plugin::content-releases.release-action',\n];\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 (\n operation: string\n ): Parameters<engineDataTransfer.TransferEngine['diagnostics']['onDiagnostic']>[0] =>\n ({ details, kind }) => {\n const logger = createLogger(\n configs.createOutputFileConfiguration(`${operation}_error_log_${Date.now()}.log`)\n );\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 logger.error(errorMessage);\n }\n if (kind === 'info') {\n const { message, params } = details;\n\n const msg = `${message}\\n${params ? JSON.stringify(params, null, 2) : ''}`;\n\n logger.info(msg);\n }\n if (kind === 'warning') {\n const { origin, message } = details;\n\n logger.warn(`(${origin ?? 'transfer'}) ${message}`);\n }\n } catch (err) {\n logger.error(err);\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 };\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 size = `size: ${readableBytes(stageData?.bytes ?? 0)}`;\n const elapsed = `elapsed: ${elapsedTime} ms`;\n const speed =\n elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';\n\n loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${\n !stageData?.endTime ? speed : ''\n }`;\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 = (opts: Partial<engineDataTransfer.ITransferEngineOptions>) => {\n const entitiesOptions: RestoreConfig['entities'] = {\n exclude: DEFAULT_IGNORED_CONTENT_TYPES,\n include: undefined,\n };\n\n // if content is not included, send an empty array for include\n if ((opts.only && !opts.only.includes('content')) || opts.exclude?.includes('content')) {\n entitiesOptions.include = [];\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 DEFAULT_IGNORED_CONTENT_TYPES,\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":["engineDataTransfer","process","Table","engine","strapi"],"mappings":";;;;;;;;;;AAaA,MAAM;AAAA,EACJ,QAAQ,EAAE,kCAAkC;AAC9C,IAAIA;AAEJ,MAAM,kBAAkB,CAACC,UAAiB,QAAQ,UAAU;AACpD,QAAA,qBAAqBA,SAAQ,CAAC,EAAE,gBAAgBA,SAAQ,MAAM,CAAC;AAErE,MAAI,CAAC,OAAO;AACV,WAAO,MAAM;AAAA,MACX,MAAM,MAAM,GAAG,kBAAkB,2CAA2C;AAAA,IAAA;AAAA,EAEhF;AAEA,SAAO,MAAM,KAAK,MAAM,IAAI,GAAG,kBAAkB,kBAAkB,CAAC;AACtE;AAEA,MAAM,MAAM,CAAC,MAAc;AACzB,UAAQ,IAAI,KAAK,MAAM,MAAM,OAAO,CAAC;AACvC;AAEA,MAAM,iBAAiB,MAAM;AACrB,QAAA,2BAAW;AAGf,SAAA,KAAK,gBACL,IAAI,KAAK,SAAS,IAAI,CAAC,IACvB,IAAI,KAAK,QAAS,CAAA,IAClB,IAAI,KAAK,UAAU,IACnB,IAAI,KAAK,WAAY,CAAA,IACrB,IAAI,KAAK,WAAY,CAAA;AAEzB;AAEA,MAAM,uBAAuB,MAAM;AAC1B,SAAA,UAAU,eAAgB,CAAA;AACnC;AAOM,MAAA,qBAAqB,CAAC,eAA2B;AACrD,MAAI,CAAC,YAAY;AACf;AAAA,EACF;AAGM,QAAA,QAAQ,IAAIC,SAAM;AAAA,IACtB,MAAM,CAAC,QAAQ,SAAS,MAAM,EAAE,IAAI,CAAC,SAAS,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,EAAA,CACpE;AAED,MAAI,aAAa;AACjB,MAAI,aAAa;AAChB,SAAO,KAAK,UAAU,EAAyC,QAAQ,CAAC,UAAU;AAC3E,UAAA,OAAO,WAAW,KAAK;AAE7B,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AAEA,UAAM,KAAK;AAAA,MACT,EAAE,QAAQ,QAAQ,SAAS,MAAM,KAAK,KAAK,EAAE;AAAA,MAC7C,EAAE,QAAQ,SAAS,SAAS,KAAK,MAAM;AAAA,MACvC,EAAE,QAAQ,SAAS,SAAS,GAAG,cAAc,KAAK,OAAO,GAAG,EAAE,CAAC,IAAI;AAAA,IAAA,CACpE;AACD,kBAAc,KAAK;AACnB,kBAAc,KAAK;AAEnB,QAAI,KAAK,YAAY;AAClB,aAAO,KAAK,KAAK,UAAU,EACzB,OACA,QAAQ,CAAC,WAAW;AACf,YAAA,CAAC,KAAK,YAAY;AACpB;AAAA,QACF;AAEM,cAAA,UAAU,KAAK,WAAW,MAAM;AAEtC,cAAM,KAAK;AAAA,UACT,EAAE,QAAQ,QAAQ,SAAS,MAAM,MAAM,KAAK,KAAK,MAAM,CAAC,GAAG;AAAA,UAC3D,EAAE,QAAQ,SAAS,SAAS,MAAM,KAAK,QAAQ,KAAK,EAAE;AAAA,UACtD,EAAE,QAAQ,SAAS,SAAS,MAAM,KAAK,IAAI,cAAc,QAAQ,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;AAAA,QAAA,CACpF;AAAA,MAAA,CACF;AAAA,IACL;AAAA,EAAA,CACD;AACD,QAAM,KAAK;AAAA,IACT,EAAE,QAAQ,QAAQ,SAAS,MAAM,KAAK,MAAM,OAAO,EAAE;AAAA,IACrD,EAAE,QAAQ,SAAS,SAAS,MAAM,KAAK,MAAM,UAAU,EAAE;AAAA,IACzD,EAAE,QAAQ,SAAS,SAAS,GAAG,MAAM,KAAK,MAAM,cAAc,YAAY,GAAG,EAAE,CAAC,CAAC,IAAI;AAAA,EAAA,CACtF;AAEM,SAAA;AACT;AAEA,MAAM,gCAAgC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,gBAAgB,OAAO;AAAA,EAC3B,QAAAC;AAAA,EACA,QAAAC;AACF,MAGM;AACA,MAAA;AACF,UAAMD,QAAO;AACb,UAAMC,QAAO;WACN,GAAG;AAEH,WAAA;AAAA,EACT;AACO,SAAA;AACT;AAEM,MAAA,mBAAmB,OACvB,SACA,UAAU,CAAC,UAAU,WAAW,SAAS,MACtC;AACK,UAAA,QAAQ,CAAC,WAAW;AAG1B,YAAQ,mBAAmB,MAAM;AACzB,YAAA,GAAG,QAAQ,OAAO;AAAA,EAAA,CAC3B;AACH;AAEA,MAAM,uBAAuB,OAAO,OAA8B,OAA6B;AACzF,MAAA;AACI,UAAA,aAAa,MAAM;AACzB,UAAM,MAAM,aAAa,EAAE,GAAG,MAAM,GAAG,YAAY;AAE/C,QAAA,IAAI,QAAQ,KAAK,YAAY;AAC1B,WAAA,MAAM,IAAI;WACV,OAAO;AACd,QAAI,iBAAiB,SAAS,UAAU,SAAS,MAAM,SAAS,gBAAgB;AACxE,YAAA,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AAEM,UAAA;AAAA,EACR;AACF;AAEA,MAAM,oBAAoB,OAAO,KAAKJ,OAAmB,oBAAoB;AAE7E,MAAM,iBAAiB,IAAI;AAAA,EACzB;AAAA,EACA;AACF,EACG,UAAU,YAAY,EACtB,SAAS;AAEZ,MAAM,gBAAgB,IAAI;AAAA,EACxB;AAAA,EACA,8DAA8D,kBAAkB,KAAK,GAAG,CAAC;AAC3F,EAAE,UAAU,wBAAwB,mBAAmB,+BAA+B,CAAC;AAEvF,MAAM,aAAa,IAAI;AAAA,EACrB;AAAA,EACA,qEAAqE,kBAAkB,KAAK,GAAG,CAAC;AAClG,EAAE,UAAU,wBAAwB,mBAAmB,4BAA4B,CAAC;AAE9E,MAAA,sBAAsB,CAAC,YAAqB;AAChD,QAAM,EAAE,SAAS,KAAK,IAAI,QAAQ,KAAK;AACnC,MAAA,CAAC,QAAQ,CAAC,SAAS;AACrB;AAAA,EACF;AAEA,QAAM,gBAAgB,KAAK,OAAO,CAAC,MAAc;AACxC,WAAA,QAAQ,QAAQ,CAAC,MAAM;AAAA,EAAA,CAC/B;AACG,MAAA,cAAc,SAAS,GAAG;AAC5B;AAAA,MACE;AAAA,MACA,+FAA+F,cAAc;AAAA,QAC3G;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AACF;AAEA,MAAM,cAAc;AAAA,EAClB,OAAO,MAAM;AAAA,EACb,OAAO,MAAM;AAAA,EACb,OAAO,MAAM;AACf;AAEA,MAAM,mBACJ,CACE,cAEF,CAAC,EAAE,SAAS,WAAW;AACrB,QAAM,SAAS;AAAA,IACb,QAAQ,8BAA8B,GAAG,SAAS,cAAc,KAAK,KAAK,MAAM;AAAA,EAAA;AAE9E,MAAA;AACF,QAAI,SAAS,SAAS;AACpB,YAAM,EAAE,SAAS,WAAW,QAAA,IAAY;AAElC,YAAA,gBAAgB,YAAY,QAAQ;AACpC,YAAA,eAAe,cAAc,IAAI,SAAS,aAAa,KAAK,OAAO,EAAE;AAE3E,aAAO,MAAM,YAAY;AAAA,IAC3B;AACA,QAAI,SAAS,QAAQ;AACb,YAAA,EAAE,SAAS,OAAW,IAAA;AAEtB,YAAA,MAAM,GAAG,OAAO;AAAA,EAAK,SAAS,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,EAAE;AAExE,aAAO,KAAK,GAAG;AAAA,IACjB;AACA,QAAI,SAAS,WAAW;AAChB,YAAA,EAAE,QAAQ,QAAY,IAAA;AAE5B,aAAO,KAAK,IAAI,UAAU,UAAU,KAAK,OAAO,EAAE;AAAA,IACpD;AAAA,WACO,KAAK;AACZ,WAAO,MAAM,GAAG;AAAA,EAClB;AACF;AAeF,MAAM,iBAAiB,CAAC,iBAA0B,OAAkB;AAClE,QAAM,UAAU;AACV,QAAA,eAAe,CAAC,OAAyC,SAAe;AACxE,QAAA,EAAE,SAAS,UAAU;AACvB,mBAAa,KAAK;AAAA,IACpB;AAEM,UAAA,YAAY,KAAK,KAAK;AACtB,UAAA,cAAc,WAAW,aAC1B,WAAW,WAAW,KAAK,IAAS,KAAA,UAAU,YAC/C;AACJ,UAAM,OAAO,SAAS,cAAc,WAAW,SAAS,CAAC,CAAC;AACpD,UAAA,UAAU,YAAY,WAAW;AACjC,UAAA,QACJ,cAAc,IAAI,IAAI,eAAgB,WAAW,SAAS,KAAK,MAAQ,WAAW,CAAC,QAAQ;AAE7F,YAAQ,KAAK,EAAE,OAAO,GAAG,KAAK,KAAK,WAAW,SAAS,CAAC,gBAAgB,IAAI,MAAM,OAAO,KACvF,CAAC,WAAW,UAAU,QAAQ,EAChC;AAEA,WAAO,QAAQ,KAAK;AAAA,EAAA;AAGhB,QAAA,eAAe,CAAC,UAA4C;AACzD,WAAA,OAAO,SAAS,EAAE,CAAC,KAAK,GAAG,OAAO;AACzC,WAAO,QAAQ,KAAK;AAAA,EAAA;AAGhB,QAAA,YAAY,CAAC,UAA4C;AAC7D,WAAO,QAAQ,KAAK;AAAA,EAAA;AAGf,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAKM,MAAA,8BAA8B,CAACG,YAA8C;AAC1E,SAAA;AAAA,IACL,iBAAiB;AAAA,MACf,QAAQA,SAAQ,gBAAgB;AAAA,MAChC,aAAaA,SAAQ,qBAAqB;AAAA,IAC5C;AAAA,EAAA;AAEJ;AAKM,MAAA,iBAAiB,CACrBA,SACA;AAAA,EACE;AAAA,EACA;AACF,MAIG;AACI,SAAA,OACL,SACA,SACG;AAEH,qBAAiB,YAAY;AAC3B,YAAM,cAAc,EAAE,QAAAA,SAAQ,OAA+B,CAAA;AAC7D,eAAS,GAAG,gBAAgB,QAAQ,IAAI,CAAC;AAAA,IAAA,CAC1C;AAEG,QAAA;AACJ,UAAM,SAAS;AAER,WAAA,QAAQ,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,iBAAW,QAAQ,OAAO;AAClB,cAAA,OAAO,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,EAAE,KAAK,GAAG;AAC7C,cAAM,UAAU,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AAI5C,YAAA,QAAQ,uCACR,QAAQ,6CACR,SAAS,WAAW,cAAc,KAClC,SAAS,WAAW,iBAAiB,GACrC;AACA,4BAAkB,KAAK;AAAA,QAAA,WAGhB,KAAK,SAAS,SAAS;AACvB,UAAAA,QAAA,cAAc,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,2BAA2B,GAAG,MAAM;AAAA,QAAA,WAC7E,KAAK,SAAS,WAAW;AAC3B,UAAAA,QAAA;AAAA,YACL,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,gCAAgC;AAAA,YAC7D;AAAA,UAAA;AAAA,QACF,WACS,KAAK,SAAS,YAAY;AAC5B,UAAAA,QAAA,cAAc,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,4BAA4B,GAAG,MAAM;AAAA,QACzF;AAAA,MACF;AAAA,IAAA,CACD;AAGD,QAAI,oBAAoB,SAAS;AAC/B,MAAAA,QAAO,cAAc,MAAM,IAAI,mDAAmD,GAAG,MAAM;AAAA,IAAA,WAClF,oBAAoB,WAAW;AACjC,MAAAA,QAAA;AAAA,QACL,MAAM,IAAI,wDAAwD;AAAA,QAClE;AAAA,MAAA;AAAA,IACF,WACS,oBAAoB,YAAY;AAClC,MAAAA,QAAA;AAAA,QACL,IAAI,kCAAkC,qDAAqD;AAAA,MAAA;AAAA,IAE/F;AAEA,UAAM,YAAY,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IAAA;AAIF,qBAAiB,MAAM,cAAc,EAAE,QAAAA,SAAQ,OAAA,CAA+B,CAAC;AAE/E,QAAI,WAAW;AACb,cAAQ,eAAe,MAAM,QAAQ,OAAO,QAAQ,YAAY;AAAA,IAClE;AAEA,WAAO,KAAK,OAAO;AAAA,EAAA;AAEvB;AAEM,MAAA,yBAAyB,CAC7BA,SACA;AAAA,EACE;AAAA,EACA;AACF,MAIG;AACI,SAAA,OACL,SACA,SACG;AAEH,qBAAiB,YAAY;AAC3B,YAAM,cAAc,EAAE,QAAAA,SAAQ,OAA+B,CAAA;AAC7D,eAAS,GAAG,gBAAgB,QAAQ,IAAI,CAAC;AAAA,IAAA,CAC1C;AAEO,YAAA;AAAA,MACN;AAAA,IAAA;AAEF,UAAM,YAAY,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IAAA;AAGF,QAAI,WAAW;AACb,cAAQ,SAAS;AAAA,IACnB;AAGA,qBAAiB,MAAM,cAAc,EAAE,QAAAA,SAAQ,OAAA,CAA+B,CAAC;AAC/E,WAAO,KAAK,OAAO;AAAA,EAAA;AAEvB;AAEM,MAAA,kBAAkB,CACtB,MACA,aACG;AACH,MAAI,KAAK,SAAS,SAAS,QAAQ,GAAG;AAC7B,WAAA;AAAA,EACT;AACA,MAAI,KAAK,MAAM;AACb,WAAO,CAAC,KAAK,KAAK,SAAS,QAAQ;AAAA,EACrC;AAEO,SAAA;AACT;AAOM,MAAA,0BAA0B,CAAC,SAA6D;AAC5F,QAAM,kBAA6C;AAAA,IACjD,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAIX,MAAK,KAAK,QAAQ,CAAC,KAAK,KAAK,SAAS,SAAS,KAAM,KAAK,SAAS,SAAS,SAAS,GAAG;AACtF,oBAAgB,UAAU;EAC5B;AAEA,QAAM,gBACJ;AAAA,IACE,UAAU;AAAA,IACV,QAAQ,CAAC,gBAAgB,MAAM,OAAO;AAAA,IACtC,eAAe;AAAA,MACb,SAAS,CAAC,gBAAgB,MAAM,QAAQ;AAAA,MACxC,WAAW,CAAC,gBAAgB,MAAM,QAAQ;AAAA,IAC5C;AAAA,EAAA;AAGG,SAAA;AACT;"}
@@ -43,7 +43,7 @@ declare const runAction: (name: string, action: (...args: any[]) => Promise<void
43
43
  * ```
44
44
  */
45
45
  declare const notifyExperimentalCommand: (name: string, { force }?: {
46
- force?: boolean | undefined;
46
+ force?: boolean;
47
47
  }) => Promise<void>;
48
48
  export { exitWith, assertUrlHasProtocol, ifOptions, readableBytes, runAction, assertCwdContainsStrapiProject, notifyExperimentalCommand, };
49
49
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/helpers.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC;;GAEG;AACH,QAAA,MAAM,aAAa,UAAW,MAAM,iDAUnC,CAAC;AAEF,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,QAAA,MAAM,QAAQ,SAAU,MAAM,YAAY,MAAM,GAAG,MAAM,EAAE,YAAW,eAAe,SAkBpF,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,oBAAoB,QAAS,GAAG,aAAa,MAAM,GAAG,MAAM,EAAE,SAwBnE,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACzE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D;;GAEG;AACH,QAAA,MAAM,SAAS,sBACM,iBAAiB,kBACrB,aAAa,qBACV,gBAAgB,eAEX,OAAO,kBAQ/B,CAAC;AAEF,QAAA,MAAM,8BAA8B,SAAU,MAAM,SAqBnD,CAAC;AAEF,QAAA,MAAM,SAAS,SACN,MAAM,oBAAoB,GAAG,EAAE,KAAK,QAAQ,IAAI,CAAC,eAC9C,OAAO,EAAE,SAWlB,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,yBAAyB,SAAgB,MAAM;;mBA4BpD,CAAC;AAEF,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,SAAS,EACT,8BAA8B,EAC9B,yBAAyB,GAC1B,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/helpers.ts"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC;;GAEG;AACH,QAAA,MAAM,aAAa,UAAW,MAAM,iDAUnC,CAAC;AAEF,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,QAAA,MAAM,QAAQ,SAAU,MAAM,YAAY,MAAM,GAAG,MAAM,EAAE,YAAW,eAAe,SAkBpF,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,oBAAoB,QAAS,GAAG,aAAa,MAAM,GAAG,MAAM,EAAE,SAwBnE,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACzE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5D;;GAEG;AACH,QAAA,MAAM,SAAS,sBACM,iBAAiB,kBACrB,aAAa,qBACV,gBAAgB,eAEX,OAAO,kBAQ/B,CAAC;AAEF,QAAA,MAAM,8BAA8B,SAAU,MAAM,SAqBnD,CAAC;AAEF,QAAA,MAAM,SAAS,SACN,MAAM,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,QAAQ,IAAI,CAAC,eAC9C,OAAO,EAAE,SAWlB,CAAC;AAEJ;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,yBAAyB,SAAgB,MAAM,cAAa;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,kBA4BpF,CAAC;AAEF,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,SAAS,EACT,8BAA8B,EAC9B,yBAAyB,GAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pkg.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/pkg.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCrB,CAAC;AAEH;;;;GAIG;AACH,QAAA,MAAM,OAAO;SAAkC,MAAM;YAAU,MAAM;MAAK,QAAQ,MAAM,CAcvF,CAAC;AAEF,KAAK,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEzD;;;GAGG;AACH,QAAA,MAAM,WAAW;SAA0B,MAAM;MAAK,QAAQ,WAAW,CA+CxE,CAAC;AAEF,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"pkg.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/pkg.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCrB,CAAC;AAEH;;;;GAIG;AACH,QAAA,MAAM,OAAO,oBAA2B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAG,QAAQ,MAAM,CAcvF,CAAC;AAEF,KAAK,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEzD;;;GAGG;AACH,QAAA,MAAM,WAAW,YAAmB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAG,QAAQ,WAAW,CA+CxE,CAAC;AAEF,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/tsconfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,UAAU,QAAQ;IAChB,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,QAAA,MAAM,YAAY;SAKX,MAAM;UACL,MAAM;YACJ,MAAM;MACZ,QAAQ,GAAG,SAiBd,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/tsconfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,UAAU,QAAQ;IAChB,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,QAAA,MAAM,YAAY,2BAIf;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,QAAQ,GAAG,SAiBd,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { StrapiMonorepo } from './monorepo';
2
2
  declare const getMonorepoAliases: ({ monorepo }: {
3
- monorepo?: StrapiMonorepo | undefined;
3
+ monorepo?: StrapiMonorepo;
4
4
  }) => {
5
5
  [k: string]: string;
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../../src/node/core/aliases.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2B5C,QAAA,MAAM,kBAAkB;;;;CAUvB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../../src/node/core/aliases.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2B5C,QAAA,MAAM,kBAAkB,iBAAkB;IAAE,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE;;CAUtE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/node/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,QAAA,MAAM,aAAa,uBACN,MAAM,EAAE,OACd,YAAY,iCAYlB,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/node/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,QAAA,MAAM,aAAa,uBACN,MAAM,EAAE,OACd,YAAY,KAChB,QAAQ,OAAO,GAAG,SAAS,CAW7B,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,WAAW;IAC5D;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;IAChC;;;OAGG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,UAAU,sBAAsB,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,UAAU;IACrE,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AASD,QAAA,MAAM,kBAAkB,kJAsGvB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,WAAW;IAC5D;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;IAChC;;;OAGG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,UAAU,sBAAsB,CAAC,QAAQ,GAAG,OAAO,CAAE,SAAQ,UAAU;IACrE,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AASD,QAAA,MAAM,kBAAkB,8EAMrB,uBAAuB,QAAQ,CAAC,KAAG,QAAQ,aAAa,QAAQ,CAAC,CAgGnE,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/strapi",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.0.0-beta.4",
4
4
  "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
5
5
  "keywords": [
6
6
  "strapi",
@@ -109,25 +109,25 @@
109
109
  },
110
110
  "dependencies": {
111
111
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
112
- "@strapi/admin": "5.0.0-beta.2",
113
- "@strapi/content-releases": "5.0.0-beta.2",
114
- "@strapi/core": "5.0.0-beta.2",
115
- "@strapi/data-transfer": "5.0.0-beta.2",
116
- "@strapi/database": "5.0.0-beta.2",
117
- "@strapi/generate-new": "5.0.0-beta.2",
118
- "@strapi/generators": "5.0.0-beta.2",
119
- "@strapi/logger": "5.0.0-beta.2",
120
- "@strapi/pack-up": "5.0.0-beta.2",
121
- "@strapi/permissions": "5.0.0-beta.2",
122
- "@strapi/plugin-content-manager": "5.0.0-beta.2",
123
- "@strapi/plugin-content-type-builder": "5.0.0-beta.2",
124
- "@strapi/plugin-email": "5.0.0-beta.2",
125
- "@strapi/plugin-i18n": "5.0.0-beta.2",
126
- "@strapi/plugin-upload": "5.0.0-beta.2",
127
- "@strapi/review-workflows": "5.0.0-beta.2",
128
- "@strapi/types": "5.0.0-beta.2",
129
- "@strapi/typescript-utils": "5.0.0-beta.2",
130
- "@strapi/utils": "5.0.0-beta.2",
112
+ "@strapi/admin": "5.0.0-beta.4",
113
+ "@strapi/content-releases": "5.0.0-beta.4",
114
+ "@strapi/core": "5.0.0-beta.4",
115
+ "@strapi/data-transfer": "5.0.0-beta.4",
116
+ "@strapi/database": "5.0.0-beta.4",
117
+ "@strapi/generate-new": "5.0.0-beta.4",
118
+ "@strapi/generators": "5.0.0-beta.4",
119
+ "@strapi/logger": "5.0.0-beta.4",
120
+ "@strapi/pack-up": "5.0.0",
121
+ "@strapi/permissions": "5.0.0-beta.4",
122
+ "@strapi/plugin-content-manager": "5.0.0-beta.4",
123
+ "@strapi/plugin-content-type-builder": "5.0.0-beta.4",
124
+ "@strapi/plugin-email": "5.0.0-beta.4",
125
+ "@strapi/plugin-i18n": "5.0.0-beta.4",
126
+ "@strapi/plugin-upload": "5.0.0-beta.4",
127
+ "@strapi/review-workflows": "5.0.0-beta.4",
128
+ "@strapi/types": "5.0.0-beta.4",
129
+ "@strapi/typescript-utils": "5.0.0-beta.4",
130
+ "@strapi/utils": "5.0.0-beta.4",
131
131
  "@types/nodemon": "1.19.6",
132
132
  "@vitejs/plugin-react-swc": "3.6.0",
133
133
  "boxen": "5.1.2",
@@ -180,17 +180,16 @@
180
180
  "yup": "0.32.9"
181
181
  },
182
182
  "devDependencies": {
183
- "@strapi/pack-up": "workspace:*",
184
183
  "@types/find-root": "1.1.4",
185
184
  "@types/jest": "29.5.2",
186
185
  "@types/lodash": "^4.14.191",
187
186
  "@types/node": "18.19.24",
188
187
  "@types/webpack-bundle-analyzer": "4.7.0",
189
188
  "@types/webpack-hot-middleware": "2.25.9",
190
- "eslint-config-custom": "5.0.0-beta.2",
189
+ "eslint-config-custom": "5.0.0-beta.4",
191
190
  "react": "^18.2.0",
192
191
  "react-dom": "^18.2.0",
193
- "tsconfig": "5.0.0-beta.2"
192
+ "tsconfig": "5.0.0-beta.4"
194
193
  },
195
194
  "peerDependencies": {
196
195
  "react": "^17.0.0 || ^18.0.0",
@@ -202,5 +201,5 @@
202
201
  "node": ">=18.0.0 <=20.x.x",
203
202
  "npm": ">=6.0.0"
204
203
  },
205
- "gitHead": "e39426bd12ead73ca35d3d9bbf6dc71b5e8ac354"
204
+ "gitHead": "18019758d6ccd252f2f00bcc32c191402af2e60a"
206
205
  }