@strapi/strapi 4.10.0-beta.1 → 4.10.1-experimental.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/strapi.js +2 -468
- package/coverage/clover.xml +1613 -0
- package/coverage/coverage-final.json +48 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/commands/__tests__/data-transfer/shared/index.html +116 -0
- package/coverage/lcov-report/commands/__tests__/data-transfer/shared/transfer.test.utils.js.html +133 -0
- package/coverage/lcov-report/commands/admin-create.js.html +424 -0
- package/coverage/lcov-report/commands/admin-reset.js.html +241 -0
- package/coverage/lcov-report/commands/generate-template.js.html +373 -0
- package/coverage/lcov-report/commands/index.html +146 -0
- package/coverage/lcov-report/commands/transfer/export.js.html +619 -0
- package/coverage/lcov-report/commands/transfer/import.js.html +562 -0
- package/coverage/lcov-report/commands/transfer/index.html +146 -0
- package/coverage/lcov-report/commands/transfer/transfer.js.html +532 -0
- package/coverage/lcov-report/commands/utils/helpers.js.html +430 -0
- package/coverage/lcov-report/commands/utils/index.html +116 -0
- package/coverage/lcov-report/core/registries/custom-fields.js.html +301 -0
- package/coverage/lcov-report/core/registries/index.html +116 -0
- package/coverage/lcov-report/core-api/controller/collection-type.js.html +418 -0
- package/coverage/lcov-report/core-api/controller/index.html +161 -0
- package/coverage/lcov-report/core-api/controller/index.js.html +220 -0
- package/coverage/lcov-report/core-api/controller/single-type.js.html +274 -0
- package/coverage/lcov-report/core-api/controller/transform.js.html +376 -0
- package/coverage/lcov-report/core-api/service/collection-type.js.html +325 -0
- package/coverage/lcov-report/core-api/service/index.html +161 -0
- package/coverage/lcov-report/core-api/service/index.js.html +220 -0
- package/coverage/lcov-report/core-api/service/pagination.js.html +460 -0
- package/coverage/lcov-report/core-api/service/single-type.js.html +301 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +386 -0
- package/coverage/lcov-report/load/filepath-to-prop-path.js.html +151 -0
- package/coverage/lcov-report/load/index.html +116 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/services/content-api/index.html +116 -0
- package/coverage/lcov-report/services/content-api/index.js.html +307 -0
- package/coverage/lcov-report/services/content-api/permissions/engine.js.html +100 -0
- package/coverage/lcov-report/services/content-api/permissions/index.html +131 -0
- package/coverage/lcov-report/services/content-api/permissions/index.js.html +529 -0
- package/coverage/lcov-report/services/content-api/permissions/providers/action.js.html +142 -0
- package/coverage/lcov-report/services/content-api/permissions/providers/condition.js.html +142 -0
- package/coverage/lcov-report/services/content-api/permissions/providers/index.html +146 -0
- package/coverage/lcov-report/services/content-api/permissions/providers/index.js.html +112 -0
- package/coverage/lcov-report/services/core-store.js.html +520 -0
- package/coverage/lcov-report/services/entity-service/attributes/index.html +131 -0
- package/coverage/lcov-report/services/entity-service/attributes/index.js.html +178 -0
- package/coverage/lcov-report/services/entity-service/attributes/transforms.js.html +145 -0
- package/coverage/lcov-report/services/entity-service/components.js.html +1246 -0
- package/coverage/lcov-report/services/entity-service/index.html +146 -0
- package/coverage/lcov-report/services/entity-service/index.js.html +1120 -0
- package/coverage/lcov-report/services/entity-service/params.js.html +112 -0
- package/coverage/lcov-report/services/entity-validator/__tests__/relations/utils/index.html +116 -0
- package/coverage/lcov-report/services/entity-validator/__tests__/relations/utils/relations.testdata.js.html +544 -0
- package/coverage/lcov-report/services/entity-validator/index.html +131 -0
- package/coverage/lcov-report/services/entity-validator/index.js.html +1231 -0
- package/coverage/lcov-report/services/entity-validator/validators.js.html +733 -0
- package/coverage/lcov-report/services/event-hub.js.html +319 -0
- package/coverage/lcov-report/services/fs.js.html +259 -0
- package/coverage/lcov-report/services/index.html +161 -0
- package/coverage/lcov-report/services/metrics/admin-user-hash.js.html +148 -0
- package/coverage/lcov-report/services/metrics/index.html +206 -0
- package/coverage/lcov-report/services/metrics/index.js.html +265 -0
- package/coverage/lcov-report/services/metrics/is-truthy.js.html +112 -0
- package/coverage/lcov-report/services/metrics/middleware.js.html +184 -0
- package/coverage/lcov-report/services/metrics/rate-limiter.js.html +166 -0
- package/coverage/lcov-report/services/metrics/sender.js.html +394 -0
- package/coverage/lcov-report/services/metrics/stringify-deep.js.html +151 -0
- package/coverage/lcov-report/services/utils/index.html +116 -0
- package/coverage/lcov-report/services/utils/upload-files.js.html +322 -0
- package/coverage/lcov-report/services/worker-queue.js.html +262 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +196 -0
- package/coverage/lcov-report/utils/convert-custom-field-type.js.html +151 -0
- package/coverage/lcov-report/utils/index.html +146 -0
- package/coverage/lcov-report/utils/machine-id.js.html +127 -0
- package/coverage/lcov-report/utils/url-from-segments.js.html +121 -0
- package/ee/LICENSE.txt +21 -0
- package/ee/index.js +3 -1
- package/ee/license.js +8 -7
- package/lib/Strapi.js +3 -0
- package/lib/commands/__tests__/commands.test.js +20 -0
- package/lib/commands/__tests__/commands.test.utils.js +16 -0
- package/lib/commands/actions/admin/create-user/__tests__/admin.create-user.test.js +450 -0
- package/lib/commands/{admin-create.js → actions/admin/create-user/action.js} +2 -2
- package/lib/commands/actions/admin/create-user/command.js +19 -0
- package/lib/commands/actions/admin/reset-user-password/__tests__/admin.reset-user-password.test.js +145 -0
- package/lib/commands/{admin-reset.js → actions/admin/reset-user-password/action.js} +2 -2
- package/lib/commands/actions/admin/reset-user-password/command.js +17 -0
- package/lib/commands/{build.js → actions/build/action.js} +2 -2
- package/lib/commands/actions/build/command.js +15 -0
- package/lib/commands/{configurationDump.js → actions/configuration/dump/action.js} +1 -1
- package/lib/commands/actions/configuration/dump/command.js +17 -0
- package/lib/commands/{configurationRestore.js → actions/configuration/restore/action.js} +1 -1
- package/lib/commands/actions/configuration/restore/command.js +17 -0
- package/lib/commands/{console.js → actions/console/action.js} +2 -2
- package/lib/commands/actions/console/command.js +14 -0
- package/lib/commands/{content-types/list.js → actions/content-types/list/action.js} +2 -2
- package/lib/commands/actions/content-types/list/command.js +14 -0
- package/lib/commands/{controllers/list.js → actions/controllers/list/action.js} +2 -2
- package/lib/commands/actions/controllers/list/command.js +14 -0
- package/lib/commands/{develop.js → actions/develop/action.js} +3 -3
- package/lib/commands/actions/develop/command.js +19 -0
- package/lib/commands/actions/export/__tests__/export.test.js +175 -0
- package/lib/commands/{transfer/export.js → actions/export/action.js} +3 -2
- package/lib/commands/actions/export/command.js +45 -0
- package/lib/commands/actions/generate/command.js +18 -0
- package/lib/commands/{hooks/list.js → actions/hooks/list/action.js} +2 -2
- package/lib/commands/actions/hooks/list/command.js +14 -0
- package/lib/commands/actions/import/__tests__/import.test.js +143 -0
- package/lib/commands/{transfer/import.js → actions/import/action.js} +2 -2
- package/lib/commands/actions/import/command.js +97 -0
- package/lib/commands/{install.js → actions/install/action.js} +1 -1
- package/lib/commands/actions/install/command.js +14 -0
- package/lib/commands/{middlewares/list.js → actions/middlewares/list/action.js} +2 -2
- package/lib/commands/actions/middlewares/list/command.js +14 -0
- package/lib/commands/{new.js → actions/new/action.js} +1 -1
- package/lib/commands/actions/new/command.js +35 -0
- package/lib/commands/{policies/list.js → actions/policies/list/action.js} +2 -2
- package/lib/commands/actions/policies/list/command.js +14 -0
- package/lib/commands/{report.js → actions/report/action.js} +1 -1
- package/lib/commands/actions/report/command.js +17 -0
- package/lib/commands/{routes/list.js → actions/routes/list/action.js} +2 -2
- package/lib/commands/actions/routes/list/command.js +14 -0
- package/lib/commands/{services/list.js → actions/services/list/action.js} +2 -2
- package/lib/commands/actions/services/list/command.js +14 -0
- package/lib/commands/{start.js → actions/start/action.js} +1 -1
- package/lib/commands/actions/start/command.js +14 -0
- package/lib/commands/{opt-out-telemetry.js → actions/telemetry/disable/action.js} +1 -1
- package/lib/commands/actions/telemetry/disable/command.js +14 -0
- package/lib/commands/{opt-in-telemetry.js → actions/telemetry/enable/action.js} +1 -1
- package/lib/commands/actions/telemetry/enable/command.js +14 -0
- package/lib/commands/actions/templates/generate/__tests__/templates.generate.js +118 -0
- package/lib/commands/actions/templates/generate/command.js +14 -0
- package/lib/commands/actions/transfer/__tests__/transfer.test.js +178 -0
- package/lib/commands/{transfer/transfer.js → actions/transfer/action.js} +2 -2
- package/lib/commands/actions/transfer/command.js +115 -0
- package/lib/commands/{ts/generate-types.js → actions/ts/generate-types/action.js} +2 -2
- package/lib/commands/actions/ts/generate-types/command.js +21 -0
- package/lib/commands/{uninstall.js → actions/uninstall/action.js} +1 -1
- package/lib/commands/actions/uninstall/command.js +15 -0
- package/lib/commands/actions/version/command.js +19 -0
- package/lib/commands/{watchAdmin.js → actions/watch-admin/action.js} +4 -4
- package/lib/commands/actions/watch-admin/command.js +15 -0
- package/lib/commands/index.js +66 -0
- package/lib/commands/{transfer/utils.js → utils/data-transfer.js} +2 -2
- package/lib/commands/utils/helpers.js +54 -3
- package/lib/core/registries/__tests__/custom-fields.test.js +152 -0
- package/lib/core/registries/custom-fields.js +19 -2
- package/lib/core-api/__tests__/controller.test.js +39 -0
- package/lib/core-api/controller/__tests__/transform.test.js +226 -0
- package/lib/core-api/service/__tests__/index.test.js +127 -0
- package/lib/core-api/service/__tests__/pagination.test.js +275 -0
- package/lib/load/__tests__/filepath-to-prop-path.test.js +30 -0
- package/lib/middlewares/__tests__/errors.test.js +21 -0
- package/lib/services/__tests__/content-api-permissions.test.js +291 -0
- package/lib/services/__tests__/core-store.test.js +148 -0
- package/lib/services/__tests__/event-hub.test.js +126 -0
- package/lib/services/__tests__/fs.test.js +78 -0
- package/lib/services/__tests__/worker-queue.test.js +47 -0
- package/lib/services/entity-service/__tests__/entity-service-events.test.js +117 -0
- package/lib/services/entity-service/__tests__/entity-service.test.js +587 -0
- package/lib/services/entity-validator/__tests__/biginteger-validators.test.js +220 -0
- package/lib/services/entity-validator/__tests__/date-validators.test.js +183 -0
- package/lib/services/entity-validator/__tests__/datetime-validators.test.js +183 -0
- package/lib/services/entity-validator/__tests__/email-validators.test.js +56 -0
- package/lib/services/entity-validator/__tests__/enumeration-validators.test.js +43 -0
- package/lib/services/entity-validator/__tests__/float-validators.test.js +278 -0
- package/lib/services/entity-validator/__tests__/index.test.js +609 -0
- package/lib/services/entity-validator/__tests__/integer-validators.test.js +278 -0
- package/lib/services/entity-validator/__tests__/relations/attribute-level.test.js +123 -0
- package/lib/services/entity-validator/__tests__/relations/component-level.test.js +275 -0
- package/lib/services/entity-validator/__tests__/relations/dynamic-zone-level.test.js +159 -0
- package/lib/services/entity-validator/__tests__/relations/media-level.test.js +74 -0
- package/lib/services/entity-validator/__tests__/relations/utils/relations.testdata.js +153 -0
- package/lib/services/entity-validator/__tests__/string-validators.test.js +374 -0
- package/lib/services/entity-validator/__tests__/time-validators.test.js +183 -0
- package/lib/services/entity-validator/__tests__/timestamp-validators.test.js +204 -0
- package/lib/services/entity-validator/__tests__/uid-validators.test.js +229 -0
- package/lib/services/metrics/__tests__/admin-user-hash.test.js +41 -0
- package/lib/services/metrics/__tests__/index.test.js +157 -0
- package/lib/services/metrics/__tests__/is-truthy.js +33 -0
- package/lib/services/metrics/__tests__/middleware.test.js +60 -0
- package/lib/services/metrics/__tests__/rate-limiter.test.js +50 -0
- package/lib/services/metrics/__tests__/stringify-deep.test.js +27 -0
- package/lib/services/metrics/sender.js +1 -2
- package/lib/services/webhook-runner.js +4 -4
- package/lib/types/core/commands/index.d.ts +6 -0
- package/lib/utils/__tests__/convert-custom-field-type.test.js +69 -0
- package/lib/utils/__tests__/url-from-segments.test.js +40 -0
- package/lib/utils/fetch.js +23 -0
- package/package.json +17 -16
- /package/lib/commands/{generate-template.js → actions/templates/generate/action.js} +0 -0
package/bin/strapi.js
CHANGED
|
@@ -2,472 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
/* eslint-disable import/extensions */
|
|
7
|
-
const _ = require('lodash');
|
|
8
|
-
const path = require('path');
|
|
9
|
-
const resolveCwd = require('resolve-cwd');
|
|
10
|
-
const { yellow } = require('chalk');
|
|
11
|
-
const { Command, Option } = require('commander');
|
|
12
|
-
const inquirer = require('inquirer');
|
|
5
|
+
const { runStrapiCommand } = require('../lib/commands');
|
|
13
6
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const packageJSON = require('../package.json');
|
|
17
|
-
const {
|
|
18
|
-
promptEncryptionKey,
|
|
19
|
-
confirmMessage,
|
|
20
|
-
forceOption,
|
|
21
|
-
parseURL,
|
|
22
|
-
} = require('../lib/commands/utils/commander');
|
|
23
|
-
const { exitWith, ifOptions, assertUrlHasProtocol } = require('../lib/commands/utils/helpers');
|
|
24
|
-
const {
|
|
25
|
-
excludeOption,
|
|
26
|
-
onlyOption,
|
|
27
|
-
throttleOption,
|
|
28
|
-
validateExcludeOnly,
|
|
29
|
-
} = require('../lib/commands/transfer/utils');
|
|
30
|
-
|
|
31
|
-
const checkCwdIsStrapiApp = (name) => {
|
|
32
|
-
const logErrorAndExit = () => {
|
|
33
|
-
console.log(
|
|
34
|
-
`You need to run ${yellow(
|
|
35
|
-
`strapi ${name}`
|
|
36
|
-
)} in a Strapi project. Make sure you are in the right directory.`
|
|
37
|
-
);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
const pkgJSON = require(`${process.cwd()}/package.json`);
|
|
43
|
-
if (!_.has(pkgJSON, 'dependencies.@strapi/strapi')) {
|
|
44
|
-
logErrorAndExit(name);
|
|
45
|
-
}
|
|
46
|
-
} catch (err) {
|
|
47
|
-
logErrorAndExit(name);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const getLocalScript =
|
|
52
|
-
(name) =>
|
|
53
|
-
(...args) => {
|
|
54
|
-
checkCwdIsStrapiApp(name);
|
|
55
|
-
|
|
56
|
-
const cmdPath = resolveCwd.silent(`@strapi/strapi/lib/commands/${name}`);
|
|
57
|
-
if (!cmdPath) {
|
|
58
|
-
console.log(
|
|
59
|
-
`Error loading the local ${yellow(
|
|
60
|
-
name
|
|
61
|
-
)} command. Strapi might not be installed in your "node_modules". You may need to run "yarn install".`
|
|
62
|
-
);
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const script = require(cmdPath);
|
|
67
|
-
|
|
68
|
-
Promise.resolve()
|
|
69
|
-
.then(() => {
|
|
70
|
-
return script(...args);
|
|
71
|
-
})
|
|
72
|
-
.catch((error) => {
|
|
73
|
-
console.error(error);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
});
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// Initial program setup
|
|
79
|
-
program.storeOptionsAsProperties(false).allowUnknownOption(true);
|
|
80
|
-
|
|
81
|
-
program.helpOption('-h, --help', 'Display help for command');
|
|
82
|
-
program.addHelpCommand('help [command]', 'Display help for command');
|
|
83
|
-
|
|
84
|
-
// `$ strapi version` (--version synonym)
|
|
85
|
-
program.version(packageJSON.version, '-v, --version', 'Output the version number');
|
|
86
|
-
program
|
|
87
|
-
.command('version')
|
|
88
|
-
.description('Output the version of Strapi')
|
|
89
|
-
.action(() => {
|
|
90
|
-
process.stdout.write(`${packageJSON.version}\n`);
|
|
91
|
-
process.exit(0);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// `$ strapi console`
|
|
95
|
-
program
|
|
96
|
-
.command('console')
|
|
97
|
-
.description('Open the Strapi framework console')
|
|
98
|
-
.action(getLocalScript('console'));
|
|
99
|
-
|
|
100
|
-
// `$ strapi new`
|
|
101
|
-
program
|
|
102
|
-
.command('new <directory>')
|
|
103
|
-
.option('--no-run', 'Do not start the application after it is created')
|
|
104
|
-
.option('--use-npm', 'Force usage of npm instead of yarn to create the project')
|
|
105
|
-
.option('--debug', 'Display database connection errors')
|
|
106
|
-
.option('--quickstart', 'Create quickstart app')
|
|
107
|
-
.option('--dbclient <dbclient>', 'Database client')
|
|
108
|
-
.option('--dbhost <dbhost>', 'Database host')
|
|
109
|
-
.option('--dbport <dbport>', 'Database port')
|
|
110
|
-
.option('--dbname <dbname>', 'Database name')
|
|
111
|
-
.option('--dbusername <dbusername>', 'Database username')
|
|
112
|
-
.option('--dbpassword <dbpassword>', 'Database password')
|
|
113
|
-
.option('--dbssl <dbssl>', 'Database SSL')
|
|
114
|
-
.option('--dbfile <dbfile>', 'Database file path for sqlite')
|
|
115
|
-
.option('--dbforce', 'Allow overwriting existing database content')
|
|
116
|
-
.option('-ts, --typescript', 'Create a typescript project')
|
|
117
|
-
.description('Create a new application')
|
|
118
|
-
.action(require('../lib/commands/new'));
|
|
119
|
-
|
|
120
|
-
// `$ strapi start`
|
|
121
|
-
program
|
|
122
|
-
.command('start')
|
|
123
|
-
.description('Start your Strapi application')
|
|
124
|
-
.action(getLocalScript('start'));
|
|
125
|
-
|
|
126
|
-
// `$ strapi develop`
|
|
127
|
-
program
|
|
128
|
-
.command('develop')
|
|
129
|
-
.alias('dev')
|
|
130
|
-
.option('--no-build', 'Disable build')
|
|
131
|
-
.option('--watch-admin', 'Enable watch', false)
|
|
132
|
-
.option('--polling', 'Watch for file changes in network directories', false)
|
|
133
|
-
.option('--browser <name>', 'Open the browser', true)
|
|
134
|
-
.description('Start your Strapi application in development mode')
|
|
135
|
-
.action(getLocalScript('develop'));
|
|
136
|
-
|
|
137
|
-
// $ strapi generate
|
|
138
|
-
program
|
|
139
|
-
.command('generate')
|
|
140
|
-
.description('Launch the interactive API generator')
|
|
141
|
-
.action(() => {
|
|
142
|
-
checkCwdIsStrapiApp('generate');
|
|
143
|
-
process.argv.splice(2, 1);
|
|
144
|
-
require('@strapi/generators').runCLI();
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// `$ strapi generate:template <directory>`
|
|
148
|
-
program
|
|
149
|
-
.command('templates:generate <directory>')
|
|
150
|
-
.description('Generate template from Strapi project')
|
|
151
|
-
.action(getLocalScript('generate-template'));
|
|
152
|
-
|
|
153
|
-
program
|
|
154
|
-
.command('build')
|
|
155
|
-
.option('--no-optimization', 'Build the admin app without optimizing assets')
|
|
156
|
-
.description('Build the strapi admin app')
|
|
157
|
-
.action(getLocalScript('build'));
|
|
158
|
-
|
|
159
|
-
// `$ strapi install`
|
|
160
|
-
program
|
|
161
|
-
.command('install [plugins...]')
|
|
162
|
-
.description('Install a Strapi plugin')
|
|
163
|
-
.action(getLocalScript('install'));
|
|
164
|
-
|
|
165
|
-
// `$ strapi uninstall`
|
|
166
|
-
program
|
|
167
|
-
.command('uninstall [plugins...]')
|
|
168
|
-
.description('Uninstall a Strapi plugin')
|
|
169
|
-
.option('-d, --delete-files', 'Delete files', false)
|
|
170
|
-
.action(getLocalScript('uninstall'));
|
|
171
|
-
|
|
172
|
-
// `$ strapi watch-admin`
|
|
173
|
-
program
|
|
174
|
-
.command('watch-admin')
|
|
175
|
-
.option('--browser <name>', 'Open the browser', true)
|
|
176
|
-
.description('Start the admin development server')
|
|
177
|
-
.action(getLocalScript('watchAdmin'));
|
|
178
|
-
|
|
179
|
-
program
|
|
180
|
-
.command('configuration:dump')
|
|
181
|
-
.alias('config:dump')
|
|
182
|
-
.description('Dump configurations of your application')
|
|
183
|
-
.option('-f, --file <file>', 'Output file, default output is stdout')
|
|
184
|
-
.option('-p, --pretty', 'Format the output JSON with indentation and line breaks', false)
|
|
185
|
-
.action(getLocalScript('configurationDump'));
|
|
186
|
-
|
|
187
|
-
program
|
|
188
|
-
.command('configuration:restore')
|
|
189
|
-
.alias('config:restore')
|
|
190
|
-
.description('Restore configurations of your application')
|
|
191
|
-
.option('-f, --file <file>', 'Input file, default input is stdin')
|
|
192
|
-
.option('-s, --strategy <strategy>', 'Strategy name, one of: "replace", "merge", "keep"')
|
|
193
|
-
.action(getLocalScript('configurationRestore'));
|
|
194
|
-
|
|
195
|
-
// Admin
|
|
196
|
-
program
|
|
197
|
-
.command('admin:create-user')
|
|
198
|
-
.alias('admin:create')
|
|
199
|
-
.description('Create a new admin')
|
|
200
|
-
.option('-e, --email <email>', 'Email of the new admin')
|
|
201
|
-
.option('-p, --password <password>', 'Password of the new admin')
|
|
202
|
-
.option('-f, --firstname <first name>', 'First name of the new admin')
|
|
203
|
-
.option('-l, --lastname <last name>', 'Last name of the new admin')
|
|
204
|
-
.action(getLocalScript('admin-create'));
|
|
205
|
-
|
|
206
|
-
program
|
|
207
|
-
.command('admin:reset-user-password')
|
|
208
|
-
.alias('admin:reset-password')
|
|
209
|
-
.description("Reset an admin user's password")
|
|
210
|
-
.option('-e, --email <email>', 'The user email')
|
|
211
|
-
.option('-p, --password <password>', 'New password for the user')
|
|
212
|
-
.action(getLocalScript('admin-reset'));
|
|
213
|
-
|
|
214
|
-
program
|
|
215
|
-
.command('routes:list')
|
|
216
|
-
.description('List all the application routes')
|
|
217
|
-
.action(getLocalScript('routes/list'));
|
|
218
|
-
|
|
219
|
-
program
|
|
220
|
-
.command('middlewares:list')
|
|
221
|
-
.description('List all the application middlewares')
|
|
222
|
-
.action(getLocalScript('middlewares/list'));
|
|
223
|
-
|
|
224
|
-
program
|
|
225
|
-
.command('policies:list')
|
|
226
|
-
.description('List all the application policies')
|
|
227
|
-
.action(getLocalScript('policies/list'));
|
|
228
|
-
|
|
229
|
-
program
|
|
230
|
-
.command('content-types:list')
|
|
231
|
-
.description('List all the application content-types')
|
|
232
|
-
.action(getLocalScript('content-types/list'));
|
|
233
|
-
|
|
234
|
-
program
|
|
235
|
-
.command('hooks:list')
|
|
236
|
-
.description('List all the application hooks')
|
|
237
|
-
.action(getLocalScript('hooks/list'));
|
|
238
|
-
|
|
239
|
-
program
|
|
240
|
-
.command('services:list')
|
|
241
|
-
.description('List all the application services')
|
|
242
|
-
.action(getLocalScript('services/list'));
|
|
243
|
-
|
|
244
|
-
program
|
|
245
|
-
.command('controllers:list')
|
|
246
|
-
.description('List all the application controllers')
|
|
247
|
-
.action(getLocalScript('controllers/list'));
|
|
248
|
-
|
|
249
|
-
// `$ strapi opt-out-telemetry`
|
|
250
|
-
program
|
|
251
|
-
.command('telemetry:disable')
|
|
252
|
-
.description('Disable anonymous telemetry and metadata sending to Strapi analytics')
|
|
253
|
-
.action(getLocalScript('opt-out-telemetry'));
|
|
254
|
-
|
|
255
|
-
// `$ strapi opt-in-telemetry`
|
|
256
|
-
program
|
|
257
|
-
.command('telemetry:enable')
|
|
258
|
-
.description('Enable anonymous telemetry and metadata sending to Strapi analytics')
|
|
259
|
-
.action(getLocalScript('opt-in-telemetry'));
|
|
260
|
-
|
|
261
|
-
program
|
|
262
|
-
.command('report')
|
|
263
|
-
.description('Get system stats for debugging and submitting issues')
|
|
264
|
-
.option('-u, --uuid', 'Include Project UUID')
|
|
265
|
-
.option('-d, --dependencies', 'Include Project Dependencies')
|
|
266
|
-
.option('--all', 'Include All Information')
|
|
267
|
-
.action(getLocalScript('report'));
|
|
268
|
-
|
|
269
|
-
program
|
|
270
|
-
.command('ts:generate-types')
|
|
271
|
-
.description(`Generate TypeScript typings for your schemas`)
|
|
272
|
-
.option(
|
|
273
|
-
'-o, --out-dir <outDir>',
|
|
274
|
-
'Specify a relative directory in which the schemas definitions will be generated'
|
|
275
|
-
)
|
|
276
|
-
.option('-f, --file <file>', 'Specify a filename to store the schemas definitions')
|
|
277
|
-
.option('--verbose', `Display more information about the types generation`, false)
|
|
278
|
-
.option('-s, --silent', `Run the generation silently, without any output`, false)
|
|
279
|
-
.action(getLocalScript('ts/generate-types'));
|
|
280
|
-
|
|
281
|
-
// `$ strapi transfer`
|
|
282
|
-
program
|
|
283
|
-
.command('transfer')
|
|
284
|
-
.description('Transfer data from one source to another')
|
|
285
|
-
.allowExcessArguments(false)
|
|
286
|
-
.addOption(
|
|
287
|
-
new Option(
|
|
288
|
-
'--from <sourceURL>',
|
|
289
|
-
`URL of the remote Strapi instance to get data from`
|
|
290
|
-
).argParser(parseURL)
|
|
291
|
-
)
|
|
292
|
-
.addOption(new Option('--from-token <token>', `Transfer token for the remote Strapi source`))
|
|
293
|
-
.addOption(
|
|
294
|
-
new Option(
|
|
295
|
-
'--to <destinationURL>',
|
|
296
|
-
`URL of the remote Strapi instance to send data to`
|
|
297
|
-
).argParser(parseURL)
|
|
298
|
-
)
|
|
299
|
-
.addOption(new Option('--to-token <token>', `Transfer token for the remote Strapi destination`))
|
|
300
|
-
.addOption(forceOption)
|
|
301
|
-
.addOption(excludeOption)
|
|
302
|
-
.addOption(onlyOption)
|
|
303
|
-
.addOption(throttleOption)
|
|
304
|
-
.hook('preAction', validateExcludeOnly)
|
|
305
|
-
.hook(
|
|
306
|
-
'preAction',
|
|
307
|
-
ifOptions(
|
|
308
|
-
(opts) => !(opts.from || opts.to) || (opts.from && opts.to),
|
|
309
|
-
() =>
|
|
310
|
-
exitWith(1, 'Exactly one remote source (from) or destination (to) option must be provided')
|
|
311
|
-
)
|
|
312
|
-
)
|
|
313
|
-
// If --from is used, validate the URL and token
|
|
314
|
-
.hook(
|
|
315
|
-
'preAction',
|
|
316
|
-
ifOptions(
|
|
317
|
-
(opts) => opts.from,
|
|
318
|
-
async (thisCommand) => {
|
|
319
|
-
assertUrlHasProtocol(thisCommand.opts().from, ['https:', 'http:']);
|
|
320
|
-
if (!thisCommand.opts().fromToken) {
|
|
321
|
-
const answers = await inquirer.prompt([
|
|
322
|
-
{
|
|
323
|
-
type: 'password',
|
|
324
|
-
message: 'Please enter your transfer token for the remote Strapi source',
|
|
325
|
-
name: 'fromToken',
|
|
326
|
-
},
|
|
327
|
-
]);
|
|
328
|
-
if (!answers.fromToken?.length) {
|
|
329
|
-
exitWith(1, 'No token provided for remote source, aborting transfer.');
|
|
330
|
-
}
|
|
331
|
-
thisCommand.opts().fromToken = answers.fromToken;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
await confirmMessage(
|
|
335
|
-
'The transfer will delete all the local Strapi assets and its database. Are you sure you want to proceed?',
|
|
336
|
-
{ failMessage: 'Transfer process aborted' }
|
|
337
|
-
)(thisCommand);
|
|
338
|
-
}
|
|
339
|
-
)
|
|
340
|
-
)
|
|
341
|
-
// If --to is used, validate the URL, token, and confirm restore
|
|
342
|
-
.hook(
|
|
343
|
-
'preAction',
|
|
344
|
-
ifOptions(
|
|
345
|
-
(opts) => opts.to,
|
|
346
|
-
async (thisCommand) => {
|
|
347
|
-
assertUrlHasProtocol(thisCommand.opts().to, ['https:', 'http:']);
|
|
348
|
-
if (!thisCommand.opts().toToken) {
|
|
349
|
-
const answers = await inquirer.prompt([
|
|
350
|
-
{
|
|
351
|
-
type: 'password',
|
|
352
|
-
message: 'Please enter your transfer token for the remote Strapi destination',
|
|
353
|
-
name: 'toToken',
|
|
354
|
-
},
|
|
355
|
-
]);
|
|
356
|
-
if (!answers.toToken?.length) {
|
|
357
|
-
exitWith(1, 'No token provided for remote destination, aborting transfer.');
|
|
358
|
-
}
|
|
359
|
-
thisCommand.opts().toToken = answers.toToken;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
await confirmMessage(
|
|
363
|
-
'The transfer will delete all the remote Strapi assets and its database. Are you sure you want to proceed?',
|
|
364
|
-
{ failMessage: 'Transfer process aborted' }
|
|
365
|
-
)(thisCommand);
|
|
366
|
-
}
|
|
367
|
-
)
|
|
368
|
-
)
|
|
369
|
-
.action(getLocalScript('transfer/transfer'));
|
|
370
|
-
|
|
371
|
-
// `$ strapi export`
|
|
372
|
-
program
|
|
373
|
-
.command('export')
|
|
374
|
-
.description('Export data from Strapi to file')
|
|
375
|
-
.allowExcessArguments(false)
|
|
376
|
-
.addOption(
|
|
377
|
-
new Option('--no-encrypt', `Disables 'aes-128-ecb' encryption of the output file`).default(true)
|
|
378
|
-
)
|
|
379
|
-
.addOption(new Option('--no-compress', 'Disables gzip compression of output file').default(true))
|
|
380
|
-
.addOption(
|
|
381
|
-
new Option(
|
|
382
|
-
'-k, --key <string>',
|
|
383
|
-
'Provide encryption key in command instead of using the prompt'
|
|
384
|
-
)
|
|
385
|
-
)
|
|
386
|
-
.addOption(new Option('-f, --file <file>', 'name to use for exported file (without extensions)'))
|
|
387
|
-
.addOption(excludeOption)
|
|
388
|
-
.addOption(onlyOption)
|
|
389
|
-
.addOption(throttleOption)
|
|
390
|
-
.hook('preAction', validateExcludeOnly)
|
|
391
|
-
.hook('preAction', promptEncryptionKey)
|
|
392
|
-
.action(getLocalScript('transfer/export'));
|
|
393
|
-
|
|
394
|
-
// `$ strapi import`
|
|
395
|
-
program
|
|
396
|
-
.command('import')
|
|
397
|
-
.description('Import data from file to Strapi')
|
|
398
|
-
.allowExcessArguments(false)
|
|
399
|
-
.requiredOption(
|
|
400
|
-
'-f, --file <file>',
|
|
401
|
-
'path and filename for the Strapi export file you want to import'
|
|
402
|
-
)
|
|
403
|
-
.addOption(
|
|
404
|
-
new Option(
|
|
405
|
-
'-k, --key <string>',
|
|
406
|
-
'Provide encryption key in command instead of using the prompt'
|
|
407
|
-
)
|
|
408
|
-
)
|
|
409
|
-
.addOption(forceOption)
|
|
410
|
-
.addOption(excludeOption)
|
|
411
|
-
.addOption(onlyOption)
|
|
412
|
-
.addOption(throttleOption)
|
|
413
|
-
.hook('preAction', validateExcludeOnly)
|
|
414
|
-
.hook('preAction', async (thisCommand) => {
|
|
415
|
-
const opts = thisCommand.opts();
|
|
416
|
-
const ext = path.extname(String(opts.file));
|
|
417
|
-
|
|
418
|
-
// check extension to guess if we should prompt for key
|
|
419
|
-
if (ext === '.enc') {
|
|
420
|
-
if (!opts.key) {
|
|
421
|
-
const answers = await inquirer.prompt([
|
|
422
|
-
{
|
|
423
|
-
type: 'password',
|
|
424
|
-
message: 'Please enter your decryption key',
|
|
425
|
-
name: 'key',
|
|
426
|
-
},
|
|
427
|
-
]);
|
|
428
|
-
if (!answers.key?.length) {
|
|
429
|
-
exitWith(1, 'No key entered, aborting import.');
|
|
430
|
-
}
|
|
431
|
-
opts.key = answers.key;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
})
|
|
435
|
-
// set decrypt and decompress options based on filename
|
|
436
|
-
.hook('preAction', (thisCommand) => {
|
|
437
|
-
const opts = thisCommand.opts();
|
|
438
|
-
|
|
439
|
-
const { extname, parse } = path;
|
|
440
|
-
|
|
441
|
-
let file = opts.file;
|
|
442
|
-
|
|
443
|
-
if (extname(file) === '.enc') {
|
|
444
|
-
file = parse(file).name; // trim the .enc extension
|
|
445
|
-
thisCommand.opts().decrypt = true;
|
|
446
|
-
} else {
|
|
447
|
-
thisCommand.opts().decrypt = false;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
if (extname(file) === '.gz') {
|
|
451
|
-
file = parse(file).name; // trim the .gz extension
|
|
452
|
-
thisCommand.opts().decompress = true;
|
|
453
|
-
} else {
|
|
454
|
-
thisCommand.opts().decompress = false;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
if (extname(file) !== '.tar') {
|
|
458
|
-
exitWith(
|
|
459
|
-
1,
|
|
460
|
-
`The file '${opts.file}' does not appear to be a valid Strapi data file. It must have an extension ending in .tar[.gz][.enc]`
|
|
461
|
-
);
|
|
462
|
-
}
|
|
463
|
-
})
|
|
464
|
-
.hook(
|
|
465
|
-
'preAction',
|
|
466
|
-
confirmMessage(
|
|
467
|
-
'The import will delete all assets and data in your database. Are you sure you want to proceed?',
|
|
468
|
-
{ failMessage: 'Import process aborted' }
|
|
469
|
-
)
|
|
470
|
-
)
|
|
471
|
-
.action(getLocalScript('transfer/import'));
|
|
472
|
-
|
|
473
|
-
program.parseAsync(process.argv);
|
|
7
|
+
runStrapiCommand(process.argv);
|