@strapi/strapi 5.40.0 → 5.41.1

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 (46) hide show
  1. package/dist/cli/commands/admin/create-user.d.ts.map +1 -1
  2. package/dist/cli/commands/admin/reset-user-password.d.ts.map +1 -1
  3. package/dist/cli/commands/import/command.d.ts.map +1 -1
  4. package/dist/cli/commands/transfer/command.d.ts.map +1 -1
  5. package/dist/cli/utils/commander.d.ts.map +1 -1
  6. package/dist/cli/utils/get-inquirer.d.ts +5 -0
  7. package/dist/cli/utils/get-inquirer.d.ts.map +1 -0
  8. package/dist/cli/utils/helpers.d.ts.map +1 -1
  9. package/dist/node/core/dependencies.d.ts.map +1 -1
  10. package/dist/package.json.js +1 -1
  11. package/dist/package.json.mjs +1 -1
  12. package/dist/src/cli/commands/admin/create-user.js +3 -2
  13. package/dist/src/cli/commands/admin/create-user.js.map +1 -1
  14. package/dist/src/cli/commands/admin/create-user.mjs +3 -2
  15. package/dist/src/cli/commands/admin/create-user.mjs.map +1 -1
  16. package/dist/src/cli/commands/admin/reset-user-password.js +2 -1
  17. package/dist/src/cli/commands/admin/reset-user-password.js.map +1 -1
  18. package/dist/src/cli/commands/admin/reset-user-password.mjs +2 -1
  19. package/dist/src/cli/commands/admin/reset-user-password.mjs.map +1 -1
  20. package/dist/src/cli/commands/import/command.js +2 -1
  21. package/dist/src/cli/commands/import/command.js.map +1 -1
  22. package/dist/src/cli/commands/import/command.mjs +2 -1
  23. package/dist/src/cli/commands/import/command.mjs.map +1 -1
  24. package/dist/src/cli/commands/transfer/command.js +6 -1
  25. package/dist/src/cli/commands/transfer/command.js.map +1 -1
  26. package/dist/src/cli/commands/transfer/command.mjs +6 -1
  27. package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
  28. package/dist/src/cli/utils/commander.js +3 -1
  29. package/dist/src/cli/utils/commander.js.map +1 -1
  30. package/dist/src/cli/utils/commander.mjs +3 -1
  31. package/dist/src/cli/utils/commander.mjs.map +1 -1
  32. package/dist/src/cli/utils/get-inquirer.js +10 -0
  33. package/dist/src/cli/utils/get-inquirer.js.map +1 -0
  34. package/dist/src/cli/utils/get-inquirer.mjs +8 -0
  35. package/dist/src/cli/utils/get-inquirer.mjs.map +1 -0
  36. package/dist/src/cli/utils/helpers.js +0 -1
  37. package/dist/src/cli/utils/helpers.js.map +1 -1
  38. package/dist/src/cli/utils/helpers.mjs +0 -1
  39. package/dist/src/cli/utils/helpers.mjs.map +1 -1
  40. package/dist/src/node/core/dependencies.js +1 -1
  41. package/dist/src/node/core/dependencies.js.map +1 -1
  42. package/dist/src/node/core/dependencies.mjs +1 -1
  43. package/dist/src/node/core/dependencies.mjs.map +1 -1
  44. package/dist/test/mocks/inquirer.d.ts +11 -0
  45. package/dist/test/mocks/inquirer.d.ts.map +1 -0
  46. package/package.json +25 -25
@@ -1 +1 @@
1
- {"version":3,"file":"create-user.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/admin/create-user.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA8FD;;GAEG;AACH,QAAA,MAAM,MAAM,gBAAsB,UAAU,kBA8B3C,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,aASd,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"create-user.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/admin/create-user.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA8FD;;GAEG;AACH,QAAA,MAAM,MAAM,gBAAsB,UAAU,kBA+B3C,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,aASd,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reset-user-password.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4BD;;GAEG;AACH,QAAA,MAAM,MAAM,gBAAsB,UAAU,kBAmB3C,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,aAOd,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"reset-user-password.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/admin/reset-user-password.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4BD;;GAEG;AACH,QAAA,MAAM,MAAM,gBAAsB,UAAU,kBAoB3C,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,aAOd,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/import/command.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,QAAA,MAAM,OAAO,mCAgFZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/import/command.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,QAAA,MAAM,OAAO,mCAiFZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/transfer/command.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,QAAA,MAAM,OAAO,mCAwOZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/transfer/command.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,QAAA,MAAM,OAAO,mCA6OZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -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,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"}
1
+ {"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/commander.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAA8B,MAAM,EAAE,MAAM,WAAW,CAAC;AAMxE;;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,kBA+BtD,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,iBAmB5E,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"}
@@ -0,0 +1,5 @@
1
+ type InquirerAPI = typeof import('inquirer').default;
2
+ /** Loads Inquirer v9 via dynamic import (CJS-safe) and caches the default export. */
3
+ export declare function getInquirer(): Promise<InquirerAPI>;
4
+ export {};
5
+ //# sourceMappingURL=get-inquirer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-inquirer.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/get-inquirer.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,cAAc,UAAU,EAAE,OAAO,CAAC;AAIrD,qFAAqF;AACrF,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAGxD"}
@@ -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,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
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/helpers.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC;;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,kBA6BpF,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":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/node/core/dependencies.ts"],"names":[],"mappings":"AAMA,OAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAa7C,UAAU,+BAA+B;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB;AAQD;;;;;;;;GAQG;AACH,QAAA,MAAM,yBAAyB,qBAG5B,KAAK,YAAY,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,QAAQ,+BAA+B,CAwIhF,CAAC;AAEF,QAAA,MAAM,SAAS,SAAgB,MAAM,OAAO,MAAM,KAAG,QAAQ,WAAW,GAAG,IAAI,CAQ9E,CAAC;AAkDF,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC;AAChD,YAAY,EAAE,+BAA+B,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/node/core/dependencies.ts"],"names":[],"mappings":"AAMA,OAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAa7C,UAAU,+BAA+B;IACvC,UAAU,EAAE,OAAO,CAAC;CACrB;AAQD;;;;;;;;GAQG;AACH,QAAA,MAAM,yBAAyB,qBAG5B,KAAK,YAAY,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAG,QAAQ,+BAA+B,CAyIhF,CAAC;AAEF,QAAA,MAAM,SAAS,SAAgB,MAAM,OAAO,MAAM,KAAG,QAAQ,WAAW,GAAG,IAAI,CAQ9E,CAAC;AAkDF,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC;AAChD,YAAY,EAAE,+BAA+B,EAAE,WAAW,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.40.0";
3
+ var version = "5.41.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.40.0";
1
+ var version = "5.41.1";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -3,9 +3,9 @@
3
3
  var commander = require('commander');
4
4
  var utils = require('@strapi/utils');
5
5
  var _ = require('lodash');
6
- var inquirer = require('inquirer');
7
6
  var core = require('@strapi/core');
8
7
  var helpers = require('../../utils/helpers.js');
8
+ var getInquirer = require('../../utils/get-inquirer.js');
9
9
 
10
10
  const emailValidator = utils.yup.string().email('Invalid email address').lowercase();
