@strapi/strapi 5.12.0 → 5.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +89 -45
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +90 -42
- package/dist/cli.mjs.map +1 -1
- package/dist/package.json.js +6 -0
- package/dist/package.json.js.map +1 -0
- package/dist/package.json.mjs +4 -0
- package/dist/package.json.mjs.map +1 -0
- package/dist/src/cli/commands/admin/create-user.js +124 -0
- package/dist/src/cli/commands/admin/create-user.js.map +1 -0
- package/dist/src/cli/commands/admin/create-user.mjs +121 -0
- package/dist/src/cli/commands/admin/create-user.mjs.map +1 -0
- package/dist/src/cli/commands/admin/reset-user-password.js +61 -0
- package/dist/src/cli/commands/admin/reset-user-password.js.map +1 -0
- package/dist/src/cli/commands/admin/reset-user-password.mjs +58 -0
- package/dist/src/cli/commands/admin/reset-user-password.mjs.map +1 -0
- package/dist/src/cli/commands/build.js +29 -0
- package/dist/src/cli/commands/build.js.map +1 -0
- package/dist/src/cli/commands/build.mjs +27 -0
- package/dist/src/cli/commands/build.mjs.map +1 -0
- package/dist/src/cli/commands/components/list.js +32 -0
- package/dist/src/cli/commands/components/list.js.map +1 -0
- package/dist/src/cli/commands/components/list.mjs +29 -0
- package/dist/src/cli/commands/components/list.mjs.map +1 -0
- package/dist/src/cli/commands/configuration/dump.js +53 -0
- package/dist/src/cli/commands/configuration/dump.js.map +1 -0
- package/dist/src/cli/commands/configuration/dump.mjs +50 -0
- package/dist/src/cli/commands/configuration/dump.mjs.map +1 -0
- package/dist/src/cli/commands/configuration/restore.js +173 -0
- package/dist/src/cli/commands/configuration/restore.js.map +1 -0
- package/dist/src/cli/commands/configuration/restore.mjs +170 -0
- package/dist/src/cli/commands/configuration/restore.mjs.map +1 -0
- package/dist/src/cli/commands/console.js +31 -0
- package/dist/src/cli/commands/console.js.map +1 -0
- package/dist/src/cli/commands/console.mjs +28 -0
- package/dist/src/cli/commands/console.mjs.map +1 -0
- package/dist/src/cli/commands/content-types/list.js +32 -0
- package/dist/src/cli/commands/content-types/list.js.map +1 -0
- package/dist/src/cli/commands/content-types/list.mjs +29 -0
- package/dist/src/cli/commands/content-types/list.mjs.map +1 -0
- package/dist/src/cli/commands/controllers/list.js +32 -0
- package/dist/src/cli/commands/controllers/list.js.map +1 -0
- package/dist/src/cli/commands/controllers/list.mjs +29 -0
- package/dist/src/cli/commands/controllers/list.mjs.map +1 -0
- package/dist/src/cli/commands/develop.js +32 -0
- package/dist/src/cli/commands/develop.js.map +1 -0
- package/dist/src/cli/commands/develop.mjs +30 -0
- package/dist/src/cli/commands/develop.mjs.map +1 -0
- package/dist/src/cli/commands/export/action.js +126 -0
- package/dist/src/cli/commands/export/action.js.map +1 -0
- package/dist/src/cli/commands/export/action.mjs +124 -0
- package/dist/src/cli/commands/export/action.mjs.map +1 -0
- package/dist/src/cli/commands/export/command.js +15 -0
- package/dist/src/cli/commands/export/command.js.map +1 -0
- package/dist/src/cli/commands/export/command.mjs +13 -0
- package/dist/src/cli/commands/export/command.mjs.map +1 -0
- package/dist/src/cli/commands/generate.js +18 -0
- package/dist/src/cli/commands/generate.js.map +1 -0
- package/dist/src/cli/commands/generate.mjs +16 -0
- package/dist/src/cli/commands/generate.mjs.map +1 -0
- package/dist/src/cli/commands/hooks/list.js +32 -0
- package/dist/src/cli/commands/hooks/list.js.map +1 -0
- package/dist/src/cli/commands/hooks/list.mjs +29 -0
- package/dist/src/cli/commands/hooks/list.mjs.map +1 -0
- package/dist/src/cli/commands/import/action.js +124 -0
- package/dist/src/cli/commands/import/action.js.map +1 -0
- package/dist/src/cli/commands/import/action.mjs +122 -0
- package/dist/src/cli/commands/import/action.mjs.map +1 -0
- package/dist/src/cli/commands/import/command.js +59 -0
- package/dist/src/cli/commands/import/command.js.map +1 -0
- package/dist/src/cli/commands/import/command.mjs +57 -0
- package/dist/src/cli/commands/import/command.mjs.map +1 -0
- package/dist/src/cli/commands/index.js +64 -0
- package/dist/src/cli/commands/index.js.map +1 -0
- package/dist/src/cli/commands/index.mjs +62 -0
- package/dist/src/cli/commands/index.mjs.map +1 -0
- package/dist/src/cli/commands/middlewares/list.js +32 -0
- package/dist/src/cli/commands/middlewares/list.js.map +1 -0
- package/dist/src/cli/commands/middlewares/list.mjs +29 -0
- package/dist/src/cli/commands/middlewares/list.mjs.map +1 -0
- package/dist/src/cli/commands/policies/list.js +32 -0
- package/dist/src/cli/commands/policies/list.js.map +1 -0
- package/dist/src/cli/commands/policies/list.mjs +29 -0
- package/dist/src/cli/commands/policies/list.mjs.map +1 -0
- package/dist/src/cli/commands/report.js +39 -0
- package/dist/src/cli/commands/report.js.map +1 -0
- package/dist/src/cli/commands/report.mjs +37 -0
- package/dist/src/cli/commands/report.mjs.map +1 -0
- package/dist/src/cli/commands/routes/list.js +40 -0
- package/dist/src/cli/commands/routes/list.js.map +1 -0
- package/dist/src/cli/commands/routes/list.mjs +37 -0
- package/dist/src/cli/commands/routes/list.mjs.map +1 -0
- package/dist/src/cli/commands/services/list.js +32 -0
- package/dist/src/cli/commands/services/list.js.map +1 -0
- package/dist/src/cli/commands/services/list.mjs +29 -0
- package/dist/src/cli/commands/services/list.mjs.map +1 -0
- package/dist/src/cli/commands/start.js +28 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/start.mjs +26 -0
- package/dist/src/cli/commands/start.mjs.map +1 -0
- package/dist/src/cli/commands/telemetry/disable.js +72 -0
- package/dist/src/cli/commands/telemetry/disable.js.map +1 -0
- package/dist/src/cli/commands/telemetry/disable.mjs +69 -0
- package/dist/src/cli/commands/telemetry/disable.mjs.map +1 -0
- package/dist/src/cli/commands/telemetry/enable.js +88 -0
- package/dist/src/cli/commands/telemetry/enable.js.map +1 -0
- package/dist/src/cli/commands/telemetry/enable.mjs +85 -0
- package/dist/src/cli/commands/telemetry/enable.mjs.map +1 -0
- package/dist/src/cli/commands/templates/generate.js +15 -0
- package/dist/src/cli/commands/templates/generate.js.map +1 -0
- package/dist/src/cli/commands/templates/generate.mjs +13 -0
- package/dist/src/cli/commands/templates/generate.mjs.map +1 -0
- package/dist/src/cli/commands/transfer/action.js +141 -0
- package/dist/src/cli/commands/transfer/action.js.map +1 -0
- package/dist/src/cli/commands/transfer/action.mjs +139 -0
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -0
- package/dist/src/cli/commands/transfer/command.js +61 -0
- package/dist/src/cli/commands/transfer/command.js.map +1 -0
- package/dist/src/cli/commands/transfer/command.mjs +59 -0
- package/dist/src/cli/commands/transfer/command.mjs.map +1 -0
- package/dist/src/cli/commands/ts/generate-types.js +40 -0
- package/dist/src/cli/commands/ts/generate-types.js.map +1 -0
- package/dist/src/cli/commands/ts/generate-types.mjs +37 -0
- package/dist/src/cli/commands/ts/generate-types.mjs.map +1 -0
- package/dist/src/cli/commands/version.js +17 -0
- package/dist/src/cli/commands/version.js.map +1 -0
- package/dist/src/cli/commands/version.mjs +15 -0
- package/dist/src/cli/commands/version.mjs.map +1 -0
- package/dist/src/cli/utils/commander.js +125 -0
- package/dist/src/cli/utils/commander.js.map +1 -0
- package/dist/src/cli/utils/commander.mjs +116 -0
- package/dist/src/cli/utils/commander.mjs.map +1 -0
- package/dist/src/cli/utils/data-transfer.js +378 -0
- package/dist/src/cli/utils/data-transfer.js.map +1 -0
- package/dist/src/cli/utils/data-transfer.mjs +359 -0
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -0
- package/dist/src/cli/utils/helpers.js +114 -0
- package/dist/src/cli/utils/helpers.js.map +1 -0
- package/dist/src/cli/utils/helpers.mjs +107 -0
- package/dist/src/cli/utils/helpers.mjs.map +1 -0
- package/dist/src/cli/utils/logger.js +125 -0
- package/dist/src/cli/utils/logger.js.map +1 -0
- package/dist/src/cli/utils/logger.mjs +104 -0
- package/dist/src/cli/utils/logger.mjs.map +1 -0
- package/dist/src/cli/utils/telemetry.js +27 -0
- package/dist/src/cli/utils/telemetry.js.map +1 -0
- package/dist/src/cli/utils/telemetry.mjs +25 -0
- package/dist/src/cli/utils/telemetry.mjs.map +1 -0
- package/dist/src/cli/utils/tsconfig.js +25 -0
- package/dist/src/cli/utils/tsconfig.js.map +1 -0
- package/dist/src/cli/utils/tsconfig.mjs +23 -0
- package/dist/src/cli/utils/tsconfig.mjs.map +1 -0
- package/dist/src/node/build.js +90 -0
- package/dist/src/node/build.js.map +1 -0
- package/dist/src/node/build.mjs +69 -0
- package/dist/src/node/build.mjs.map +1 -0
- package/dist/src/node/core/admin-customisations.js +27 -0
- package/dist/src/node/core/admin-customisations.js.map +1 -0
- package/dist/src/node/core/admin-customisations.mjs +25 -0
- package/dist/src/node/core/admin-customisations.mjs.map +1 -0
- package/dist/{chunks/aliases-B2TXon3T.js → src/node/core/aliases.js} +3 -42
- package/dist/src/node/core/aliases.js.map +1 -0
- package/dist/{chunks/aliases-BsT_zzr4.mjs → src/node/core/aliases.mjs} +4 -41
- package/dist/src/node/core/aliases.mjs.map +1 -0
- package/dist/src/node/core/config.js +18 -0
- package/dist/src/node/core/config.js.map +1 -0
- package/dist/src/node/core/config.mjs +16 -0
- package/dist/src/node/core/config.mjs.map +1 -0
- package/dist/src/node/core/dependencies.js +186 -0
- package/dist/src/node/core/dependencies.js.map +1 -0
- package/dist/src/node/core/dependencies.mjs +183 -0
- package/dist/src/node/core/dependencies.mjs.map +1 -0
- package/dist/src/node/core/env.js +32 -0
- package/dist/src/node/core/env.js.map +1 -0
- package/dist/src/node/core/env.mjs +29 -0
- package/dist/src/node/core/env.mjs.map +1 -0
- package/dist/src/node/core/errors.js +51 -0
- package/dist/src/node/core/errors.js.map +1 -0
- package/dist/src/node/core/errors.mjs +48 -0
- package/dist/src/node/core/errors.mjs.map +1 -0
- package/dist/src/node/core/files.js +68 -0
- package/dist/src/node/core/files.js.map +1 -0
- package/dist/src/node/core/files.mjs +63 -0
- package/dist/src/node/core/files.mjs.map +1 -0
- package/dist/src/node/core/managers.js +27 -0
- package/dist/src/node/core/managers.js.map +1 -0
- package/dist/src/node/core/managers.mjs +25 -0
- package/dist/src/node/core/managers.mjs.map +1 -0
- package/dist/src/node/core/monorepo.js +30 -0
- package/dist/src/node/core/monorepo.js.map +1 -0
- package/dist/src/node/core/monorepo.mjs +28 -0
- package/dist/src/node/core/monorepo.mjs.map +1 -0
- package/dist/src/node/core/plugins.js +140 -0
- package/dist/src/node/core/plugins.js.map +1 -0
- package/dist/src/node/core/plugins.mjs +137 -0
- package/dist/src/node/core/plugins.mjs.map +1 -0
- package/dist/src/node/core/timer.js +33 -0
- package/dist/src/node/core/timer.js.map +1 -0
- package/dist/src/node/core/timer.mjs +30 -0
- package/dist/src/node/core/timer.mjs.map +1 -0
- package/dist/src/node/create-build-context.js +111 -0
- package/dist/src/node/create-build-context.js.map +1 -0
- package/dist/src/node/create-build-context.mjs +109 -0
- package/dist/src/node/create-build-context.mjs.map +1 -0
- package/dist/src/node/develop.js +312 -0
- package/dist/src/node/develop.js.map +1 -0
- package/dist/src/node/develop.mjs +291 -0
- package/dist/src/node/develop.mjs.map +1 -0
- package/dist/src/node/staticFiles.js +81 -0
- package/dist/src/node/staticFiles.js.map +1 -0
- package/dist/src/node/staticFiles.mjs +78 -0
- package/dist/src/node/staticFiles.mjs.map +1 -0
- package/dist/src/node/vite/build.js +14 -0
- package/dist/src/node/vite/build.js.map +1 -0
- package/dist/src/node/vite/build.mjs +12 -0
- package/dist/src/node/vite/build.mjs.map +1 -0
- package/dist/{chunks/config-CsJ2EtSs.js → src/node/vite/config.js} +12 -50
- package/dist/src/node/vite/config.js.map +1 -0
- package/dist/{chunks/config-BqQdQJh_.mjs → src/node/vite/config.mjs} +6 -44
- package/dist/src/node/vite/config.mjs.map +1 -0
- package/dist/src/node/vite/plugins.js +46 -0
- package/dist/src/node/vite/plugins.js.map +1 -0
- package/dist/src/node/vite/plugins.mjs +44 -0
- package/dist/src/node/vite/plugins.mjs.map +1 -0
- package/dist/{chunks/watch-DzwyHBm4.js → src/node/vite/watch.js} +2 -45
- package/dist/src/node/vite/watch.js.map +1 -0
- package/dist/{chunks/watch-BDsNoG4h.mjs → src/node/vite/watch.mjs} +2 -45
- package/dist/src/node/vite/watch.mjs.map +1 -0
- package/dist/src/node/webpack/build.js +37 -0
- package/dist/src/node/webpack/build.js.map +1 -0
- package/dist/src/node/webpack/build.mjs +35 -0
- package/dist/src/node/webpack/build.mjs.map +1 -0
- package/dist/{chunks/config-B2BETQ-W.js → src/node/webpack/config.js} +10 -8
- package/dist/src/node/webpack/config.js.map +1 -0
- package/dist/{chunks/config-DHibCzCW.mjs → src/node/webpack/config.mjs} +5 -3
- package/dist/src/node/webpack/config.mjs.map +1 -0
- package/dist/{chunks/watch-BKW3b7Rj.js → src/node/webpack/watch.js} +2 -51
- package/dist/src/node/webpack/watch.js.map +1 -0
- package/dist/{chunks/watch-DQJ0HV0l.mjs → src/node/webpack/watch.mjs} +2 -51
- package/dist/src/node/webpack/watch.mjs.map +1 -0
- package/package.json +22 -22
- package/dist/chunks/aliases-B2TXon3T.js.map +0 -1
- package/dist/chunks/aliases-BsT_zzr4.mjs.map +0 -1
- package/dist/chunks/build-BQMdiYL1.mjs +0 -57
- package/dist/chunks/build-BQMdiYL1.mjs.map +0 -1
- package/dist/chunks/build-FJLfahVt.mjs +0 -85
- package/dist/chunks/build-FJLfahVt.mjs.map +0 -1
- package/dist/chunks/build-RZ8_oqFy.js +0 -59
- package/dist/chunks/build-RZ8_oqFy.js.map +0 -1
- package/dist/chunks/build-XY97xrwm.js +0 -87
- package/dist/chunks/build-XY97xrwm.js.map +0 -1
- package/dist/chunks/config-B2BETQ-W.js.map +0 -1
- package/dist/chunks/config-BqQdQJh_.mjs.map +0 -1
- package/dist/chunks/config-CsJ2EtSs.js.map +0 -1
- package/dist/chunks/config-DHibCzCW.mjs.map +0 -1
- package/dist/chunks/index-BJFfd72y.js +0 -3185
- package/dist/chunks/index-BJFfd72y.js.map +0 -1
- package/dist/chunks/index-DL_emYoN.mjs +0 -3160
- package/dist/chunks/index-DL_emYoN.mjs.map +0 -1
- package/dist/chunks/watch-BDsNoG4h.mjs.map +0 -1
- package/dist/chunks/watch-BKW3b7Rj.js.map +0 -1
- package/dist/chunks/watch-DQJ0HV0l.mjs.map +0 -1
- package/dist/chunks/watch-DzwyHBm4.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { isString, isArray, has } from 'lodash/fp';
|
|
3
|
+
import 'inquirer';
|
|
4
|
+
import 'boxen';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Helper functions for the Strapi CLI
|
|
8
|
+
*/ const bytesPerKb = 1024;
|
|
9
|
+
const sizes = [
|
|
10
|
+
'B ',
|
|
11
|
+
'KB',
|
|
12
|
+
'MB',
|
|
13
|
+
'GB',
|
|
14
|
+
'TB',
|
|
15
|
+
'PB'
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Convert bytes to a human readable formatted string, for example "1024" becomes "1KB"
|
|
19
|
+
*/ const readableBytes = (bytes, decimals = 1, padStart = 0)=>{
|
|
20
|
+
if (!bytes) {
|
|
21
|
+
return '0';
|
|
22
|
+
}
|
|
23
|
+
const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));
|
|
24
|
+
const result = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(2)}`;
|
|
25
|
+
return result.padStart(padStart);
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* Display message(s) to console and then call process.exit with code.
|
|
30
|
+
* If code is zero, console.log and green text is used for messages, otherwise console.error and red text.
|
|
31
|
+
*
|
|
32
|
+
*/ const exitWith = (code, message, options = {})=>{
|
|
33
|
+
const { logger = console, prc = process } = options;
|
|
34
|
+
const log = (message)=>{
|
|
35
|
+
if (code === 0) {
|
|
36
|
+
logger.log(chalk.green(message));
|
|
37
|
+
} else {
|
|
38
|
+
logger.error(chalk.red(message));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
if (isString(message)) {
|
|
42
|
+
log(message);
|
|
43
|
+
} else if (isArray(message)) {
|
|
44
|
+
message.forEach((msg)=>log(msg));
|
|
45
|
+
}
|
|
46
|
+
prc.exit(code);
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* assert that a URL object has a protocol value
|
|
50
|
+
*
|
|
51
|
+
*/ const assertUrlHasProtocol = (url, protocol)=>{
|
|
52
|
+
if (!url.protocol) {
|
|
53
|
+
exitWith(1, `${url.toString()} does not have a protocol`);
|
|
54
|
+
}
|
|
55
|
+
// if just checking for the existence of a protocol, return
|
|
56
|
+
if (!protocol) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (isString(protocol)) {
|
|
60
|
+
if (protocol !== url.protocol) {
|
|
61
|
+
exitWith(1, `${url.toString()} must have the protocol ${protocol}`);
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// assume an array
|
|
66
|
+
if (!protocol.some((protocol)=>url.protocol === protocol)) {
|
|
67
|
+
return exitWith(1, `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback
|
|
72
|
+
*/ const ifOptions = (conditionCallback, isMetCallback = async ()=>{}, isNotMetCallback = async ()=>{})=>{
|
|
73
|
+
return async (command)=>{
|
|
74
|
+
const opts = command.opts();
|
|
75
|
+
if (await conditionCallback(opts)) {
|
|
76
|
+
await isMetCallback(command);
|
|
77
|
+
} else {
|
|
78
|
+
await isNotMetCallback(command);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const assertCwdContainsStrapiProject = (name)=>{
|
|
83
|
+
const logErrorAndExit = ()=>{
|
|
84
|
+
console.log(`You need to run ${chalk.yellow(`strapi ${name}`)} in a Strapi project. Make sure you are in the right directory.`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
};
|
|
87
|
+
try {
|
|
88
|
+
const pkgJSON = require(`${process.cwd()}/package.json`);
|
|
89
|
+
if (!has('dependencies.@strapi/strapi', pkgJSON) && !has('devDependencies.@strapi/strapi', pkgJSON)) {
|
|
90
|
+
logErrorAndExit();
|
|
91
|
+
}
|
|
92
|
+
} catch (err) {
|
|
93
|
+
logErrorAndExit();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const runAction = (name, action)=>(...args)=>{
|
|
97
|
+
assertCwdContainsStrapiProject(name);
|
|
98
|
+
Promise.resolve().then(()=>{
|
|
99
|
+
return action(...args);
|
|
100
|
+
}).catch((error)=>{
|
|
101
|
+
console.error(error);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export { assertCwdContainsStrapiProject, assertUrlHasProtocol, exitWith, ifOptions, readableBytes, runAction };
|
|
107
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","sources":["../../../../src/cli/utils/helpers.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport chalk from 'chalk';\nimport { has, isString, isArray } from 'lodash/fp';\nimport { prompt } from 'inquirer';\nimport boxen from 'boxen';\nimport type { Command } from 'commander';\n\n/**\n * Helper functions for the Strapi CLI\n */\nconst bytesPerKb = 1024;\nconst sizes = ['B ', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n/**\n * Convert bytes to a human readable formatted string, for example \"1024\" becomes \"1KB\"\n */\nconst readableBytes = (bytes: number, decimals = 1, padStart = 0) => {\n if (!bytes) {\n return '0';\n }\n const i = Math.floor(Math.log(bytes) / Math.log(bytesPerKb));\n const result = `${parseFloat((bytes / bytesPerKb ** i).toFixed(decimals))} ${sizes[i].padStart(\n 2\n )}`;\n\n return result.padStart(padStart);\n};\n\ninterface ExitWithOptions {\n logger?: Console;\n prc?: NodeJS.Process;\n}\n\n/**\n *\n * Display message(s) to console and then call process.exit with code.\n * If code is zero, console.log and green text is used for messages, otherwise console.error and red text.\n *\n */\nconst exitWith = (code: number, message?: string | string[], options: ExitWithOptions = {}) => {\n const { logger = console, prc = process } = options;\n\n const log = (message: string) => {\n if (code === 0) {\n logger.log(chalk.green(message));\n } else {\n logger.error(chalk.red(message));\n }\n };\n\n if (isString(message)) {\n log(message);\n } else if (isArray(message)) {\n message.forEach((msg) => log(msg));\n }\n\n prc.exit(code);\n};\n\n/**\n * assert that a URL object has a protocol value\n *\n */\nconst assertUrlHasProtocol = (url: URL, protocol?: string | string[]) => {\n if (!url.protocol) {\n exitWith(1, `${url.toString()} does not have a protocol`);\n }\n\n // if just checking for the existence of a protocol, return\n if (!protocol) {\n return;\n }\n\n if (isString(protocol)) {\n if (protocol !== url.protocol) {\n exitWith(1, `${url.toString()} must have the protocol ${protocol}`);\n }\n return;\n }\n\n // assume an array\n if (!protocol.some((protocol) => url.protocol === protocol)) {\n return exitWith(\n 1,\n `${url.toString()} must have one of the following protocols: ${protocol.join(',')}`\n );\n }\n};\n\ntype ConditionCallback = (opts: Record<string, any>) => Promise<boolean>;\ntype IsMetCallback = (command: Command) => Promise<void>;\ntype IsNotMetCallback = (command: Command) => Promise<void>;\n\n/**\n * Passes commander options to conditionCallback(). If it returns true, call isMetCallback otherwise call isNotMetCallback\n */\nconst ifOptions = (\n conditionCallback: ConditionCallback,\n isMetCallback: IsMetCallback = async () => {},\n isNotMetCallback: IsNotMetCallback = async () => {}\n) => {\n return async (command: Command) => {\n const opts = command.opts();\n if (await conditionCallback(opts)) {\n await isMetCallback(command);\n } else {\n await isNotMetCallback(command);\n }\n };\n};\n\nconst assertCwdContainsStrapiProject = (name: string) => {\n const logErrorAndExit = () => {\n console.log(\n `You need to run ${chalk.yellow(\n `strapi ${name}`\n )} in a Strapi project. Make sure you are in the right directory.`\n );\n process.exit(1);\n };\n\n try {\n const pkgJSON = require(`${process.cwd()}/package.json`);\n if (\n !has('dependencies.@strapi/strapi', pkgJSON) &&\n !has('devDependencies.@strapi/strapi', pkgJSON)\n ) {\n logErrorAndExit();\n }\n } catch (err) {\n logErrorAndExit();\n }\n};\n\nconst runAction =\n (name: string, action: (...args: any[]) => Promise<void>) =>\n (...args: unknown[]) => {\n assertCwdContainsStrapiProject(name);\n\n Promise.resolve()\n .then(() => {\n return action(...args);\n })\n .catch((error) => {\n console.error(error);\n process.exit(1);\n });\n };\n\n/**\n * @description Notify users this is an experimental command and get them to approve first\n * this can be opted out by passing `yes` as a property of the args object.\n *\n * @example\n * ```ts\n * const { notifyExperimentalCommand } = require('../utils/helpers');\n *\n * const myCommand = async ({ force }) => {\n * await notifyExperimentalCommand('plugin:build', { force });\n * }\n * ```\n */\nconst notifyExperimentalCommand = async (name: string, { force }: { force?: boolean } = {}) => {\n console.log(\n boxen(\n `The ${chalk.bold(\n chalk.underline(name)\n )} command is considered experimental, use at your own risk.`,\n {\n title: 'Warning',\n padding: 1,\n margin: 1,\n align: 'center',\n borderColor: 'yellow',\n borderStyle: 'bold',\n }\n )\n );\n\n if (!force) {\n const { confirmed } = await prompt({\n type: 'confirm',\n name: 'confirmed',\n message: 'Do you want to continue?',\n });\n\n if (!confirmed) {\n process.exit(0);\n }\n }\n};\n\nexport {\n exitWith,\n assertUrlHasProtocol,\n ifOptions,\n readableBytes,\n runAction,\n assertCwdContainsStrapiProject,\n notifyExperimentalCommand,\n};\n"],"names":["bytesPerKb","sizes","readableBytes","bytes","decimals","padStart","i","Math","floor","log","result","parseFloat","toFixed","exitWith","code","message","options","logger","console","prc","process","chalk","green","error","red","isString","isArray","forEach","msg","exit","assertUrlHasProtocol","url","protocol","toString","some","join","ifOptions","conditionCallback","isMetCallback","isNotMetCallback","command","opts","assertCwdContainsStrapiProject","name","logErrorAndExit","yellow","pkgJSON","require","cwd","has","err","runAction","action","args","Promise","resolve","then","catch"],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chalk = require('chalk');
|
|
4
|
+
var ora = require('ora');
|
|
5
|
+
var cliProgress = require('cli-progress');
|
|
6
|
+
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
var n = Object.create(null);
|
|
9
|
+
if (e) {
|
|
10
|
+
Object.keys(e).forEach(function (k) {
|
|
11
|
+
if (k !== 'default') {
|
|
12
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return e[k]; }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var cliProgress__namespace = /*#__PURE__*/_interopNamespaceDefault(cliProgress);
|
|
25
|
+
|
|
26
|
+
const silentSpinner = {
|
|
27
|
+
succeed () {
|
|
28
|
+
return this;
|
|
29
|
+
},
|
|
30
|
+
fail () {
|
|
31
|
+
return this;
|
|
32
|
+
},
|
|
33
|
+
start () {
|
|
34
|
+
return this;
|
|
35
|
+
},
|
|
36
|
+
text: '',
|
|
37
|
+
isSpinning: false
|
|
38
|
+
};
|
|
39
|
+
const silentProgressBar = {
|
|
40
|
+
start () {
|
|
41
|
+
return this;
|
|
42
|
+
},
|
|
43
|
+
stop () {
|
|
44
|
+
return this;
|
|
45
|
+
},
|
|
46
|
+
update () {
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const createLogger = (options = {})=>{
|
|
51
|
+
const { silent = false, debug = false, timestamp = true } = options;
|
|
52
|
+
const state = {
|
|
53
|
+
errors: 0,
|
|
54
|
+
warning: 0
|
|
55
|
+
};
|
|
56
|
+
return {
|
|
57
|
+
get warnings () {
|
|
58
|
+
return state.warning;
|
|
59
|
+
},
|
|
60
|
+
get errors () {
|
|
61
|
+
return state.errors;
|
|
62
|
+
},
|
|
63
|
+
debug (...args) {
|
|
64
|
+
if (silent || !debug) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
console.log(chalk.cyan(`[DEBUG]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
68
|
+
},
|
|
69
|
+
info (...args) {
|
|
70
|
+
if (silent) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
console.info(chalk.blue(`[INFO]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
74
|
+
},
|
|
75
|
+
log (...args) {
|
|
76
|
+
if (silent) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
console.info(chalk.blue(`${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
80
|
+
},
|
|
81
|
+
success (...args) {
|
|
82
|
+
if (silent) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
console.info(chalk.green(`[SUCCESS]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
86
|
+
},
|
|
87
|
+
warn (...args) {
|
|
88
|
+
state.warning += 1;
|
|
89
|
+
if (silent) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.warn(chalk.yellow(`[WARN]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
93
|
+
},
|
|
94
|
+
error (...args) {
|
|
95
|
+
state.errors += 1;
|
|
96
|
+
if (silent) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.error(chalk.red(`[ERROR]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
100
|
+
},
|
|
101
|
+
spinner (text) {
|
|
102
|
+
if (silent) {
|
|
103
|
+
return silentSpinner;
|
|
104
|
+
}
|
|
105
|
+
return ora(text);
|
|
106
|
+
},
|
|
107
|
+
progressBar (totalSize, text) {
|
|
108
|
+
if (silent) {
|
|
109
|
+
return silentProgressBar;
|
|
110
|
+
}
|
|
111
|
+
const progressBar = new cliProgress__namespace.SingleBar({
|
|
112
|
+
format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,
|
|
113
|
+
barCompleteChar: '\u2588',
|
|
114
|
+
barIncompleteChar: '\u2591',
|
|
115
|
+
hideCursor: true,
|
|
116
|
+
forceRedraw: true
|
|
117
|
+
});
|
|
118
|
+
progressBar.start(totalSize, 0);
|
|
119
|
+
return progressBar;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
exports.createLogger = createLogger;
|
|
125
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import * as cliProgress from 'cli-progress';
|
|
4
|
+
|
|
5
|
+
const silentSpinner = {
|
|
6
|
+
succeed () {
|
|
7
|
+
return this;
|
|
8
|
+
},
|
|
9
|
+
fail () {
|
|
10
|
+
return this;
|
|
11
|
+
},
|
|
12
|
+
start () {
|
|
13
|
+
return this;
|
|
14
|
+
},
|
|
15
|
+
text: '',
|
|
16
|
+
isSpinning: false
|
|
17
|
+
};
|
|
18
|
+
const silentProgressBar = {
|
|
19
|
+
start () {
|
|
20
|
+
return this;
|
|
21
|
+
},
|
|
22
|
+
stop () {
|
|
23
|
+
return this;
|
|
24
|
+
},
|
|
25
|
+
update () {
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const createLogger = (options = {})=>{
|
|
30
|
+
const { silent = false, debug = false, timestamp = true } = options;
|
|
31
|
+
const state = {
|
|
32
|
+
errors: 0,
|
|
33
|
+
warning: 0
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
get warnings () {
|
|
37
|
+
return state.warning;
|
|
38
|
+
},
|
|
39
|
+
get errors () {
|
|
40
|
+
return state.errors;
|
|
41
|
+
},
|
|
42
|
+
debug (...args) {
|
|
43
|
+
if (silent || !debug) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.cyan(`[DEBUG]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
47
|
+
},
|
|
48
|
+
info (...args) {
|
|
49
|
+
if (silent) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
console.info(chalk.blue(`[INFO]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
53
|
+
},
|
|
54
|
+
log (...args) {
|
|
55
|
+
if (silent) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.info(chalk.blue(`${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
59
|
+
},
|
|
60
|
+
success (...args) {
|
|
61
|
+
if (silent) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
console.info(chalk.green(`[SUCCESS]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
65
|
+
},
|
|
66
|
+
warn (...args) {
|
|
67
|
+
state.warning += 1;
|
|
68
|
+
if (silent) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
console.warn(chalk.yellow(`[WARN]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
72
|
+
},
|
|
73
|
+
error (...args) {
|
|
74
|
+
state.errors += 1;
|
|
75
|
+
if (silent) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.error(chalk.red(`[ERROR]${timestamp ? `\t[${new Date().toISOString()}]` : ''}`), ...args);
|
|
79
|
+
},
|
|
80
|
+
spinner (text) {
|
|
81
|
+
if (silent) {
|
|
82
|
+
return silentSpinner;
|
|
83
|
+
}
|
|
84
|
+
return ora(text);
|
|
85
|
+
},
|
|
86
|
+
progressBar (totalSize, text) {
|
|
87
|
+
if (silent) {
|
|
88
|
+
return silentProgressBar;
|
|
89
|
+
}
|
|
90
|
+
const progressBar = new cliProgress.SingleBar({
|
|
91
|
+
format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,
|
|
92
|
+
barCompleteChar: '\u2588',
|
|
93
|
+
barIncompleteChar: '\u2591',
|
|
94
|
+
hideCursor: true,
|
|
95
|
+
forceRedraw: true
|
|
96
|
+
});
|
|
97
|
+
progressBar.start(totalSize, 0);
|
|
98
|
+
return progressBar;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export { createLogger };
|
|
104
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.mjs","sources":["../../../../src/cli/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n silent?: boolean;\n debug?: boolean;\n timestamp?: boolean;\n}\n\nexport interface Logger {\n warnings: number;\n errors: number;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n success: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n log: (...args: unknown[]) => void;\n spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n progressBar: (\n totalSize: number,\n text: string\n ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst silentSpinner = {\n succeed() {\n return this;\n },\n fail() {\n return this;\n },\n start() {\n return this;\n },\n text: '',\n isSpinning: false,\n} as Ora;\n\nconst silentProgressBar = {\n start() {\n return this;\n },\n stop() {\n return this;\n },\n update() {\n return this;\n },\n} as unknown as cliProgress.SingleBar;\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n const { silent = false, debug = false, timestamp = true } = options;\n\n const state = { errors: 0, warning: 0 };\n\n return {\n get warnings() {\n return state.warning;\n },\n\n get errors() {\n return state.errors;\n },\n\n debug(...args) {\n if (silent || !debug) {\n return;\n }\n\n console.log(\n chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n info(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n log(...args) {\n if (silent) {\n return;\n }\n\n console.info(chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`), ...args);\n },\n\n success(...args) {\n if (silent) {\n return;\n }\n\n console.info(\n chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n warn(...args) {\n state.warning += 1;\n\n if (silent) {\n return;\n }\n\n console.warn(\n chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n error(...args) {\n state.errors += 1;\n\n if (silent) {\n return;\n }\n\n console.error(\n chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n ...args\n );\n },\n\n spinner(text: string) {\n if (silent) {\n return silentSpinner;\n }\n\n return ora(text);\n },\n\n progressBar(totalSize: number, text: string) {\n if (silent) {\n return silentProgressBar;\n }\n\n const progressBar = new cliProgress.SingleBar({\n format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591',\n hideCursor: true,\n forceRedraw: true,\n });\n\n progressBar.start(totalSize, 0);\n\n return progressBar;\n },\n };\n};\n\nexport { createLogger };\n"],"names":["silentSpinner","succeed","fail","start","text","isSpinning","silentProgressBar","stop","update","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","info","blue","success","green","warn","yellow","error","red","spinner","ora","progressBar","totalSize","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@strapi/utils');
|
|
4
|
+
|
|
5
|
+
const sendEvent = async (event, uuid)=>{
|
|
6
|
+
try {
|
|
7
|
+
await fetch('https://analytics.strapi.io/api/v2/track', {
|
|
8
|
+
method: 'POST',
|
|
9
|
+
body: JSON.stringify({
|
|
10
|
+
event,
|
|
11
|
+
deviceId: utils.machineID(),
|
|
12
|
+
groupProperties: {
|
|
13
|
+
projectId: uuid
|
|
14
|
+
}
|
|
15
|
+
}),
|
|
16
|
+
headers: {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
'X-Strapi-Event': event
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
} catch (e) {
|
|
22
|
+
// ...
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.sendEvent = sendEvent;
|
|
27
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { machineID } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string) => {\n try {\n await fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: machineID(),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","fetch","method","body","JSON","stringify","deviceId","machineID","groupProperties","projectId","headers","e"],"mappings":";;;;AAEO,MAAMA,SAAY,GAAA,OAAOC,KAAeC,EAAAA,IAAAA,GAAAA;IAC7C,IAAI;AACF,QAAA,MAAMC,MAAM,0CAA4C,EAAA;YACtDC,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBN,gBAAAA,KAAAA;gBACAO,QAAUC,EAAAA,eAAAA,EAAAA;gBACVC,eAAiB,EAAA;oBAAEC,SAAWT,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAU,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBX,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOY,CAAG,EAAA;;AAEZ;AACF;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { machineID } from '@strapi/utils';
|
|
2
|
+
|
|
3
|
+
const sendEvent = async (event, uuid)=>{
|
|
4
|
+
try {
|
|
5
|
+
await fetch('https://analytics.strapi.io/api/v2/track', {
|
|
6
|
+
method: 'POST',
|
|
7
|
+
body: JSON.stringify({
|
|
8
|
+
event,
|
|
9
|
+
deviceId: machineID(),
|
|
10
|
+
groupProperties: {
|
|
11
|
+
projectId: uuid
|
|
12
|
+
}
|
|
13
|
+
}),
|
|
14
|
+
headers: {
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
'X-Strapi-Event': event
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
} catch (e) {
|
|
20
|
+
// ...
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export { sendEvent };
|
|
25
|
+
//# sourceMappingURL=telemetry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.mjs","sources":["../../../../src/cli/utils/telemetry.ts"],"sourcesContent":["import { machineID } from '@strapi/utils';\n\nexport const sendEvent = async (event: string, uuid: string) => {\n try {\n await fetch('https://analytics.strapi.io/api/v2/track', {\n method: 'POST',\n body: JSON.stringify({\n event,\n deviceId: machineID(),\n groupProperties: { projectId: uuid },\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Strapi-Event': event,\n },\n });\n } catch (e) {\n // ...\n }\n};\n"],"names":["sendEvent","event","uuid","fetch","method","body","JSON","stringify","deviceId","machineID","groupProperties","projectId","headers","e"],"mappings":";;AAEO,MAAMA,SAAY,GAAA,OAAOC,KAAeC,EAAAA,IAAAA,GAAAA;IAC7C,IAAI;AACF,QAAA,MAAMC,MAAM,0CAA4C,EAAA;YACtDC,MAAQ,EAAA,MAAA;YACRC,IAAMC,EAAAA,IAAAA,CAAKC,SAAS,CAAC;AACnBN,gBAAAA,KAAAA;gBACAO,QAAUC,EAAAA,SAAAA,EAAAA;gBACVC,eAAiB,EAAA;oBAAEC,SAAWT,EAAAA;AAAK;AACrC,aAAA,CAAA;YACAU,OAAS,EAAA;gBACP,cAAgB,EAAA,kBAAA;gBAChB,gBAAkBX,EAAAA;AACpB;AACF,SAAA,CAAA;AACF,KAAA,CAAE,OAAOY,CAAG,EAAA;;AAEZ;AACF;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var os = require('os');
|
|
4
|
+
var ts = require('typescript');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description Load a tsconfig.json file and return the parsed config.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/ const loadTsConfig = ({ cwd, path, logger })=>{
|
|
11
|
+
const configPath = ts.findConfigFile(cwd, ts.sys.fileExists, path);
|
|
12
|
+
if (!configPath) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
16
|
+
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, cwd);
|
|
17
|
+
logger.debug(`Loaded user TS config:`, os.EOL, parsedConfig);
|
|
18
|
+
return {
|
|
19
|
+
config: parsedConfig,
|
|
20
|
+
path: configPath
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.loadTsConfig = loadTsConfig;
|
|
25
|
+
//# sourceMappingURL=tsconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.js","sources":["../../../../src/cli/utils/tsconfig.ts"],"sourcesContent":["import os from 'os';\nimport ts from 'typescript';\nimport type { Logger } from './logger';\n\ninterface TsConfig {\n config: ts.ParsedCommandLine;\n path: string;\n}\n\n/**\n * @description Load a tsconfig.json file and return the parsed config.\n *\n * @internal\n */\nconst loadTsConfig = ({\n cwd,\n path,\n logger,\n}: {\n cwd: string;\n path: string;\n logger: Logger;\n}): TsConfig | undefined => {\n const configPath = ts.findConfigFile(cwd, ts.sys.fileExists, path);\n\n if (!configPath) {\n return undefined;\n }\n\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n\n const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, cwd);\n\n logger.debug(`Loaded user TS config:`, os.EOL, parsedConfig);\n\n return {\n config: parsedConfig,\n path: configPath,\n };\n};\n\nexport { loadTsConfig };\nexport type { TsConfig };\n"],"names":["loadTsConfig","cwd","path","logger","configPath","ts","findConfigFile","sys","fileExists","undefined","configFile","readConfigFile","readFile","parsedConfig","parseJsonConfigFileContent","config","debug","os","EOL"],"mappings":";;;;;AASA;;;;IAKA,MAAMA,eAAe,CAAC,EACpBC,GAAG,EACHC,IAAI,EACJC,MAAM,EAKP,GAAA;IACC,MAAMC,UAAAA,GAAaC,GAAGC,cAAc,CAACL,KAAKI,EAAGE,CAAAA,GAAG,CAACC,UAAU,EAAEN,IAAAA,CAAAA;AAE7D,IAAA,IAAI,CAACE,UAAY,EAAA;QACf,OAAOK,SAAAA;AACT;IAEA,MAAMC,UAAAA,GAAaL,GAAGM,cAAc,CAACP,YAAYC,EAAGE,CAAAA,GAAG,CAACK,QAAQ,CAAA;IAEhE,MAAMC,YAAAA,GAAeR,GAAGS,0BAA0B,CAACJ,WAAWK,MAAM,EAAEV,EAAGE,CAAAA,GAAG,EAAEN,GAAAA,CAAAA;IAE9EE,MAAOa,CAAAA,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAEC,EAAAA,CAAGC,GAAG,EAAEL,YAAAA,CAAAA;IAE/C,OAAO;QACLE,MAAQF,EAAAA,YAAAA;QACRX,IAAME,EAAAA;AACR,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import os from 'os';
|
|
2
|
+
import ts from 'typescript';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @description Load a tsconfig.json file and return the parsed config.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/ const loadTsConfig = ({ cwd, path, logger })=>{
|
|
9
|
+
const configPath = ts.findConfigFile(cwd, ts.sys.fileExists, path);
|
|
10
|
+
if (!configPath) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
14
|
+
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, cwd);
|
|
15
|
+
logger.debug(`Loaded user TS config:`, os.EOL, parsedConfig);
|
|
16
|
+
return {
|
|
17
|
+
config: parsedConfig,
|
|
18
|
+
path: configPath
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { loadTsConfig };
|
|
23
|
+
//# sourceMappingURL=tsconfig.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.mjs","sources":["../../../../src/cli/utils/tsconfig.ts"],"sourcesContent":["import os from 'os';\nimport ts from 'typescript';\nimport type { Logger } from './logger';\n\ninterface TsConfig {\n config: ts.ParsedCommandLine;\n path: string;\n}\n\n/**\n * @description Load a tsconfig.json file and return the parsed config.\n *\n * @internal\n */\nconst loadTsConfig = ({\n cwd,\n path,\n logger,\n}: {\n cwd: string;\n path: string;\n logger: Logger;\n}): TsConfig | undefined => {\n const configPath = ts.findConfigFile(cwd, ts.sys.fileExists, path);\n\n if (!configPath) {\n return undefined;\n }\n\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n\n const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, cwd);\n\n logger.debug(`Loaded user TS config:`, os.EOL, parsedConfig);\n\n return {\n config: parsedConfig,\n path: configPath,\n };\n};\n\nexport { loadTsConfig };\nexport type { TsConfig };\n"],"names":["loadTsConfig","cwd","path","logger","configPath","ts","findConfigFile","sys","fileExists","undefined","configFile","readConfigFile","readFile","parsedConfig","parseJsonConfigFileContent","config","debug","os","EOL"],"mappings":";;;AASA;;;;IAKA,MAAMA,eAAe,CAAC,EACpBC,GAAG,EACHC,IAAI,EACJC,MAAM,EAKP,GAAA;IACC,MAAMC,UAAAA,GAAaC,GAAGC,cAAc,CAACL,KAAKI,EAAGE,CAAAA,GAAG,CAACC,UAAU,EAAEN,IAAAA,CAAAA;AAE7D,IAAA,IAAI,CAACE,UAAY,EAAA;QACf,OAAOK,SAAAA;AACT;IAEA,MAAMC,UAAAA,GAAaL,GAAGM,cAAc,CAACP,YAAYC,EAAGE,CAAAA,GAAG,CAACK,QAAQ,CAAA;IAEhE,MAAMC,YAAAA,GAAeR,GAAGS,0BAA0B,CAACJ,WAAWK,MAAM,EAAEV,EAAGE,CAAAA,GAAG,EAAEN,GAAAA,CAAAA;IAE9EE,MAAOa,CAAAA,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAEC,EAAAA,CAAGC,GAAG,EAAEL,YAAAA,CAAAA;IAE/C,OAAO;QACLE,MAAQF,EAAAA,YAAAA;QACRX,IAAME,EAAAA;AACR,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tsUtils = require('@strapi/typescript-utils');
|
|
4
|
+
var dependencies = require('./core/dependencies.js');
|
|
5
|
+
var timer = require('./core/timer.js');
|
|
6
|
+
var createBuildContext = require('./create-build-context.js');
|
|
7
|
+
var staticFiles = require('./staticFiles.js');
|
|
8
|
+
|
|
9
|
+
function _interopNamespaceDefault(e) {
|
|
10
|
+
var n = Object.create(null);
|
|
11
|
+
if (e) {
|
|
12
|
+
Object.keys(e).forEach(function (k) {
|
|
13
|
+
if (k !== 'default') {
|
|
14
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return e[k]; }
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var tsUtils__namespace = /*#__PURE__*/_interopNamespaceDefault(tsUtils);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @example `$ strapi build`
|
|
30
|
+
*
|
|
31
|
+
* @description Builds the admin panel of the strapi application.
|
|
32
|
+
*/ const build = async ({ logger, cwd, tsconfig, ...options })=>{
|
|
33
|
+
const timer$1 = timer.getTimer();
|
|
34
|
+
const { didInstall } = await dependencies.checkRequiredDependencies({
|
|
35
|
+
cwd,
|
|
36
|
+
logger
|
|
37
|
+
}).catch((err)=>{
|
|
38
|
+
logger.error(err.message);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
});
|
|
41
|
+
if (didInstall) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (tsconfig?.config) {
|
|
45
|
+
timer$1.start('compilingTS');
|
|
46
|
+
const compilingTsSpinner = logger.spinner(`Compiling TS`).start();
|
|
47
|
+
tsUtils__namespace.compile(cwd, {
|
|
48
|
+
configOptions: {
|
|
49
|
+
ignoreDiagnostics: false
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const compilingDuration = timer$1.end('compilingTS');
|
|
53
|
+
compilingTsSpinner.text = `Compiling TS (${timer.prettyTime(compilingDuration)})`;
|
|
54
|
+
compilingTsSpinner.succeed();
|
|
55
|
+
}
|
|
56
|
+
timer$1.start('createBuildContext');
|
|
57
|
+
const contextSpinner = logger.spinner(`Building build context`).start();
|
|
58
|
+
console.log('');
|
|
59
|
+
const ctx = await createBuildContext.createBuildContext({
|
|
60
|
+
cwd,
|
|
61
|
+
logger,
|
|
62
|
+
tsconfig,
|
|
63
|
+
options
|
|
64
|
+
});
|
|
65
|
+
const contextDuration = timer$1.end('createBuildContext');
|
|
66
|
+
contextSpinner.text = `Building build context (${timer.prettyTime(contextDuration)})`;
|
|
67
|
+
contextSpinner.succeed();
|
|
68
|
+
timer$1.start('buildAdmin');
|
|
69
|
+
const buildingSpinner = logger.spinner(`Building admin panel`).start();
|
|
70
|
+
console.log('');
|
|
71
|
+
try {
|
|
72
|
+
await staticFiles.writeStaticClientFiles(ctx);
|
|
73
|
+
if (ctx.bundler === 'webpack') {
|
|
74
|
+
const { build: buildWebpack } = await Promise.resolve().then(function () { return require('./webpack/build.js'); });
|
|
75
|
+
await buildWebpack(ctx);
|
|
76
|
+
} else if (ctx.bundler === 'vite') {
|
|
77
|
+
const { build: buildVite } = await Promise.resolve().then(function () { return require('./vite/build.js'); });
|
|
78
|
+
await buildVite(ctx);
|
|
79
|
+
}
|
|
80
|
+
const buildDuration = timer$1.end('buildAdmin');
|
|
81
|
+
buildingSpinner.text = `Building admin panel (${timer.prettyTime(buildDuration)})`;
|
|
82
|
+
buildingSpinner.succeed();
|
|
83
|
+
} catch (err) {
|
|
84
|
+
buildingSpinner.fail();
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
exports.build = build;
|
|
90
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sources":["../../../src/node/build.ts"],"sourcesContent":["import * as tsUtils from '@strapi/typescript-utils';\nimport type { CLIContext } from '../cli/types';\nimport { checkRequiredDependencies } from './core/dependencies';\nimport { getTimer, prettyTime } from './core/timer';\nimport { createBuildContext } from './create-build-context';\nimport { writeStaticClientFiles } from './staticFiles';\n\ninterface BuildOptions extends CLIContext {\n /**\n * Which bundler to use for building.\n *\n * @default webpack\n */\n bundler?: 'webpack' | 'vite';\n /**\n * Minify the output\n *\n * @default true\n */\n minify?: boolean;\n /**\n * Generate sourcemaps – useful for debugging bugs in the admin panel UI.\n */\n sourcemaps?: boolean;\n /**\n * Print stats for build\n */\n stats?: boolean;\n}\n\n/**\n * @example `$ strapi build`\n *\n * @description Builds the admin panel of the strapi application.\n */\nconst build = async ({ logger, cwd, tsconfig, ...options }: BuildOptions) => {\n const timer = getTimer();\n\n const { didInstall } = await checkRequiredDependencies({ cwd, logger }).catch((err) => {\n logger.error(err.message);\n process.exit(1);\n });\n\n if (didInstall) {\n return;\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n const compilingTsSpinner = logger.spinner(`Compiling TS`).start();\n\n tsUtils.compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${prettyTime(compilingDuration)})`;\n compilingTsSpinner.succeed();\n }\n\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('buildAdmin');\n const buildingSpinner = logger.spinner(`Building admin panel`).start();\n console.log('');\n\n try {\n await writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { build: buildWebpack } = await import('./webpack/build');\n await buildWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { build: buildVite } = await import('./vite/build');\n await buildVite(ctx);\n }\n\n const buildDuration = timer.end('buildAdmin');\n buildingSpinner.text = `Building admin panel (${prettyTime(buildDuration)})`;\n buildingSpinner.succeed();\n } catch (err) {\n buildingSpinner.fail();\n throw err;\n }\n};\n\nexport { build };\nexport type { BuildOptions };\n"],"names":["build","logger","cwd","tsconfig","options","timer","getTimer","didInstall","checkRequiredDependencies","catch","err","error","message","process","exit","config","start","compilingTsSpinner","spinner","tsUtils","compile","configOptions","ignoreDiagnostics","compilingDuration","end","text","prettyTime","succeed","contextSpinner","console","log","ctx","createBuildContext","contextDuration","buildingSpinner","writeStaticClientFiles","bundler","buildWebpack","buildVite","buildDuration","fail"],"mappings":"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"}
|