11
11
  const passwordValidator = utils.yup.string().min(8, 'Password must be at least 8 characters long').test('lowercase', 'Password must contain at least one lowercase character', (value)=>{
@@ -26,7 +26,7 @@ const adminCreateSchema = utils.yup.object().shape({
26
26
  });
27
27
  /**
28
28
  * It's not an observable, in reality this is
29
- * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`
29
+ * `ReadOnlyArray<DistinctQuestion<Answers>>`
30
30
  * but then the logic of the validate function needs to change.
31
31
  */ const promptQuestions = [
32
32
  {
@@ -95,6 +95,7 @@ async function createAdmin({ email, password, firstname, lastname }) {
95
95
  */ const action = async (cmdOptions = {})=>{
96
96
  let { email, password, firstname, lastname } = cmdOptions;
97
97
  if (_.isEmpty(email) && _.isEmpty(password) && _.isEmpty(firstname) && _.isEmpty(lastname) && process.stdin.isTTY) {
98
+ const inquirer = await getInquirer.getInquirer();
98
99
  const inquiry = await inquirer.prompt(promptQuestions);
99
100
  if (!inquiry.confirm) {
100
101
  process.exit(0);
@@ -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 .test('lowercase', 'Password must contain at least one lowercase character', (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n })\n .test('uppercase', 'Password must contain at least one uppercase character', (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n })\n .test('number', 'Password must contain at least one number', (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n });\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 */\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":["emailValidator","yup","string","email","lowercase","passwordValidator","min","test","value","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","validEmail","validPassword","createAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","exists","console","error","process","exit","superAdminRole","role","getSuperAdmin","create","isActive","roles","id","registrationToken","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquiry","inquirer","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}
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 type { QuestionCollection } from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n 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 .test('lowercase', 'Password must contain at least one lowercase character', (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n })\n .test('uppercase', 'Password must contain at least one uppercase character', (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n })\n .test('number', 'Password must contain at least one number', (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n });\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<DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\nconst promptQuestions: QuestionCollection<Answers> = [\n {\n type: 'input',\n name: 'email',\n message: 'Admin email?',\n async validate(value: string) {\n const validEmail = await emailValidator.validate(value);\n return validEmail === value || validEmail;\n },\n },\n {\n type: '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 inquirer = await getInquirer();\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":["emailValidator","yup","string","email","lowercase","passwordValidator","min","test","value","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","validEmail","validPassword","createAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","exists","console","error","process","exit","superAdminRole","role","getSuperAdmin","create","isActive","roles","id","registrationToken","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { createCommand } from 'commander';
2
2
  import { yup } from '@strapi/utils';
3
3
  import _ from 'lodash';
4
- import inquirer from 'inquirer';
5
4
  import { compileStrapi, createStrapi } from '@strapi/core';
6
5
  import { runAction } from '../../utils/helpers.mjs';
6
+ import { getInquirer } from '../../utils/get-inquirer.mjs';
7
7
 
8
8
  const emailValidator = yup.string().email('Invalid email address').lowercase();
9
9
  const passwordValidator = yup.string().min(8, 'Password must be at least 8 characters long').test('lowercase', 'Password must contain at least one lowercase character', (value)=>{
@@ -24,7 +24,7 @@ const adminCreateSchema = yup.object().shape({
24
24
  });
25
25
  /**
26
26
  * It's not an observable, in reality this is
27
- * `ReadOnlyArray<inquirer.DistinctQuestion<Answers>>`
27
+ * `ReadOnlyArray<DistinctQuestion<Answers>>`
28
28
  * but then the logic of the validate function needs to change.
29
29
  */ const promptQuestions = [
30
30
  {
@@ -93,6 +93,7 @@ async function createAdmin({ email, password, firstname, lastname }) {
93
93
  */ const action = async (cmdOptions = {})=>{
94
94
  let { email, password, firstname, lastname } = cmdOptions;
95
95
  if (_.isEmpty(email) && _.isEmpty(password) && _.isEmpty(firstname) && _.isEmpty(lastname) && process.stdin.isTTY) {
96
+ const inquirer = await getInquirer();
96
97
  const inquiry = await inquirer.prompt(promptQuestions);
97
98
  if (!inquiry.confirm) {
98
99
  process.exit(0);
@@ -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 .test('lowercase', 'Password must contain at least one lowercase character', (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n })\n .test('uppercase', 'Password must contain at least one uppercase character', (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n })\n .test('number', 'Password must contain at least one number', (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n });\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 */\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":["emailValidator","yup","string","email","lowercase","passwordValidator","min","test","value","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","validEmail","validPassword","createAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","exists","console","error","process","exit","superAdminRole","role","getSuperAdmin","create","isActive","roles","id","registrationToken","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquiry","inquirer","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"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 type { QuestionCollection } from 'inquirer';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport type { StrapiCommand } from '../../types';\n\ninterface CmdOptions {\n email?: string;\n 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 .test('lowercase', 'Password must contain at least one lowercase character', (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n })\n .test('uppercase', 'Password must contain at least one uppercase character', (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n })\n .test('number', 'Password must contain at least one number', (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n });\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<DistinctQuestion<Answers>>`\n * but then the logic of the validate function needs to change.\n */\nconst promptQuestions: QuestionCollection<Answers> = [\n {\n type: 'input',\n name: 'email',\n message: 'Admin email?',\n async validate(value: string) {\n const validEmail = await emailValidator.validate(value);\n return validEmail === value || validEmail;\n },\n },\n {\n type: '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 inquirer = await getInquirer();\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":["emailValidator","yup","string","email","lowercase","passwordValidator","min","test","value","adminCreateSchema","object","shape","password","firstname","trim","required","lastname","promptQuestions","type","name","message","validate","validEmail","validPassword","createAdmin","appContext","compileStrapi","app","createStrapi","load","user","admin","services","exists","console","error","process","exit","superAdminRole","role","getSuperAdmin","create","isActive","roles","id","registrationToken","log","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","err","ValidationError","errors","command","createCommand","alias","description","option","runAction"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var _ = require('lodash');
4
- var inquirer = require('inquirer');
5
4
  var commander = require('commander');
6
5
  var core = require('@strapi/core');
7
6
  var helpers = require('../../utils/helpers.js');
7
+ var getInquirer = require('../../utils/get-inquirer.js');
8
8
 
9
9
  const promptQuestions = [
10
10
  {
@@ -35,6 +35,7 @@ async function changePassword({ email, password }) {
35
35
  */ const action = async (cmdOptions = {})=>{
36
36
  const { email, password } = cmdOptions;
37
37
  if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {
38
+ const inquirer = await getInquirer.getInquirer();
38
39
  const inquiry = await inquirer.prompt(promptQuestions);
39
40
  if (!inquiry.confirm) {
40
41
  process.exit(0);
@@ -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":["promptQuestions","type","name","message","changePassword","email","password","appContext","compileStrapi","app","createStrapi","load","admin","services","user","resetPasswordByEmail","console","log","process","exit","action","cmdOptions","_","isEmpty","stdin","isTTY","inquiry","inquirer","prompt","confirm","error","command","createCommand","alias","description","option","runAction"],"mappings":";;;;;;;;AAmBA,MAAMA,eAAAA,GAAqE;AACzE,IAAA;QAAEC,IAAAA,EAAM,OAAA;QAASC,IAAAA,EAAM,OAAA;QAASC,OAAAA,EAAS;AAAc,KAAA;AACvD,IAAA;QAAEF,IAAAA,EAAM,UAAA;QAAYC,IAAAA,EAAM,UAAA;QAAYC,OAAAA,EAAS;AAAgB,KAAA;AAC/D,IAAA;QACEF,IAAAA,EAAM,SAAA;QACNC,IAAAA,EAAM,SAAA;QACNC,OAAAA,EAAS;AACX;AACD,CAAA;AAED,eAAeC,cAAAA,CAAe,EAAEC,KAAK,EAAEC,QAAQ,EAAc,EAAA;AAC3D,IAAA,MAAMC,aAAa,MAAMC,kBAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,iBAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMF,GAAAA,CAAIG,KAAK,CAAEC,QAAQ,CAACC,IAAI,CAACC,oBAAoB,CAACV,KAAAA,EAAOC,QAAAA,CAAAA;AAE3DU,IAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAA;AAChDC,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;AAEA;;AAEC,IACD,MAAMC,MAAAA,GAAS,OAAOC,UAAAA,GAAyB,EAAE,GAAA;AAC/C,IAAA,MAAM,EAAEhB,KAAK,EAAEC,QAAQ,EAAE,GAAGe,UAAAA;AAE5B,IAAA,IAAIC,CAAAA,CAAEC,OAAO,CAAClB,KAAAA,CAAAA,IAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,IAAaY,OAAAA,CAAQM,KAAK,CAACC,KAAK,EAAE;AAClE,QAAA,MAAMC,OAAAA,GAAU,MAAMC,QAAAA,CAASC,MAAM,CAAC5B,eAAAA,CAAAA;QAEtC,IAAI,CAAC0B,OAAAA,CAAQG,OAAO,EAAE;AACpBX,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AAEA,QAAA,OAAOf,cAAAA,CAAesB,OAAAA,CAAAA;AACxB,IAAA;AAEA,IAAA,IAAIJ,EAAEC,OAAO,CAAClB,UAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,EAAW;AAC3CU,QAAAA,OAAAA,CAAQc,KAAK,CAAC,gDAAA,CAAA;AACdZ,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AAEA,IAAA,OAAOf,cAAAA,CAAe;AAAEC,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA,CAAA;AAC1C;AAEA;;AAEC,UACKyB,OAAAA,GAAyB,IAAA;AAC7B,IAAA,OAAOC,wBAAc,2BAAA,CAAA,CAClBC,KAAK,CAAC,sBAAA,CAAA,CACNC,WAAW,CAAC,gCAAA,CAAA,CACZC,MAAM,CAAC,qBAAA,EAAuB,gBAAA,CAAA,CAC9BA,MAAM,CAAC,2BAAA,EAA6B,6BACpCf,MAAM,CAACgB,kBAAU,2BAAA,EAA6BhB,MAAAA,CAAAA,CAAAA;AACnD;;;;;"}
1
+ {"version":3,"file":"reset-user-password.js","sources":["../../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { DistinctQuestion } from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\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<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 inquirer = await getInquirer();\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":["promptQuestions","type","name","message","changePassword","email","password","appContext","compileStrapi","app","createStrapi","load","admin","services","user","resetPasswordByEmail","console","log","process","exit","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","error","command","createCommand","alias","description","option","runAction"],"mappings":";;;;;;;;AAoBA,MAAMA,eAAAA,GAA4D;AAChE,IAAA;QAAEC,IAAAA,EAAM,OAAA;QAASC,IAAAA,EAAM,OAAA;QAASC,OAAAA,EAAS;AAAc,KAAA;AACvD,IAAA;QAAEF,IAAAA,EAAM,UAAA;QAAYC,IAAAA,EAAM,UAAA;QAAYC,OAAAA,EAAS;AAAgB,KAAA;AAC/D,IAAA;QACEF,IAAAA,EAAM,SAAA;QACNC,IAAAA,EAAM,SAAA;QACNC,OAAAA,EAAS;AACX;AACD,CAAA;AAED,eAAeC,cAAAA,CAAe,EAAEC,KAAK,EAAEC,QAAQ,EAAc,EAAA;AAC3D,IAAA,MAAMC,aAAa,MAAMC,kBAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,iBAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMF,GAAAA,CAAIG,KAAK,CAAEC,QAAQ,CAACC,IAAI,CAACC,oBAAoB,CAACV,KAAAA,EAAOC,QAAAA,CAAAA;AAE3DU,IAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAA;AAChDC,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;AAEA;;AAEC,IACD,MAAMC,MAAAA,GAAS,OAAOC,UAAAA,GAAyB,EAAE,GAAA;AAC/C,IAAA,MAAM,EAAEhB,KAAK,EAAEC,QAAQ,EAAE,GAAGe,UAAAA;AAE5B,IAAA,IAAIC,CAAAA,CAAEC,OAAO,CAAClB,KAAAA,CAAAA,IAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,IAAaY,OAAAA,CAAQM,KAAK,CAACC,KAAK,EAAE;AAClE,QAAA,MAAMC,WAAW,MAAMC,uBAAAA,EAAAA;AACvB,QAAA,MAAMC,OAAAA,GAAU,MAAMF,QAAAA,CAASG,MAAM,CAAC7B,eAAAA,CAAAA;QAEtC,IAAI,CAAC4B,OAAAA,CAAQE,OAAO,EAAE;AACpBZ,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AAEA,QAAA,OAAOf,cAAAA,CAAewB,OAAAA,CAAAA;AACxB,IAAA;AAEA,IAAA,IAAIN,EAAEC,OAAO,CAAClB,UAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,EAAW;AAC3CU,QAAAA,OAAAA,CAAQe,KAAK,CAAC,gDAAA,CAAA;AACdb,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AAEA,IAAA,OAAOf,cAAAA,CAAe;AAAEC,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA,CAAA;AAC1C;AAEA;;AAEC,UACK0B,OAAAA,GAAyB,IAAA;AAC7B,IAAA,OAAOC,wBAAc,2BAAA,CAAA,CAClBC,KAAK,CAAC,sBAAA,CAAA,CACNC,WAAW,CAAC,gCAAA,CAAA,CACZC,MAAM,CAAC,qBAAA,EAAuB,gBAAA,CAAA,CAC9BA,MAAM,CAAC,2BAAA,EAA6B,6BACpChB,MAAM,CAACiB,kBAAU,2BAAA,EAA6BjB,MAAAA,CAAAA,CAAAA;AACnD;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import _ from 'lodash';
2
- import inquirer from 'inquirer';
3
2
  import { createCommand } from 'commander';
4
3
  import { compileStrapi, createStrapi } from '@strapi/core';
5
4
  import { runAction } from '../../utils/helpers.mjs';
5
+ import { getInquirer } from '../../utils/get-inquirer.mjs';
6
6
 
7
7
  const promptQuestions = [
8
8
  {
@@ -33,6 +33,7 @@ async function changePassword({ email, password }) {
33
33
  */ const action = async (cmdOptions = {})=>{
34
34
  const { email, password } = cmdOptions;
35
35
  if (_.isEmpty(email) && _.isEmpty(password) && process.stdin.isTTY) {
36
+ const inquirer = await getInquirer();
36
37
  const inquiry = await inquirer.prompt(promptQuestions);
37
38
  if (!inquiry.confirm) {
38
39
  process.exit(0);
@@ -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":["promptQuestions","type","name","message","changePassword","email","password","appContext","compileStrapi","app","createStrapi","load","admin","services","user","resetPasswordByEmail","console","log","process","exit","action","cmdOptions","_","isEmpty","stdin","isTTY","inquiry","inquirer","prompt","confirm","error","command","createCommand","alias","description","option","runAction"],"mappings":";;;;;;AAmBA,MAAMA,eAAAA,GAAqE;AACzE,IAAA;QAAEC,IAAAA,EAAM,OAAA;QAASC,IAAAA,EAAM,OAAA;QAASC,OAAAA,EAAS;AAAc,KAAA;AACvD,IAAA;QAAEF,IAAAA,EAAM,UAAA;QAAYC,IAAAA,EAAM,UAAA;QAAYC,OAAAA,EAAS;AAAgB,KAAA;AAC/D,IAAA;QACEF,IAAAA,EAAM,SAAA;QACNC,IAAAA,EAAM,SAAA;QACNC,OAAAA,EAAS;AACX;AACD,CAAA;AAED,eAAeC,cAAAA,CAAe,EAAEC,KAAK,EAAEC,QAAQ,EAAc,EAAA;AAC3D,IAAA,MAAMC,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,YAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMF,GAAAA,CAAIG,KAAK,CAAEC,QAAQ,CAACC,IAAI,CAACC,oBAAoB,CAACV,KAAAA,EAAOC,QAAAA,CAAAA;AAE3DU,IAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAA;AAChDC,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;AAEA;;AAEC,IACD,MAAMC,MAAAA,GAAS,OAAOC,UAAAA,GAAyB,EAAE,GAAA;AAC/C,IAAA,MAAM,EAAEhB,KAAK,EAAEC,QAAQ,EAAE,GAAGe,UAAAA;AAE5B,IAAA,IAAIC,CAAAA,CAAEC,OAAO,CAAClB,KAAAA,CAAAA,IAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,IAAaY,OAAAA,CAAQM,KAAK,CAACC,KAAK,EAAE;AAClE,QAAA,MAAMC,OAAAA,GAAU,MAAMC,QAAAA,CAASC,MAAM,CAAC5B,eAAAA,CAAAA;QAEtC,IAAI,CAAC0B,OAAAA,CAAQG,OAAO,EAAE;AACpBX,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AAEA,QAAA,OAAOf,cAAAA,CAAesB,OAAAA,CAAAA;AACxB,IAAA;AAEA,IAAA,IAAIJ,EAAEC,OAAO,CAAClB,UAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,EAAW;AAC3CU,QAAAA,OAAAA,CAAQc,KAAK,CAAC,gDAAA,CAAA;AACdZ,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AAEA,IAAA,OAAOf,cAAAA,CAAe;AAAEC,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA,CAAA;AAC1C;AAEA;;AAEC,UACKyB,OAAAA,GAAyB,IAAA;AAC7B,IAAA,OAAOC,cAAc,2BAAA,CAAA,CAClBC,KAAK,CAAC,sBAAA,CAAA,CACNC,WAAW,CAAC,gCAAA,CAAA,CACZC,MAAM,CAAC,qBAAA,EAAuB,gBAAA,CAAA,CAC9BA,MAAM,CAAC,2BAAA,EAA6B,6BACpCf,MAAM,CAACgB,UAAU,2BAAA,EAA6BhB,MAAAA,CAAAA,CAAAA;AACnD;;;;"}
1
+ {"version":3,"file":"reset-user-password.mjs","sources":["../../../../../src/cli/commands/admin/reset-user-password.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { DistinctQuestion } from 'inquirer';\nimport { createCommand } from 'commander';\nimport { createStrapi, compileStrapi } from '@strapi/core';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\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<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 inquirer = await getInquirer();\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":["promptQuestions","type","name","message","changePassword","email","password","appContext","compileStrapi","app","createStrapi","load","admin","services","user","resetPasswordByEmail","console","log","process","exit","action","cmdOptions","_","isEmpty","stdin","isTTY","inquirer","getInquirer","inquiry","prompt","confirm","error","command","createCommand","alias","description","option","runAction"],"mappings":";;;;;;AAoBA,MAAMA,eAAAA,GAA4D;AAChE,IAAA;QAAEC,IAAAA,EAAM,OAAA;QAASC,IAAAA,EAAM,OAAA;QAASC,OAAAA,EAAS;AAAc,KAAA;AACvD,IAAA;QAAEF,IAAAA,EAAM,UAAA;QAAYC,IAAAA,EAAM,UAAA;QAAYC,OAAAA,EAAS;AAAgB,KAAA;AAC/D,IAAA;QACEF,IAAAA,EAAM,SAAA;QACNC,IAAAA,EAAM,SAAA;QACNC,OAAAA,EAAS;AACX;AACD,CAAA;AAED,eAAeC,cAAAA,CAAe,EAAEC,KAAK,EAAEC,QAAQ,EAAc,EAAA;AAC3D,IAAA,MAAMC,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMC,GAAAA,GAAM,MAAMC,YAAAA,CAAaH,UAAAA,CAAAA,CAAYI,IAAI,EAAA;IAE/C,MAAMF,GAAAA,CAAIG,KAAK,CAAEC,QAAQ,CAACC,IAAI,CAACC,oBAAoB,CAACV,KAAAA,EAAOC,QAAAA,CAAAA;AAE3DU,IAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAA;AAChDC,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;AAEA;;AAEC,IACD,MAAMC,MAAAA,GAAS,OAAOC,UAAAA,GAAyB,EAAE,GAAA;AAC/C,IAAA,MAAM,EAAEhB,KAAK,EAAEC,QAAQ,EAAE,GAAGe,UAAAA;AAE5B,IAAA,IAAIC,CAAAA,CAAEC,OAAO,CAAClB,KAAAA,CAAAA,IAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,IAAaY,OAAAA,CAAQM,KAAK,CAACC,KAAK,EAAE;AAClE,QAAA,MAAMC,WAAW,MAAMC,WAAAA,EAAAA;AACvB,QAAA,MAAMC,OAAAA,GAAU,MAAMF,QAAAA,CAASG,MAAM,CAAC7B,eAAAA,CAAAA;QAEtC,IAAI,CAAC4B,OAAAA,CAAQE,OAAO,EAAE;AACpBZ,YAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,QAAA;AAEA,QAAA,OAAOf,cAAAA,CAAewB,OAAAA,CAAAA;AACxB,IAAA;AAEA,IAAA,IAAIN,EAAEC,OAAO,CAAClB,UAAUiB,CAAAA,CAAEC,OAAO,CAACjB,QAAAA,CAAAA,EAAW;AAC3CU,QAAAA,OAAAA,CAAQe,KAAK,CAAC,gDAAA,CAAA;AACdb,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AAEA,IAAA,OAAOf,cAAAA,CAAe;AAAEC,QAAAA,KAAAA;AAAOC,QAAAA;AAAS,KAAA,CAAA;AAC1C;AAEA;;AAEC,UACK0B,OAAAA,GAAyB,IAAA;AAC7B,IAAA,OAAOC,cAAc,2BAAA,CAAA,CAClBC,KAAK,CAAC,sBAAA,CAAA,CACNC,WAAW,CAAC,gCAAA,CAAA,CACZC,MAAM,CAAC,qBAAA,EAAuB,gBAAA,CAAA,CAC9BA,MAAM,CAAC,2BAAA,EAA6B,6BACpChB,MAAM,CAACiB,UAAU,2BAAA,EAA6BjB,MAAAA,CAAAA,CAAAA;AACnD;;;;"}
@@ -2,10 +2,10 @@
2
2
 
3
3
  var path = require('path');
4
4
  var commander = require('commander');
5
- var inquirer = require('inquirer');
6
5
  var dataTransfer = require('../../utils/data-transfer.js');
7
6
  var commander$1 = require('../../utils/commander.js');
8
7
  var helpers = require('../../utils/helpers.js');
8
+ var getInquirer = require('../../utils/get-inquirer.js');
9
9
  var action = require('./action.js');
10
10
 
11
11
  /**
@@ -17,6 +17,7 @@ var action = require('./action.js');
17
17
  // check extension to guess if we should prompt for key
18
18
  if (ext === '.enc') {
19
19
  if (!opts.key) {
20
+ const inquirer = await getInquirer.getInquirer();
20
21
  const answers = await inquirer.prompt([
21
22
  {
22
23
  type: 'password',
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import path from 'path';\nimport { createCommand, Option } from 'commander';\nimport inquirer from 'inquirer';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path and filename for the Strapi export file you want to import'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n const { extname, parse } = path;\n\n let file = opts.file;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","answers","inquirer","prompt","type","message","name","length","exitWith","parse","decrypt","decompress","getCommanderConfirmMessage","failMessage","action"],"mappings":";;;;;;;;;;AAaA;;AAEC,UACKA,OAAAA,GAAU,IAAA;AACd,IAAA,OACEC,wBAAc,QAAA,CAAA,CACXC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,cAAc,CACb,mBAAA,EACA,iEAAA,CAAA,CAEDC,SAAS,CACR,IAAIC,iBACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CAAC,IAAIC,iBAAO,WAAA,EAAa,qBAAA,CAAA,CAAA,CAClCD,SAAS,CAACE,uBAAAA,CAAAA,CACVF,SAAS,CAACG,0BAAAA,CAAAA,CACVH,SAAS,CAACI,uBAAAA,CAAAA,CACVJ,SAAS,CAACK,2BAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,kCAClBD,IAAI,CAAC,aAAa,OAAOE,WAAAA,GAAAA;QACxB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAC7B,QAAA,MAAMC,MAAMC,IAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOJ,KAAKK,IAAI,CAAA,CAAA;;AAGzC,QAAA,IAAIJ,QAAQ,MAAA,EAAQ;YAClB,IAAI,CAACD,IAAAA,CAAKM,GAAG,EAAE;AACb,gBAAA,MAAMC,OAAAA,GAAU,MAAMC,QAAAA,CAASC,MAAM,CAAC;AACpC,oBAAA;wBACEC,IAAAA,EAAM,UAAA;wBACNC,OAAAA,EAAS,kCAAA;wBACTC,IAAAA,EAAM;AACR;AACD,iBAAA,CAAA;AACD,gBAAA,IAAI,CAACL,OAAAA,CAAQD,GAAG,EAAEO,MAAAA,EAAQ;AACxBC,oBAAAA,gBAAAA,CAAS,CAAA,EAAG,kCAAA,CAAA;AACd,gBAAA;gBACAd,IAAAA,CAAKM,GAAG,GAAGC,OAAAA,CAAQD,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CACA;KACCT,IAAI,CAAC,aAAa,CAACE,WAAAA,GAAAA;QAClB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAE7B,QAAA,MAAM,EAAEG,OAAO,EAAEY,KAAK,EAAE,GAAGb,IAAAA;QAE3B,IAAIG,IAAAA,GAAOL,KAAKK,IAAI;QAEpB,IAAIF,OAAAA,CAAQE,UAAU,MAAA,EAAQ;AAC5BA,YAAAA,IAAAA,GAAOU,KAAAA,CAAMV,IAAAA,CAAAA,CAAMO,IAAI,CAAA;YACvBb,WAAAA,CAAYC,IAAI,EAAA,CAAGgB,OAAO,GAAG,IAAA;QAC/B,CAAA,MAAO;YACLjB,WAAAA,CAAYC,IAAI,EAAA,CAAGgB,OAAO,GAAG,KAAA;AAC/B,QAAA;QAEA,IAAIb,OAAAA,CAAQE,UAAU,KAAA,EAAO;AAC3BA,YAAAA,IAAAA,GAAOU,KAAAA,CAAMV,IAAAA,CAAAA,CAAMO,IAAI,CAAA;YACvBb,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,UAAU,GAAG,IAAA;QAClC,CAAA,MAAO;YACLlB,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,UAAU,GAAG,KAAA;AAClC,QAAA;QAEA,IAAId,OAAAA,CAAQE,UAAU,MAAA,EAAQ;YAC5BS,gBAAAA,CACE,CAAA,EACA,CAAC,UAAU,EAAEd,KAAKK,IAAI,CAAC,qGAAqG,CAAC,CAAA;AAEjI,QAAA;AACF,IAAA,CAAA,CAAA,CACCR,IAAI,CACH,WAAA,EACAqB,sCAAAA,CACE,8EAAA,EACA;QAAEC,WAAAA,EAAa;AAAyB,KAAA,CAAA,CAAA,CAG3CC,MAAM,CAACA,MAAAA,CAAAA;AAEd;;;;"}
1
+ {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path and filename for the Strapi export file you want to import'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n const { extname, parse } = path;\n\n let file = opts.file;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","parse","decrypt","decompress","getCommanderConfirmMessage","failMessage","action"],"mappings":";;;;;;;;;;AAaA;;AAEC,UACKA,OAAAA,GAAU,IAAA;AACd,IAAA,OACEC,wBAAc,QAAA,CAAA,CACXC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,cAAc,CACb,mBAAA,EACA,iEAAA,CAAA,CAEDC,SAAS,CACR,IAAIC,iBACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CAAC,IAAIC,iBAAO,WAAA,EAAa,qBAAA,CAAA,CAAA,CAClCD,SAAS,CAACE,uBAAAA,CAAAA,CACVF,SAAS,CAACG,0BAAAA,CAAAA,CACVH,SAAS,CAACI,uBAAAA,CAAAA,CACVJ,SAAS,CAACK,2BAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,kCAClBD,IAAI,CAAC,aAAa,OAAOE,WAAAA,GAAAA;QACxB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAC7B,QAAA,MAAMC,MAAMC,IAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOJ,KAAKK,IAAI,CAAA,CAAA;;AAGzC,QAAA,IAAIJ,QAAQ,MAAA,EAAQ;YAClB,IAAI,CAACD,IAAAA,CAAKM,GAAG,EAAE;AACb,gBAAA,MAAMC,WAAW,MAAMC,uBAAAA,EAAAA;AACvB,gBAAA,MAAMC,OAAAA,GAAU,MAAMF,QAAAA,CAASG,MAAM,CAAC;AACpC,oBAAA;wBACEC,IAAAA,EAAM,UAAA;wBACNC,OAAAA,EAAS,kCAAA;wBACTC,IAAAA,EAAM;AACR;AACD,iBAAA,CAAA;AACD,gBAAA,IAAI,CAACJ,OAAAA,CAAQH,GAAG,EAAEQ,MAAAA,EAAQ;AACxBC,oBAAAA,gBAAAA,CAAS,CAAA,EAAG,kCAAA,CAAA;AACd,gBAAA;gBACAf,IAAAA,CAAKM,GAAG,GAAGG,OAAAA,CAAQH,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CACA;KACCT,IAAI,CAAC,aAAa,CAACE,WAAAA,GAAAA;QAClB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAE7B,QAAA,MAAM,EAAEG,OAAO,EAAEa,KAAK,EAAE,GAAGd,IAAAA;QAE3B,IAAIG,IAAAA,GAAOL,KAAKK,IAAI;QAEpB,IAAIF,OAAAA,CAAQE,UAAU,MAAA,EAAQ;AAC5BA,YAAAA,IAAAA,GAAOW,KAAAA,CAAMX,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,OAAO,GAAG,IAAA;QAC/B,CAAA,MAAO;YACLlB,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,OAAO,GAAG,KAAA;AAC/B,QAAA;QAEA,IAAId,OAAAA,CAAQE,UAAU,KAAA,EAAO;AAC3BA,YAAAA,IAAAA,GAAOW,KAAAA,CAAMX,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGkB,UAAU,GAAG,IAAA;QAClC,CAAA,MAAO;YACLnB,WAAAA,CAAYC,IAAI,EAAA,CAAGkB,UAAU,GAAG,KAAA;AAClC,QAAA;QAEA,IAAIf,OAAAA,CAAQE,UAAU,MAAA,EAAQ;YAC5BU,gBAAAA,CACE,CAAA,EACA,CAAC,UAAU,EAAEf,KAAKK,IAAI,CAAC,qGAAqG,CAAC,CAAA;AAEjI,QAAA;AACF,IAAA,CAAA,CAAA,CACCR,IAAI,CACH,WAAA,EACAsB,sCAAAA,CACE,8EAAA,EACA;QAAEC,WAAAA,EAAa;AAAyB,KAAA,CAAA,CAAA,CAG3CC,MAAM,CAACA,MAAAA,CAAAA;AAEd;;;;"}
@@ -1,9 +1,9 @@
1
1
  import path from 'path';
2
2
  import { createCommand, Option } from 'commander';
3
- import inquirer from 'inquirer';
4
3
  import { excludeOption, onlyOption, throttleOption, validateExcludeOnly } from '../../utils/data-transfer.mjs';
5
4
  import { forceOption, getCommanderConfirmMessage } from '../../utils/commander.mjs';
6
5
  import { exitWith } from '../../utils/helpers.mjs';
6
+ import { getInquirer } from '../../utils/get-inquirer.mjs';
7
7
  import action from './action.mjs';
8
8
 
9
9
  /**
@@ -15,6 +15,7 @@ import action from './action.mjs';
15
15
  // check extension to guess if we should prompt for key
16
16
  if (ext === '.enc') {
17
17
  if (!opts.key) {
18
+ const inquirer = await getInquirer();
18
19
  const answers = await inquirer.prompt([
19
20
  {
20
21
  type: 'password',
@@ -1 +1 @@
1
- {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import path from 'path';\nimport { createCommand, Option } from 'commander';\nimport inquirer from 'inquirer';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path and filename for the Strapi export file you want to import'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n const { extname, parse } = path;\n\n let file = opts.file;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","answers","inquirer","prompt","type","message","name","length","exitWith","parse","decrypt","decompress","getCommanderConfirmMessage","failMessage","action"],"mappings":";;;;;;;;AAaA;;AAEC,UACKA,OAAAA,GAAU,IAAA;AACd,IAAA,OACEC,cAAc,QAAA,CAAA,CACXC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,cAAc,CACb,mBAAA,EACA,iEAAA,CAAA,CAEDC,SAAS,CACR,IAAIC,OACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CAAC,IAAIC,OAAO,WAAA,EAAa,qBAAA,CAAA,CAAA,CAClCD,SAAS,CAACE,WAAAA,CAAAA,CACVF,SAAS,CAACG,aAAAA,CAAAA,CACVH,SAAS,CAACI,UAAAA,CAAAA,CACVJ,SAAS,CAACK,cAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,qBAClBD,IAAI,CAAC,aAAa,OAAOE,WAAAA,GAAAA;QACxB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAC7B,QAAA,MAAMC,MAAMC,IAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOJ,KAAKK,IAAI,CAAA,CAAA;;AAGzC,QAAA,IAAIJ,QAAQ,MAAA,EAAQ;YAClB,IAAI,CAACD,IAAAA,CAAKM,GAAG,EAAE;AACb,gBAAA,MAAMC,OAAAA,GAAU,MAAMC,QAAAA,CAASC,MAAM,CAAC;AACpC,oBAAA;wBACEC,IAAAA,EAAM,UAAA;wBACNC,OAAAA,EAAS,kCAAA;wBACTC,IAAAA,EAAM;AACR;AACD,iBAAA,CAAA;AACD,gBAAA,IAAI,CAACL,OAAAA,CAAQD,GAAG,EAAEO,MAAAA,EAAQ;AACxBC,oBAAAA,QAAAA,CAAS,CAAA,EAAG,kCAAA,CAAA;AACd,gBAAA;gBACAd,IAAAA,CAAKM,GAAG,GAAGC,OAAAA,CAAQD,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CACA;KACCT,IAAI,CAAC,aAAa,CAACE,WAAAA,GAAAA;QAClB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAE7B,QAAA,MAAM,EAAEG,OAAO,EAAEY,KAAK,EAAE,GAAGb,IAAAA;QAE3B,IAAIG,IAAAA,GAAOL,KAAKK,IAAI;QAEpB,IAAIF,OAAAA,CAAQE,UAAU,MAAA,EAAQ;AAC5BA,YAAAA,IAAAA,GAAOU,KAAAA,CAAMV,IAAAA,CAAAA,CAAMO,IAAI,CAAA;YACvBb,WAAAA,CAAYC,IAAI,EAAA,CAAGgB,OAAO,GAAG,IAAA;QAC/B,CAAA,MAAO;YACLjB,WAAAA,CAAYC,IAAI,EAAA,CAAGgB,OAAO,GAAG,KAAA;AAC/B,QAAA;QAEA,IAAIb,OAAAA,CAAQE,UAAU,KAAA,EAAO;AAC3BA,YAAAA,IAAAA,GAAOU,KAAAA,CAAMV,IAAAA,CAAAA,CAAMO,IAAI,CAAA;YACvBb,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,UAAU,GAAG,IAAA;QAClC,CAAA,MAAO;YACLlB,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,UAAU,GAAG,KAAA;AAClC,QAAA;QAEA,IAAId,OAAAA,CAAQE,UAAU,MAAA,EAAQ;YAC5BS,QAAAA,CACE,CAAA,EACA,CAAC,UAAU,EAAEd,KAAKK,IAAI,CAAC,qGAAqG,CAAC,CAAA;AAEjI,QAAA;AACF,IAAA,CAAA,CAAA,CACCR,IAAI,CACH,WAAA,EACAqB,0BAAAA,CACE,8EAAA,EACA;QAAEC,WAAAA,EAAa;AAAyB,KAAA,CAAA,CAAA,CAG3CC,MAAM,CAACA,MAAAA,CAAAA;AAEd;;;;"}
1
+ {"version":3,"file":"command.mjs","sources":["../../../../../src/cli/commands/import/command.ts"],"sourcesContent":["import path from 'path';\nimport { createCommand, Option } from 'commander';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\nimport { getCommanderConfirmMessage, forceOption } from '../../utils/commander';\nimport { exitWith } from '../../utils/helpers';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport action from './action';\n\n/**\n * `$ strapi import`\n */\nconst command = () => {\n return (\n createCommand('import')\n .description('Import data from file to Strapi')\n .allowExcessArguments(false)\n .requiredOption(\n '-f, --file <file>',\n 'path and filename for the Strapi export file you want to import'\n )\n .addOption(\n new Option(\n '-k, --key <string>',\n 'Provide encryption key in command instead of using the prompt'\n )\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook('preAction', async (thisCommand) => {\n const opts = thisCommand.opts();\n const ext = path.extname(String(opts.file));\n\n // check extension to guess if we should prompt for key\n if (ext === '.enc') {\n if (!opts.key) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your decryption key',\n name: 'key',\n },\n ]);\n if (!answers.key?.length) {\n exitWith(1, 'No key entered, aborting import.');\n }\n opts.key = answers.key;\n }\n }\n })\n // set decrypt and decompress options based on filename\n .hook('preAction', (thisCommand) => {\n const opts = thisCommand.opts();\n\n const { extname, parse } = path;\n\n let file = opts.file;\n\n if (extname(file) === '.enc') {\n file = parse(file).name; // trim the .enc extension\n thisCommand.opts().decrypt = true;\n } else {\n thisCommand.opts().decrypt = false;\n }\n\n if (extname(file) === '.gz') {\n file = parse(file).name; // trim the .gz extension\n thisCommand.opts().decompress = true;\n } else {\n thisCommand.opts().decompress = false;\n }\n\n if (extname(file) !== '.tar') {\n exitWith(\n 1,\n `The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`\n );\n }\n })\n .hook(\n 'preAction',\n getCommanderConfirmMessage(\n 'The import will delete your existing data! Are you sure you want to proceed?',\n { failMessage: 'Import process aborted' }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","requiredOption","addOption","Option","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","thisCommand","opts","ext","path","extname","String","file","key","inquirer","getInquirer","answers","prompt","type","message","name","length","exitWith","parse","decrypt","decompress","getCommanderConfirmMessage","failMessage","action"],"mappings":";;;;;;;;AAaA;;AAEC,UACKA,OAAAA,GAAU,IAAA;AACd,IAAA,OACEC,cAAc,QAAA,CAAA,CACXC,WAAW,CAAC,iCAAA,CAAA,CACZC,oBAAoB,CAAC,KAAA,CAAA,CACrBC,cAAc,CACb,mBAAA,EACA,iEAAA,CAAA,CAEDC,SAAS,CACR,IAAIC,OACF,oBAAA,EACA,+DAAA,CAAA,CAAA,CAGHD,SAAS,CAAC,IAAIC,OAAO,WAAA,EAAa,qBAAA,CAAA,CAAA,CAClCD,SAAS,CAACE,WAAAA,CAAAA,CACVF,SAAS,CAACG,aAAAA,CAAAA,CACVH,SAAS,CAACI,UAAAA,CAAAA,CACVJ,SAAS,CAACK,cAAAA,CAAAA,CACVC,IAAI,CAAC,WAAA,EAAaC,qBAClBD,IAAI,CAAC,aAAa,OAAOE,WAAAA,GAAAA;QACxB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAC7B,QAAA,MAAMC,MAAMC,IAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOJ,KAAKK,IAAI,CAAA,CAAA;;AAGzC,QAAA,IAAIJ,QAAQ,MAAA,EAAQ;YAClB,IAAI,CAACD,IAAAA,CAAKM,GAAG,EAAE;AACb,gBAAA,MAAMC,WAAW,MAAMC,WAAAA,EAAAA;AACvB,gBAAA,MAAMC,OAAAA,GAAU,MAAMF,QAAAA,CAASG,MAAM,CAAC;AACpC,oBAAA;wBACEC,IAAAA,EAAM,UAAA;wBACNC,OAAAA,EAAS,kCAAA;wBACTC,IAAAA,EAAM;AACR;AACD,iBAAA,CAAA;AACD,gBAAA,IAAI,CAACJ,OAAAA,CAAQH,GAAG,EAAEQ,MAAAA,EAAQ;AACxBC,oBAAAA,QAAAA,CAAS,CAAA,EAAG,kCAAA,CAAA;AACd,gBAAA;gBACAf,IAAAA,CAAKM,GAAG,GAAGG,OAAAA,CAAQH,GAAG;AACxB,YAAA;AACF,QAAA;AACF,IAAA,CAAA,CACA;KACCT,IAAI,CAAC,aAAa,CAACE,WAAAA,GAAAA;QAClB,MAAMC,IAAAA,GAAOD,YAAYC,IAAI,EAAA;AAE7B,QAAA,MAAM,EAAEG,OAAO,EAAEa,KAAK,EAAE,GAAGd,IAAAA;QAE3B,IAAIG,IAAAA,GAAOL,KAAKK,IAAI;QAEpB,IAAIF,OAAAA,CAAQE,UAAU,MAAA,EAAQ;AAC5BA,YAAAA,IAAAA,GAAOW,KAAAA,CAAMX,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,OAAO,GAAG,IAAA;QAC/B,CAAA,MAAO;YACLlB,WAAAA,CAAYC,IAAI,EAAA,CAAGiB,OAAO,GAAG,KAAA;AAC/B,QAAA;QAEA,IAAId,OAAAA,CAAQE,UAAU,KAAA,EAAO;AAC3BA,YAAAA,IAAAA,GAAOW,KAAAA,CAAMX,IAAAA,CAAAA,CAAMQ,IAAI,CAAA;YACvBd,WAAAA,CAAYC,IAAI,EAAA,CAAGkB,UAAU,GAAG,IAAA;QAClC,CAAA,MAAO;YACLnB,WAAAA,CAAYC,IAAI,EAAA,CAAGkB,UAAU,GAAG,KAAA;AAClC,QAAA;QAEA,IAAIf,OAAAA,CAAQE,UAAU,MAAA,EAAQ;YAC5BU,QAAAA,CACE,CAAA,EACA,CAAC,UAAU,EAAEf,KAAKK,IAAI,CAAC,qGAAqG,CAAC,CAAA;AAEjI,QAAA;AACF,IAAA,CAAA,CAAA,CACCR,IAAI,CACH,WAAA,EACAsB,0BAAAA,CACE,8EAAA,EACA;QAAEC,WAAAA,EAAa;AAAyB,KAAA,CAAA,CAAA,CAG3CC,MAAM,CAACA,MAAAA,CAAAA;AAEd;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var inquirer = require('inquirer');
4
3
  var commander = require('commander');
5
4
  var commander$1 = require('../../utils/commander.js');
5
+ var getInquirer = require('../../utils/get-inquirer.js');
6
6
  var helpers = require('../../utils/helpers.js');
7
7
  var dataTransfer = require('../../utils/data-transfer.js');
8
8
  var action = require('./action.js');
@@ -45,6 +45,7 @@ var action = require('./action.js');
45
45
  if (opts.to) {
46
46
  return 'to';
47
47
  }
48
+ const inquirer = await getInquirer.getInquirer();
48
49
  const { dir } = await inquirer.prompt([
49
50
  {
50
51
  type: 'list',
@@ -71,6 +72,7 @@ var action = require('./action.js');
71
72
  if (process.env.STRAPI_TRANSFER_URL) {
72
73
  return new URL(process.env.STRAPI_TRANSFER_URL);
73
74
  }
75
+ const inquirer = await getInquirer.getInquirer();
74
76
  const answer = await inquirer.prompt([
75
77
  {
76
78
  type: 'input',
@@ -102,6 +104,7 @@ var action = require('./action.js');
102
104
  if (process.env.STRAPI_TRANSFER_TOKEN) {
103
105
  return process.env.STRAPI_TRANSFER_TOKEN;
104
106
  }
107
+ const inquirer = await getInquirer.getInquirer();
105
108
  const answer = await inquirer.prompt([
106
109
  {
107
110
  type: 'password',
@@ -128,6 +131,7 @@ var action = require('./action.js');
128
131
  'http:'
129
132
  ]);
130
133
  if (!thisCommand.opts().fromToken) {
134
+ const inquirer = await getInquirer.getInquirer();
131
135
  const answers = await inquirer.prompt([
132
136
  {
133
137
  type: 'password',
@@ -150,6 +154,7 @@ var action = require('./action.js');
150
154
  'http:'
151
155
  ]);
152
156
  if (!thisCommand.opts().toToken) {
157
+ const inquirer = await getInquirer.getInquirer();
153
158
  const answers = await inquirer.prompt([
154
159
  {
155
160
  type: 'password',
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/transfer/command.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport { createCommand, Option } from 'commander';\nimport { getCommanderConfirmMessage, forceOption, parseURL } from '../../utils/commander';\nimport { exitWith, assertUrlHasProtocol, ifOptions } from '../../utils/helpers';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\n\nimport action from './action';\n\n/**\n * `$ strapi transfer`\n */\nconst command = () => {\n return (\n createCommand('transfer')\n .description('Transfer data from one source to another')\n .allowExcessArguments(false)\n .addOption(\n new Option(\n '--from <sourceURL>',\n `URL of the remote Strapi instance to get data from`\n ).argParser(parseURL)\n )\n .addOption(new Option('--from-token <token>', `Transfer token for the remote Strapi source`))\n .addOption(\n new Option(\n '--to <destinationURL>',\n `URL of the remote Strapi instance to send data to`\n ).argParser(parseURL)\n )\n\n .addOption(\n new Option('--to-token <token>', `Transfer token for the remote Strapi destination`)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook(\n 'preAction',\n ifOptions(\n async (opts) =>\n (opts.from && opts.to) || (opts.from && opts.toToken) || (opts.to && opts.fromToken),\n async () =>\n exitWith(1, 'Only one remote source (from) or destination (to) option may be provided')\n )\n )\n .hook(\n 'preAction',\n ifOptions(\n // Only run interactive prompts if neither --from nor --to is provided\n async (opts) => !opts.from && !opts.to,\n async (thisCommand) => {\n const opts = thisCommand.opts();\n const hasEnvUrl = process.env.STRAPI_TRANSFER_URL;\n const hasEnvToken = process.env.STRAPI_TRANSFER_TOKEN;\n\n const logDocumentation = () => {\n console.info(\n 'ℹ️ Data transfer documentation: https://docs.strapi.io/dev-docs/data-management/transfer'\n );\n };\n\n const logEnvironmentVariables = () => {\n if (!hasEnvUrl && !hasEnvToken) {\n console.info('ℹ️ No transfer configuration found in environment variables');\n console.info(\n ' → Add STRAPI_TRANSFER_URL and STRAPI_TRANSFER_TOKEN environment variables to make the transfer process faster for future runs'\n );\n return;\n }\n\n console.info('ℹ️ Found transfer configuration in your environment:');\n\n if (hasEnvUrl) {\n console.info(\n ` → Environment STRAPI_TRANSFER_URL (${hasEnvUrl}) will be used as the transfer URL`\n );\n }\n\n if (hasEnvToken) {\n console.info(\n ' → Environment STRAPI_TRANSFER_TOKEN value will be used as the transfer token'\n );\n }\n\n console.info(); // Empty line for better readability\n };\n\n const determineDirection = async () => {\n // If user has not provided a direction from CLI, log the documentation\n if (!opts.from && !opts.to) {\n logDocumentation();\n }\n\n logEnvironmentVariables();\n\n if (opts.from) {\n return 'from';\n }\n if (opts.to) {\n return 'to';\n }\n\n const { dir } = await inquirer.prompt([\n {\n type: 'list',\n name: 'dir',\n message: 'Choose transfer direction:',\n choices: [\n { name: 'Pull data from remote Strapi to local', value: 'from' },\n { name: 'Push local data to remote Strapi', value: 'to' },\n ],\n },\n ]);\n\n return dir;\n };\n\n const determineUrl = async (direction: 'from' | 'to') => {\n if (opts[direction]) {\n return new URL(opts[direction]);\n }\n\n if (process.env.STRAPI_TRANSFER_URL) {\n return new URL(process.env.STRAPI_TRANSFER_URL);\n }\n\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'remoteUrl',\n message: `Enter the URL of the remote Strapi instance to ${direction === 'from' ? 'get data from' : 'send data to'}:`,\n default: process.env.STRAPI_TRANSFER_URL,\n validate(input: string) {\n try {\n const url = new URL(input);\n if (!['http:', 'https:'].includes(url.protocol)) {\n return 'URL must use http: or https: protocol';\n }\n return true;\n } catch (error) {\n return 'Please enter a valid URL (e.g., http://localhost:1337/admin or https://example.com/admin)';\n }\n },\n },\n ]);\n\n return new URL(answer.remoteUrl);\n };\n\n const determineToken = async (direction: 'from' | 'to') => {\n if (opts[`${direction}Token`]) {\n return opts[`${direction}Token`];\n }\n\n if (process.env.STRAPI_TRANSFER_TOKEN) {\n return process.env.STRAPI_TRANSFER_TOKEN;\n }\n\n const answer = await inquirer.prompt([\n {\n type: 'password',\n name: 'token',\n message: `Enter the transfer token for the remote Strapi ${direction === 'from' ? 'source' : 'destination'}:`,\n default: process.env.STRAPI_TRANSFER_TOKEN,\n validate(input: string) {\n if (!input?.length) {\n return 'Transfer token is required';\n }\n return true;\n },\n },\n ]);\n\n return answer.token;\n };\n\n const direction = await determineDirection();\n opts[direction] = await determineUrl(direction);\n opts[`${direction}Token`] = await determineToken(direction);\n }\n )\n )\n // If --from is used, validate the URL and token\n .hook(\n 'preAction',\n ifOptions(\n async (opts) => opts.from,\n async (thisCommand) => {\n assertUrlHasProtocol(thisCommand.opts().from, ['https:', 'http:']);\n if (!thisCommand.opts().fromToken) {\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your transfer token for the remote Strapi source',\n name: 'fromToken',\n },\n ]);\n if (!answers.fromToken?.length) {\n exitWith(1, 'No token provided for remote source, aborting transfer.');\n }\n thisCommand.opts().fromToken = answers.fromToken;\n }\n\n await getCommanderConfirmMessage(\n 'The transfer will delete all the local Strapi assets and its database. Are you sure you want to proceed?',\n { failMessage: 'Transfer process aborted' }\n )(thisCommand);\n }\n )\n )\n // If --to is used, validate the URL, token, and confirm restore\n .hook(\n 'preAction',\n ifOptions(\n async (opts) => opts.to,\n async (thisCommand) => {\n assertUrlHasProtocol(thisCommand.opts().to, ['https:', 'http:']);\n if (!thisCommand.opts().toToken) {\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your transfer token for the remote Strapi destination',\n name: 'toToken',\n },\n ]);\n if (!answers.toToken?.length) {\n exitWith(1, 'No token provided for remote destination, aborting transfer.');\n }\n thisCommand.opts().toToken = answers.toToken;\n }\n\n await getCommanderConfirmMessage(\n 'The transfer will delete existing data from the remote Strapi! Are you sure you want to proceed?',\n { failMessage: 'Transfer process aborted' }\n )(thisCommand);\n }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","argParser","parseURL","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","ifOptions","opts","from","to","toToken","fromToken","exitWith","thisCommand","hasEnvUrl","process","env","STRAPI_TRANSFER_URL","hasEnvToken","STRAPI_TRANSFER_TOKEN","logDocumentation","console","info","logEnvironmentVariables","determineDirection","dir","inquirer","prompt","type","name","message","choices","value","determineUrl","direction","URL","answer","default","validate","input","url","includes","protocol","error","remoteUrl","determineToken","length","token","assertUrlHasProtocol","answers","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sources":["../../../../../src/cli/commands/transfer/command.ts"],"sourcesContent":["import { createCommand, Option } from 'commander';\nimport { getCommanderConfirmMessage, forceOption, parseURL } from '../../utils/commander';\nimport { getInquirer } from '../../utils/get-inquirer';\nimport { exitWith, assertUrlHasProtocol, ifOptions } from '../../utils/helpers';\nimport {\n excludeOption,\n onlyOption,\n throttleOption,\n validateExcludeOnly,\n} from '../../utils/data-transfer';\n\nimport action from './action';\n\n/**\n * `$ strapi transfer`\n */\nconst command = () => {\n return (\n createCommand('transfer')\n .description('Transfer data from one source to another')\n .allowExcessArguments(false)\n .addOption(\n new Option(\n '--from <sourceURL>',\n `URL of the remote Strapi instance to get data from`\n ).argParser(parseURL)\n )\n .addOption(new Option('--from-token <token>', `Transfer token for the remote Strapi source`))\n .addOption(\n new Option(\n '--to <destinationURL>',\n `URL of the remote Strapi instance to send data to`\n ).argParser(parseURL)\n )\n\n .addOption(\n new Option('--to-token <token>', `Transfer token for the remote Strapi destination`)\n )\n .addOption(new Option('--verbose', 'Enable verbose logs'))\n .addOption(forceOption)\n .addOption(excludeOption)\n .addOption(onlyOption)\n .addOption(throttleOption)\n .hook('preAction', validateExcludeOnly)\n .hook(\n 'preAction',\n ifOptions(\n async (opts) =>\n (opts.from && opts.to) || (opts.from && opts.toToken) || (opts.to && opts.fromToken),\n async () =>\n exitWith(1, 'Only one remote source (from) or destination (to) option may be provided')\n )\n )\n .hook(\n 'preAction',\n ifOptions(\n // Only run interactive prompts if neither --from nor --to is provided\n async (opts) => !opts.from && !opts.to,\n async (thisCommand) => {\n const opts = thisCommand.opts();\n const hasEnvUrl = process.env.STRAPI_TRANSFER_URL;\n const hasEnvToken = process.env.STRAPI_TRANSFER_TOKEN;\n\n const logDocumentation = () => {\n console.info(\n 'ℹ️ Data transfer documentation: https://docs.strapi.io/dev-docs/data-management/transfer'\n );\n };\n\n const logEnvironmentVariables = () => {\n if (!hasEnvUrl && !hasEnvToken) {\n console.info('ℹ️ No transfer configuration found in environment variables');\n console.info(\n ' → Add STRAPI_TRANSFER_URL and STRAPI_TRANSFER_TOKEN environment variables to make the transfer process faster for future runs'\n );\n return;\n }\n\n console.info('ℹ️ Found transfer configuration in your environment:');\n\n if (hasEnvUrl) {\n console.info(\n ` → Environment STRAPI_TRANSFER_URL (${hasEnvUrl}) will be used as the transfer URL`\n );\n }\n\n if (hasEnvToken) {\n console.info(\n ' → Environment STRAPI_TRANSFER_TOKEN value will be used as the transfer token'\n );\n }\n\n console.info(); // Empty line for better readability\n };\n\n const determineDirection = async () => {\n // If user has not provided a direction from CLI, log the documentation\n if (!opts.from && !opts.to) {\n logDocumentation();\n }\n\n logEnvironmentVariables();\n\n if (opts.from) {\n return 'from';\n }\n if (opts.to) {\n return 'to';\n }\n\n const inquirer = await getInquirer();\n const { dir } = await inquirer.prompt([\n {\n type: 'list',\n name: 'dir',\n message: 'Choose transfer direction:',\n choices: [\n { name: 'Pull data from remote Strapi to local', value: 'from' },\n { name: 'Push local data to remote Strapi', value: 'to' },\n ],\n },\n ]);\n\n return dir;\n };\n\n const determineUrl = async (direction: 'from' | 'to') => {\n if (opts[direction]) {\n return new URL(opts[direction]);\n }\n\n if (process.env.STRAPI_TRANSFER_URL) {\n return new URL(process.env.STRAPI_TRANSFER_URL);\n }\n\n const inquirer = await getInquirer();\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'remoteUrl',\n message: `Enter the URL of the remote Strapi instance to ${direction === 'from' ? 'get data from' : 'send data to'}:`,\n default: process.env.STRAPI_TRANSFER_URL,\n validate(input: string) {\n try {\n const url = new URL(input);\n if (!['http:', 'https:'].includes(url.protocol)) {\n return 'URL must use http: or https: protocol';\n }\n return true;\n } catch (error) {\n return 'Please enter a valid URL (e.g., http://localhost:1337/admin or https://example.com/admin)';\n }\n },\n },\n ]);\n\n return new URL(answer.remoteUrl);\n };\n\n const determineToken = async (direction: 'from' | 'to') => {\n if (opts[`${direction}Token`]) {\n return opts[`${direction}Token`];\n }\n\n if (process.env.STRAPI_TRANSFER_TOKEN) {\n return process.env.STRAPI_TRANSFER_TOKEN;\n }\n\n const inquirer = await getInquirer();\n const answer = await inquirer.prompt([\n {\n type: 'password',\n name: 'token',\n message: `Enter the transfer token for the remote Strapi ${direction === 'from' ? 'source' : 'destination'}:`,\n default: process.env.STRAPI_TRANSFER_TOKEN,\n validate(input: string) {\n if (!input?.length) {\n return 'Transfer token is required';\n }\n return true;\n },\n },\n ]);\n\n return answer.token;\n };\n\n const direction = await determineDirection();\n opts[direction] = await determineUrl(direction);\n opts[`${direction}Token`] = await determineToken(direction);\n }\n )\n )\n // If --from is used, validate the URL and token\n .hook(\n 'preAction',\n ifOptions(\n async (opts) => opts.from,\n async (thisCommand) => {\n assertUrlHasProtocol(thisCommand.opts().from, ['https:', 'http:']);\n if (!thisCommand.opts().fromToken) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your transfer token for the remote Strapi source',\n name: 'fromToken',\n },\n ]);\n if (!answers.fromToken?.length) {\n exitWith(1, 'No token provided for remote source, aborting transfer.');\n }\n thisCommand.opts().fromToken = answers.fromToken;\n }\n\n await getCommanderConfirmMessage(\n 'The transfer will delete all the local Strapi assets and its database. Are you sure you want to proceed?',\n { failMessage: 'Transfer process aborted' }\n )(thisCommand);\n }\n )\n )\n // If --to is used, validate the URL, token, and confirm restore\n .hook(\n 'preAction',\n ifOptions(\n async (opts) => opts.to,\n async (thisCommand) => {\n assertUrlHasProtocol(thisCommand.opts().to, ['https:', 'http:']);\n if (!thisCommand.opts().toToken) {\n const inquirer = await getInquirer();\n const answers = await inquirer.prompt([\n {\n type: 'password',\n message: 'Please enter your transfer token for the remote Strapi destination',\n name: 'toToken',\n },\n ]);\n if (!answers.toToken?.length) {\n exitWith(1, 'No token provided for remote destination, aborting transfer.');\n }\n thisCommand.opts().toToken = answers.toToken;\n }\n\n await getCommanderConfirmMessage(\n 'The transfer will delete existing data from the remote Strapi! Are you sure you want to proceed?',\n { failMessage: 'Transfer process aborted' }\n )(thisCommand);\n }\n )\n )\n .action(action)\n );\n};\n\nexport default command;\n"],"names":["command","createCommand","description","allowExcessArguments","addOption","Option","argParser","parseURL","forceOption","excludeOption","onlyOption","throttleOption","hook","validateExcludeOnly","ifOptions","opts","from","to","toToken","fromToken","exitWith","thisCommand","hasEnvUrl","process","env","STRAPI_TRANSFER_URL","hasEnvToken","STRAPI_TRANSFER_TOKEN","logDocumentation","console","info","logEnvironmentVariables","determineDirection","inquirer","getInquirer","dir","prompt","type","name","message","choices","value","determineUrl","direction","URL","answer","default","validate","input","url","includes","protocol","error","remoteUrl","determineToken","length","token","assertUrlHasProtocol","answers","getCommanderConfirmMessage","failMessage","action"],"mappings":"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"}