@strapi/strapi 5.48.1 → 5.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin.d.ts +0 -1
- package/dist/admin.d.ts.map +1 -1
- package/dist/admin.js +17 -7
- package/dist/admin.js.map +1 -1
- package/dist/cli/commands/admin/active-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/block-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/create-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/delete-user.d.ts.map +1 -1
- package/dist/cli/commands/admin/reset-user-password.d.ts.map +1 -1
- package/dist/cli/commands/configuration/dump.d.ts.map +1 -1
- package/dist/cli/commands/configuration/restore.d.ts.map +1 -1
- package/dist/cli/commands/export/action.d.ts.map +1 -1
- package/dist/cli/commands/import/action.d.ts.map +1 -1
- package/dist/cli/commands/openapi/generate.d.ts.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/transfer/action.d.ts.map +1 -1
- package/dist/cli/commands/ts/generate-types.d.ts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/utils/commander.d.ts.map +1 -1
- package/dist/cli/utils/data-transfer.d.ts +1 -1
- package/dist/cli/utils/data-transfer.d.ts.map +1 -1
- package/dist/cli/utils/helpers.d.ts +0 -1
- package/dist/cli/utils/helpers.d.ts.map +1 -1
- package/dist/cli/utils/logger.d.ts.map +1 -1
- package/dist/cli/utils/pkg.d.ts.map +1 -1
- package/dist/cli/utils/telemetry.d.ts.map +1 -1
- package/dist/cli/utils/try-quick-outdir.d.ts +12 -0
- package/dist/cli/utils/try-quick-outdir.d.ts.map +1 -0
- package/dist/cli/utils/tsconfig.d.ts +1 -1
- package/dist/cli/utils/tsconfig.d.ts.map +1 -1
- package/dist/cli.js +18 -7
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +18 -7
- package/dist/cli.mjs.map +1 -1
- package/dist/load/package-path.d.ts.map +1 -1
- package/dist/node/build.d.ts.map +1 -1
- package/dist/node/core/admin-customisations.d.ts +1 -1
- package/dist/node/core/admin-customisations.d.ts.map +1 -1
- package/dist/node/core/aliases.d.ts.map +1 -1
- package/dist/node/core/config.d.ts.map +1 -1
- package/dist/node/core/dependencies.d.ts.map +1 -1
- package/dist/node/core/ensure-admin-dependencies.d.ts.map +1 -1
- package/dist/node/core/env.d.ts.map +1 -1
- package/dist/node/core/errors.d.ts.map +1 -1
- package/dist/node/core/files.d.ts.map +1 -1
- package/dist/node/core/linked-packages.d.ts.map +1 -1
- package/dist/node/core/plugins.d.ts +4 -4
- package/dist/node/core/plugins.d.ts.map +1 -1
- package/dist/node/core/resolve-module.d.ts.map +1 -1
- package/dist/node/core/timer.d.ts.map +1 -1
- package/dist/node/create-build-context.d.ts +0 -4
- package/dist/node/create-build-context.d.ts.map +1 -1
- package/dist/node/develop.d.ts.map +1 -1
- package/dist/node/staticFiles.d.ts.map +1 -1
- package/dist/node/vite/build.d.ts.map +1 -1
- package/dist/node/vite/config.d.ts.map +1 -1
- package/dist/node/vite/plugins.d.ts.map +1 -1
- package/dist/node/vite/resolve-development-config.test.d.ts +2 -0
- package/dist/node/vite/resolve-development-config.test.d.ts.map +1 -0
- package/dist/node/vite/watch.d.ts.map +1 -1
- package/dist/node/webpack/build.d.ts.map +1 -1
- package/dist/node/webpack/config.d.ts.map +1 -1
- package/dist/node/webpack/watch.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/admin/active-user.js +6 -2
- package/dist/src/cli/commands/admin/active-user.js.map +1 -1
- package/dist/src/cli/commands/admin/block-user.js +6 -2
- package/dist/src/cli/commands/admin/block-user.js.map +1 -1
- package/dist/src/cli/commands/admin/create-user.js +5 -1
- package/dist/src/cli/commands/admin/create-user.js.map +1 -1
- package/dist/src/cli/commands/admin/delete-user.js +6 -2
- package/dist/src/cli/commands/admin/delete-user.js.map +1 -1
- package/dist/src/cli/commands/admin/list-users.js +16 -11
- package/dist/src/cli/commands/admin/list-users.js.map +1 -1
- package/dist/src/cli/commands/admin/reset-user-password.js +6 -2
- package/dist/src/cli/commands/admin/reset-user-password.js.map +1 -1
- package/dist/src/cli/commands/components/list.js +7 -2
- package/dist/src/cli/commands/components/list.js.map +1 -1
- package/dist/src/cli/commands/configuration/dump.js +5 -1
- package/dist/src/cli/commands/configuration/dump.js.map +1 -1
- package/dist/src/cli/commands/configuration/restore.js +8 -3
- package/dist/src/cli/commands/configuration/restore.js.map +1 -1
- package/dist/src/cli/commands/console.js +5 -1
- package/dist/src/cli/commands/console.js.map +1 -1
- package/dist/src/cli/commands/content-types/list.js +7 -2
- package/dist/src/cli/commands/content-types/list.js.map +1 -1
- package/dist/src/cli/commands/controllers/list.js +7 -2
- package/dist/src/cli/commands/controllers/list.js.map +1 -1
- package/dist/src/cli/commands/develop.js +5 -1
- package/dist/src/cli/commands/develop.js.map +1 -1
- package/dist/src/cli/commands/export/action.js +11 -5
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/hooks/list.js +7 -2
- package/dist/src/cli/commands/hooks/list.js.map +1 -1
- package/dist/src/cli/commands/import/action.js +7 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/command.js +6 -2
- package/dist/src/cli/commands/import/command.js.map +1 -1
- package/dist/src/cli/commands/middlewares/list.js +7 -2
- package/dist/src/cli/commands/middlewares/list.js.map +1 -1
- package/dist/src/cli/commands/openapi/generate.js +17 -11
- package/dist/src/cli/commands/openapi/generate.js.map +1 -1
- package/dist/src/cli/commands/policies/list.js +7 -2
- package/dist/src/cli/commands/policies/list.js.map +1 -1
- package/dist/src/cli/commands/routes/list.js +8 -3
- package/dist/src/cli/commands/routes/list.js.map +1 -1
- package/dist/src/cli/commands/services/list.js +7 -2
- package/dist/src/cli/commands/services/list.js.map +1 -1
- package/dist/src/cli/commands/start.js +27 -6
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/commands/start.mjs +22 -6
- package/dist/src/cli/commands/start.mjs.map +1 -1
- package/dist/src/cli/commands/telemetry/disable.js +14 -9
- package/dist/src/cli/commands/telemetry/disable.js.map +1 -1
- package/dist/src/cli/commands/telemetry/enable.js +14 -9
- package/dist/src/cli/commands/telemetry/enable.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +5 -1
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/ts/generate-types.js +7 -4
- package/dist/src/cli/commands/ts/generate-types.js.map +1 -1
- package/dist/src/cli/commands/ts/generate-types.mjs +6 -3
- package/dist/src/cli/commands/ts/generate-types.mjs.map +1 -1
- package/dist/src/cli/utils/commander.js +5 -1
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +28 -21
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/helpers.js +7 -3
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/logger.js +15 -10
- package/dist/src/cli/utils/logger.js.map +1 -1
- package/dist/src/cli/utils/try-quick-outdir.js +80 -0
- package/dist/src/cli/utils/try-quick-outdir.js.map +1 -0
- package/dist/src/cli/utils/try-quick-outdir.mjs +72 -0
- package/dist/src/cli/utils/try-quick-outdir.mjs.map +1 -0
- package/dist/src/cli/utils/tsconfig.js +18 -5
- package/dist/src/cli/utils/tsconfig.js.map +1 -1
- package/dist/src/cli/utils/tsconfig.mjs +13 -4
- package/dist/src/cli/utils/tsconfig.mjs.map +1 -1
- package/dist/src/node/build.js +3 -2
- package/dist/src/node/build.js.map +1 -1
- package/dist/src/node/core/admin-customisations.js +6 -2
- package/dist/src/node/core/admin-customisations.js.map +1 -1
- package/dist/src/node/core/aliases.js +5 -1
- package/dist/src/node/core/aliases.js.map +1 -1
- package/dist/src/node/core/config.js +5 -1
- package/dist/src/node/core/config.js.map +1 -1
- package/dist/src/node/core/dependencies.js +33 -22
- package/dist/src/node/core/dependencies.js.map +1 -1
- package/dist/src/node/core/ensure-admin-dependencies.js +5 -1
- package/dist/src/node/core/ensure-admin-dependencies.js.map +1 -1
- package/dist/src/node/core/env.js +7 -2
- package/dist/src/node/core/env.js.map +1 -1
- package/dist/src/node/core/errors.js +9 -3
- package/dist/src/node/core/errors.js.map +1 -1
- package/dist/src/node/core/files.js +6 -2
- package/dist/src/node/core/files.js.map +1 -1
- package/dist/src/node/core/linked-packages.js +5 -1
- package/dist/src/node/core/linked-packages.js.map +1 -1
- package/dist/src/node/core/monorepo.js +8 -3
- package/dist/src/node/core/monorepo.js.map +1 -1
- package/dist/src/node/core/plugins.js +17 -10
- package/dist/src/node/core/plugins.js.map +1 -1
- package/dist/src/node/core/resolve-module.js +8 -3
- package/dist/src/node/core/resolve-module.js.map +1 -1
- package/dist/src/node/create-build-context.js +16 -9
- package/dist/src/node/create-build-context.js.map +1 -1
- package/dist/src/node/create-build-context.mjs.map +1 -1
- package/dist/src/node/develop.js +14 -8
- package/dist/src/node/develop.js.map +1 -1
- package/dist/src/node/staticFiles.js +11 -5
- package/dist/src/node/staticFiles.js.map +1 -1
- package/dist/src/node/vite/config.js +14 -3
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +9 -2
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/dist/src/node/vite/watch.js +7 -62
- package/dist/src/node/vite/watch.js.map +1 -1
- package/dist/src/node/vite/watch.mjs +2 -62
- package/dist/src/node/vite/watch.mjs.map +1 -1
- package/dist/src/node/webpack/build.js +5 -1
- package/dist/src/node/webpack/build.js.map +1 -1
- package/dist/src/node/webpack/config.js +17 -8
- package/dist/src/node/webpack/config.js.map +1 -1
- package/dist/src/node/webpack/watch.js +11 -4
- package/dist/src/node/webpack/watch.js.map +1 -1
- package/dist/test/mocks/inquirer.d.ts +0 -1
- package/dist/test/mocks/inquirer.d.ts.map +1 -1
- package/package.json +24 -25
|
@@ -10,22 +10,33 @@ var execa = require('execa');
|
|
|
10
10
|
var readPkgUp = require('read-pkg-up');
|
|
11
11
|
var managers = require('./managers.js');
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
16
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
17
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
18
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
19
|
+
var semver__default = /*#__PURE__*/_interopDefault(semver);
|
|
20
|
+
var resolveFrom__default = /*#__PURE__*/_interopDefault(resolveFrom);
|
|
21
|
+
var execa__default = /*#__PURE__*/_interopDefault(execa);
|
|
22
|
+
var readPkgUp__default = /*#__PURE__*/_interopDefault(readPkgUp);
|
|
23
|
+
|
|
24
|
+
const CACHE_PATH = path__default.default.join('node_modules', '.strapi', 'deps-check.hash');
|
|
14
25
|
const hashPackageJson = async (cwd)=>{
|
|
15
26
|
try {
|
|
16
|
-
const content = await
|
|
17
|
-
return
|
|
27
|
+
const content = await fs__default.default.readFile(path__default.default.join(cwd, 'package.json'), 'utf8');
|
|
28
|
+
return crypto__default.default.createHash('sha1').update(content).digest('hex');
|
|
18
29
|
} catch {
|
|
19
30
|
return null;
|
|
20
31
|
}
|
|
21
32
|
};
|
|
22
|
-
const readCachedHash = (cwd)=>
|
|
33
|
+
const readCachedHash = (cwd)=>fs__default.default.readFile(path__default.default.join(cwd, CACHE_PATH), 'utf8').catch(()=>null);
|
|
23
34
|
const writeCachedHash = async (cwd, hash)=>{
|
|
24
35
|
try {
|
|
25
|
-
await
|
|
36
|
+
await fs__default.default.mkdir(path__default.default.dirname(path__default.default.join(cwd, CACHE_PATH)), {
|
|
26
37
|
recursive: true
|
|
27
38
|
});
|
|
28
|
-
await
|
|
39
|
+
await fs__default.default.writeFile(path__default.default.join(cwd, CACHE_PATH), hash, 'utf8');
|
|
29
40
|
} catch {
|
|
30
41
|
// best-effort cache write — silently ignore
|
|
31
42
|
}
|
|
@@ -46,7 +57,7 @@ class MissingAdminPeerDepsError extends Error {
|
|
|
46
57
|
}
|
|
47
58
|
}
|
|
48
59
|
const loadProjectPackageJson = async (cwd)=>{
|
|
49
|
-
const pkg = await
|
|
60
|
+
const pkg = await readPkgUp__default.default({
|
|
50
61
|
cwd
|
|
51
62
|
});
|
|
52
63
|
if (!pkg) {
|
|
@@ -97,8 +108,8 @@ const getInstallCommandHint = (missing)=>{
|
|
|
97
108
|
return `npm install --legacy-peer-deps --save ${packages}`;
|
|
98
109
|
};
|
|
99
110
|
const reportMissingAdminPeerDeps = (logger, missing)=>{
|
|
100
|
-
logger.error('The Strapi admin is missing required dependencies:',
|
|
101
|
-
logger.error('Please install them manually before re-running this command:',
|
|
111
|
+
logger.error('The Strapi admin is missing required dependencies:', os__default.default.EOL, missing.map(({ name, wantedVersion })=>` - ${name}@${wantedVersion}`).join(os__default.default.EOL));
|
|
112
|
+
logger.error('Please install them manually before re-running this command:', os__default.default.EOL, ` ${getInstallCommandHint(missing)}`);
|
|
102
113
|
};
|
|
103
114
|
/**
|
|
104
115
|
* Validates declared admin peer dependencies (versions and node_modules presence).
|
|
@@ -108,35 +119,35 @@ const reportMissingAdminPeerDeps = (logger, missing)=>{
|
|
|
108
119
|
if (!declared.length) {
|
|
109
120
|
return;
|
|
110
121
|
}
|
|
111
|
-
logger.debug('Loaded package.json:',
|
|
122
|
+
logger.debug('Loaded package.json:', os__default.default.EOL, pkg.packageJson);
|
|
112
123
|
const errors = [];
|
|
113
124
|
for (const dep of declared){
|
|
114
125
|
let minDeclaredVersion = null;
|
|
115
126
|
try {
|
|
116
|
-
minDeclaredVersion =
|
|
127
|
+
minDeclaredVersion = semver__default.default.minVersion(dep.declaredVersion);
|
|
117
128
|
} catch (err) {
|
|
118
129
|
// Intentional fall-through (variable will be left as null, throwing below)
|
|
119
130
|
}
|
|
120
131
|
if (!minDeclaredVersion) {
|
|
121
132
|
errors.push(`The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`);
|
|
122
|
-
} else if (!
|
|
133
|
+
} else if (!semver__default.default.satisfies(minDeclaredVersion, dep.wantedVersion)) {
|
|
123
134
|
logger.warn([
|
|
124
135
|
`Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,
|
|
125
136
|
'You may experience issues, we recommend you change this.'
|
|
126
|
-
].join(
|
|
137
|
+
].join(os__default.default.EOL));
|
|
127
138
|
}
|
|
128
139
|
const installedVersion = await getModuleVersion(dep.name, cwd);
|
|
129
140
|
if (!installedVersion) {
|
|
130
141
|
errors.push(`The declared dependency, ${dep.name} is not installed. You should install before re-running this command`);
|
|
131
|
-
} else if (!
|
|
142
|
+
} else if (!semver__default.default.satisfies(installedVersion, dep.wantedVersion)) {
|
|
132
143
|
logger.warn([
|
|
133
144
|
`Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,
|
|
134
145
|
'You may experience issues, we recommend you change this.'
|
|
135
|
-
].join(
|
|
146
|
+
].join(os__default.default.EOL));
|
|
136
147
|
}
|
|
137
148
|
}
|
|
138
149
|
if (errors.length > 0 && process.env.NODE_ENV === 'development') {
|
|
139
|
-
throw new Error(`${
|
|
150
|
+
throw new Error(`${os__default.default.EOL}- ${errors.join(`${os__default.default.EOL}- `)}`);
|
|
140
151
|
}
|
|
141
152
|
};
|
|
142
153
|
const installAdminPeerDeps = async (missing, { cwd, logger })=>{
|
|
@@ -160,14 +171,14 @@ const installAdminPeerDeps = async (missing, { cwd, logger })=>{
|
|
|
160
171
|
...packages
|
|
161
172
|
];
|
|
162
173
|
logger.info(`Running 'npm ${npmArgs.join(' ')}'`);
|
|
163
|
-
result = await
|
|
174
|
+
result = await execa__default.default('npm', npmArgs, execOptions);
|
|
164
175
|
} else if (packageManager === 'yarn') {
|
|
165
176
|
const yarnArgs = [
|
|
166
177
|
'add',
|
|
167
178
|
...packages
|
|
168
179
|
];
|
|
169
180
|
logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);
|
|
170
|
-
result = await
|
|
181
|
+
result = await execa__default.default('yarn', yarnArgs, execOptions);
|
|
171
182
|
} else if (packageManager === 'pnpm') {
|
|
172
183
|
const pnpmArgs = [
|
|
173
184
|
'add',
|
|
@@ -175,7 +186,7 @@ const installAdminPeerDeps = async (missing, { cwd, logger })=>{
|
|
|
175
186
|
...packages
|
|
176
187
|
];
|
|
177
188
|
logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);
|
|
178
|
-
result = await
|
|
189
|
+
result = await execa__default.default('pnpm', pnpmArgs, execOptions);
|
|
179
190
|
}
|
|
180
191
|
if (result?.exitCode || result?.failed) {
|
|
181
192
|
throw new Error('Package installation failed');
|
|
@@ -186,17 +197,17 @@ const reexecCurrentCommand = async (cwd)=>{
|
|
|
186
197
|
/**
|
|
187
198
|
* Re-run the same command after installation e.g. strapi build because the yarn.lock might
|
|
188
199
|
* not be the same and could break installations. It's not the best solution, but it works.
|
|
189
|
-
*/ await
|
|
200
|
+
*/ await execa__default.default(file, args, {
|
|
190
201
|
cwd,
|
|
191
202
|
stdio: 'inherit'
|
|
192
203
|
});
|
|
193
204
|
};
|
|
194
205
|
const getModule = async (name, cwd)=>{
|
|
195
|
-
const modulePackagePath =
|
|
206
|
+
const modulePackagePath = resolveFrom__default.default.silent(cwd, path__default.default.join(name, 'package.json'));
|
|
196
207
|
if (!modulePackagePath) {
|
|
197
208
|
return null;
|
|
198
209
|
}
|
|
199
|
-
const file = await
|
|
210
|
+
const file = await fs__default.default.readFile(modulePackagePath, 'utf8').then((res)=>JSON.parse(res));
|
|
200
211
|
return file;
|
|
201
212
|
};
|
|
202
213
|
const getModuleVersion = async (name, cwd)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n return `npm install --legacy-peer-deps --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n return `npm install --legacy-peer-deps --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--legacy-peer-deps', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
var os = require('node:os');
|
|
4
4
|
var dependencies = require('./dependencies.js');
|
|
5
5
|
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
9
|
+
|
|
6
10
|
/**
|
|
7
11
|
* Ensures admin peer dependencies are declared (and optionally auto-installed).
|
|
8
12
|
*
|
|
@@ -30,7 +34,7 @@ var dependencies = require('./dependencies.js');
|
|
|
30
34
|
const missing = await dependencies.findUndeclaredAdminPeerDeps(cwd);
|
|
31
35
|
if (missing.length > 0) {
|
|
32
36
|
if (installIfMissing) {
|
|
33
|
-
logger.info('The Strapi admin needs to install the following dependencies:',
|
|
37
|
+
logger.info('The Strapi admin needs to install the following dependencies:', os__default.default.EOL, missing.map(({ name, wantedVersion })=>` - ${name}@${wantedVersion}`).join(os__default.default.EOL));
|
|
34
38
|
await dependencies.installAdminPeerDeps(missing, {
|
|
35
39
|
cwd,
|
|
36
40
|
logger
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-admin-dependencies.js","sources":["../../../../src/node/core/ensure-admin-dependencies.ts"],"sourcesContent":["import os from 'node:os';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport {\n findUndeclaredAdminPeerDeps,\n hashPackageJson,\n installAdminPeerDeps,\n MissingAdminPeerDepsError,\n readCachedHash,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n writeCachedHash,\n} from './dependencies';\n\ninterface EnsureAdminDependenciesOptions {\n cwd: string;\n logger: Logger;\n installIfMissing: boolean;\n}\n\ninterface EnsureAdminDependenciesResult {\n didInstall: boolean;\n}\n\n/**\n * Ensures admin peer dependencies are declared (and optionally auto-installed).\n *\n * Policy (`installIfMissing`) is decided by the caller — e.g. build vs develop CLI flags.\n * Checking and installation are command-agnostic.\n */\nconst ensureAdminDependencies = async ({\n cwd,\n logger,\n installIfMissing,\n}: EnsureAdminDependenciesOptions): Promise<EnsureAdminDependenciesResult> => {\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n // Hash-cache: skip the full check when package.json hasn't changed since\n // the last successful pass. The cache lives under node_modules so it's\n // already gitignored and disposable (a `yarn install` wipe re-runs it).\n const currentHash = await hashPackageJson(cwd);\n if (currentHash) {\n const cachedHash = await readCachedHash(cwd);\n if (cachedHash === currentHash) {\n return { didInstall: false };\n }\n }\n\n const missing = await findUndeclaredAdminPeerDeps(cwd);\n\n if (missing.length > 0) {\n if (installIfMissing) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installAdminPeerDeps(missing, { cwd, logger });\n await reexecCurrentCommand(cwd);\n\n return { didInstall: true };\n }\n\n reportMissingAdminPeerDeps(logger, missing);\n throw new MissingAdminPeerDepsError(missing);\n }\n\n await validateDeclaredAdminPeerDeps(cwd, logger);\n\n if (currentHash) {\n await writeCachedHash(cwd, currentHash);\n }\n\n return { didInstall: false };\n};\n\n/**\n * Runs {@link ensureAdminDependencies} and exits the process on failure.\n *\n * @returns `true` when the caller should continue, `false` when a re-exec was triggered.\n */\nconst handleAdminDependencies = async (\n options: EnsureAdminDependenciesOptions\n): Promise<boolean> => {\n try {\n const { didInstall } = await ensureAdminDependencies(options);\n\n return !didInstall;\n } catch (err) {\n options.logger.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n};\n\nexport { ensureAdminDependencies, handleAdminDependencies };\nexport type { EnsureAdminDependenciesOptions, EnsureAdminDependenciesResult };\n"],"names":["ensureAdminDependencies","cwd","logger","installIfMissing","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","currentHash","hashPackageJson","cachedHash","readCachedHash","missing","findUndeclaredAdminPeerDeps","length","info","os","EOL","map","name","wantedVersion","join","installAdminPeerDeps","reexecCurrentCommand","reportMissingAdminPeerDeps","MissingAdminPeerDepsError","validateDeclaredAdminPeerDeps","writeCachedHash","handleAdminDependencies","options","err","error","Error","message","String","exit"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensure-admin-dependencies.js","sources":["../../../../src/node/core/ensure-admin-dependencies.ts"],"sourcesContent":["import os from 'node:os';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport {\n findUndeclaredAdminPeerDeps,\n hashPackageJson,\n installAdminPeerDeps,\n MissingAdminPeerDepsError,\n readCachedHash,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n writeCachedHash,\n} from './dependencies';\n\ninterface EnsureAdminDependenciesOptions {\n cwd: string;\n logger: Logger;\n installIfMissing: boolean;\n}\n\ninterface EnsureAdminDependenciesResult {\n didInstall: boolean;\n}\n\n/**\n * Ensures admin peer dependencies are declared (and optionally auto-installed).\n *\n * Policy (`installIfMissing`) is decided by the caller — e.g. build vs develop CLI flags.\n * Checking and installation are command-agnostic.\n */\nconst ensureAdminDependencies = async ({\n cwd,\n logger,\n installIfMissing,\n}: EnsureAdminDependenciesOptions): Promise<EnsureAdminDependenciesResult> => {\n if (process.env.USE_EXPERIMENTAL_DEPENDENCIES === 'true') {\n logger.warn('You are using experimental dependencies that may not be compatible with Strapi.');\n return { didInstall: false };\n }\n\n // Hash-cache: skip the full check when package.json hasn't changed since\n // the last successful pass. The cache lives under node_modules so it's\n // already gitignored and disposable (a `yarn install` wipe re-runs it).\n const currentHash = await hashPackageJson(cwd);\n if (currentHash) {\n const cachedHash = await readCachedHash(cwd);\n if (cachedHash === currentHash) {\n return { didInstall: false };\n }\n }\n\n const missing = await findUndeclaredAdminPeerDeps(cwd);\n\n if (missing.length > 0) {\n if (installIfMissing) {\n logger.info(\n 'The Strapi admin needs to install the following dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n\n await installAdminPeerDeps(missing, { cwd, logger });\n await reexecCurrentCommand(cwd);\n\n return { didInstall: true };\n }\n\n reportMissingAdminPeerDeps(logger, missing);\n throw new MissingAdminPeerDepsError(missing);\n }\n\n await validateDeclaredAdminPeerDeps(cwd, logger);\n\n if (currentHash) {\n await writeCachedHash(cwd, currentHash);\n }\n\n return { didInstall: false };\n};\n\n/**\n * Runs {@link ensureAdminDependencies} and exits the process on failure.\n *\n * @returns `true` when the caller should continue, `false` when a re-exec was triggered.\n */\nconst handleAdminDependencies = async (\n options: EnsureAdminDependenciesOptions\n): Promise<boolean> => {\n try {\n const { didInstall } = await ensureAdminDependencies(options);\n\n return !didInstall;\n } catch (err) {\n options.logger.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n};\n\nexport { ensureAdminDependencies, handleAdminDependencies };\nexport type { EnsureAdminDependenciesOptions, EnsureAdminDependenciesResult };\n"],"names":["ensureAdminDependencies","cwd","logger","installIfMissing","process","env","USE_EXPERIMENTAL_DEPENDENCIES","warn","didInstall","currentHash","hashPackageJson","cachedHash","readCachedHash","missing","findUndeclaredAdminPeerDeps","length","info","os","EOL","map","name","wantedVersion","join","installAdminPeerDeps","reexecCurrentCommand","reportMissingAdminPeerDeps","MissingAdminPeerDepsError","validateDeclaredAdminPeerDeps","writeCachedHash","handleAdminDependencies","options","err","error","Error","message","String","exit"],"mappings":";;;;;;;;;AAyBA;;;;;IAMA,MAAMA,0BAA0B,OAAO,EACrCC,GAAG,EACHC,MAAM,EACNC,gBAAgB,EACe,GAAA;AAC/B,IAAA,IAAIC,OAAAA,CAAQC,GAAG,CAACC,6BAA6B,KAAK,MAAA,EAAQ;AACxDJ,QAAAA,MAAAA,CAAOK,IAAI,CAAC,iFAAA,CAAA;QACZ,OAAO;YAAEC,UAAAA,EAAY;AAAM,SAAA;AAC7B,IAAA;;;;IAKA,MAAMC,WAAAA,GAAc,MAAMC,4BAAAA,CAAgBT,GAAAA,CAAAA;AAC1C,IAAA,IAAIQ,WAAAA,EAAa;QACf,MAAME,UAAAA,GAAa,MAAMC,2BAAAA,CAAeX,GAAAA,CAAAA;AACxC,QAAA,IAAIU,eAAeF,WAAAA,EAAa;YAC9B,OAAO;gBAAED,UAAAA,EAAY;AAAM,aAAA;AAC7B,QAAA;AACF,IAAA;IAEA,MAAMK,OAAAA,GAAU,MAAMC,wCAAAA,CAA4Bb,GAAAA,CAAAA;IAElD,IAAIY,OAAAA,CAAQE,MAAM,GAAG,CAAA,EAAG;AACtB,QAAA,IAAIZ,gBAAAA,EAAkB;YACpBD,MAAAA,CAAOc,IAAI,CACT,+DAAA,EACAC,mBAAAA,CAAGC,GAAG,EACNL,OAAAA,CAAQM,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAK,CAAC,IAAI,EAAED,IAAAA,CAAK,CAAC,EAAEC,aAAAA,CAAAA,CAAe,CAAA,CAAEC,IAAI,CAACL,mBAAAA,CAAGC,GAAG,CAAA,CAAA;AAGtF,YAAA,MAAMK,kCAAqBV,OAAAA,EAAS;AAAEZ,gBAAAA,GAAAA;AAAKC,gBAAAA;AAAO,aAAA,CAAA;AAClD,YAAA,MAAMsB,iCAAAA,CAAqBvB,GAAAA,CAAAA;YAE3B,OAAO;gBAAEO,UAAAA,EAAY;AAAK,aAAA;AAC5B,QAAA;AAEAiB,QAAAA,uCAAAA,CAA2BvB,MAAAA,EAAQW,OAAAA,CAAAA;AACnC,QAAA,MAAM,IAAIa,sCAAAA,CAA0Bb,OAAAA,CAAAA;AACtC,IAAA;AAEA,IAAA,MAAMc,2CAA8B1B,GAAAA,EAAKC,MAAAA,CAAAA;AAEzC,IAAA,IAAIO,WAAAA,EAAa;AACf,QAAA,MAAMmB,6BAAgB3B,GAAAA,EAAKQ,WAAAA,CAAAA;AAC7B,IAAA;IAEA,OAAO;QAAED,UAAAA,EAAY;AAAM,KAAA;AAC7B;AAEA;;;;IAKA,MAAMqB,0BAA0B,OAC9BC,OAAAA,GAAAA;IAEA,IAAI;AACF,QAAA,MAAM,EAAEtB,UAAU,EAAE,GAAG,MAAMR,uBAAAA,CAAwB8B,OAAAA,CAAAA;AAErD,QAAA,OAAO,CAACtB,UAAAA;AACV,IAAA,CAAA,CAAE,OAAOuB,GAAAA,EAAK;QACZD,OAAAA,CAAQ5B,MAAM,CAAC8B,KAAK,CAACD,eAAeE,KAAAA,GAAQF,GAAAA,CAAIG,OAAO,GAAGC,MAAAA,CAAOJ,GAAAA,CAAAA,CAAAA;AACjE3B,QAAAA,OAAAA,CAAQgC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA;AACF;;;;;"}
|
|
@@ -4,14 +4,19 @@ var path = require('node:path');
|
|
|
4
4
|
var dotenv = require('dotenv');
|
|
5
5
|
var files = require('./files.js');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
10
|
+
var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
|
|
11
|
+
|
|
7
12
|
/**
|
|
8
13
|
* @internal
|
|
9
14
|
*
|
|
10
15
|
* @description Load the .env file if it exists
|
|
11
16
|
*/ const loadEnv = async (cwd)=>{
|
|
12
|
-
const pathToEnv =
|
|
17
|
+
const pathToEnv = path__default.default.resolve(cwd, '.env');
|
|
13
18
|
if (await files.pathExists(pathToEnv)) {
|
|
14
|
-
|
|
19
|
+
dotenv__default.default.config({
|
|
15
20
|
path: pathToEnv
|
|
16
21
|
});
|
|
17
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sources":["../../../../src/node/core/env.ts"],"sourcesContent":["import path from 'node:path';\nimport dotenv from 'dotenv';\nimport { pathExists } from './files';\n\n/**\n * This is the base of _any_ env set for a strapi project,\n * to build a strapi admin panel we require these env variables.\n */\ninterface DefaultEnv {\n ADMIN_PATH: string;\n STRAPI_ADMIN_BACKEND_URL: string;\n STRAPI_TELEMETRY_DISABLED: string;\n STRAPI_AI_URL: string;\n STRAPI_ANALYTICS_URL?: string;\n}\n\n/**\n * @internal\n *\n * @description Load the .env file if it exists\n */\nconst loadEnv = async (cwd: string) => {\n const pathToEnv = path.resolve(cwd, '.env');\n\n if (await pathExists(pathToEnv)) {\n dotenv.config({ path: pathToEnv });\n }\n};\n\n/**\n * @internal\n *\n * @description Get all the environment variables that start with `STRAPI_ADMIN_`\n */\nconst getStrapiAdminEnvVars = (defaultEnv: DefaultEnv): Record<string, string> => {\n return Object.keys(process.env)\n .filter((key) => key.toUpperCase().startsWith('STRAPI_ADMIN_'))\n .reduce(\n (acc, key) => {\n acc[key] = process.env[key] as string;\n\n return acc;\n },\n defaultEnv as unknown as Record<string, string>\n );\n};\n\nexport { getStrapiAdminEnvVars, loadEnv };\n"],"names":["loadEnv","cwd","pathToEnv","path","resolve","pathExists","dotenv","config","getStrapiAdminEnvVars","defaultEnv","Object","keys","process","env","filter","key","toUpperCase","startsWith","reduce","acc"],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.js","sources":["../../../../src/node/core/env.ts"],"sourcesContent":["import path from 'node:path';\nimport dotenv from 'dotenv';\nimport { pathExists } from './files';\n\n/**\n * This is the base of _any_ env set for a strapi project,\n * to build a strapi admin panel we require these env variables.\n */\ninterface DefaultEnv {\n ADMIN_PATH: string;\n STRAPI_ADMIN_BACKEND_URL: string;\n STRAPI_TELEMETRY_DISABLED: string;\n STRAPI_AI_URL: string;\n STRAPI_ANALYTICS_URL?: string;\n}\n\n/**\n * @internal\n *\n * @description Load the .env file if it exists\n */\nconst loadEnv = async (cwd: string) => {\n const pathToEnv = path.resolve(cwd, '.env');\n\n if (await pathExists(pathToEnv)) {\n dotenv.config({ path: pathToEnv });\n }\n};\n\n/**\n * @internal\n *\n * @description Get all the environment variables that start with `STRAPI_ADMIN_`\n */\nconst getStrapiAdminEnvVars = (defaultEnv: DefaultEnv): Record<string, string> => {\n return Object.keys(process.env)\n .filter((key) => key.toUpperCase().startsWith('STRAPI_ADMIN_'))\n .reduce(\n (acc, key) => {\n acc[key] = process.env[key] as string;\n\n return acc;\n },\n defaultEnv as unknown as Record<string, string>\n );\n};\n\nexport { getStrapiAdminEnvVars, loadEnv };\n"],"names":["loadEnv","cwd","pathToEnv","path","resolve","pathExists","dotenv","config","getStrapiAdminEnvVars","defaultEnv","Object","keys","process","env","filter","key","toUpperCase","startsWith","reduce","acc"],"mappings":";;;;;;;;;;;AAgBA;;;;IAKA,MAAMA,UAAU,OAAOC,GAAAA,GAAAA;AACrB,IAAA,MAAMC,SAAAA,GAAYC,qBAAAA,CAAKC,OAAO,CAACH,GAAAA,EAAK,MAAA,CAAA;IAEpC,IAAI,MAAMI,iBAAWH,SAAAA,CAAAA,EAAY;AAC/BI,QAAAA,uBAAAA,CAAOC,MAAM,CAAC;YAAEJ,IAAAA,EAAMD;AAAU,SAAA,CAAA;AAClC,IAAA;AACF;AAEA;;;;IAKA,MAAMM,wBAAwB,CAACC,UAAAA,GAAAA;AAC7B,IAAA,OAAOC,OAAOC,IAAI,CAACC,QAAQC,GAAG,CAAA,CAC3BC,MAAM,CAAC,CAACC,MAAQA,GAAAA,CAAIC,WAAW,GAAGC,UAAU,CAAC,kBAC7CC,MAAM,CACL,CAACC,GAAAA,EAAKJ,GAAAA,GAAAA;AACJI,QAAAA,GAAG,CAACJ,GAAAA,CAAI,GAAGH,OAAAA,CAAQC,GAAG,CAACE,GAAAA,CAAI;QAE3B,OAAOI,GAAAA;IACT,CAAA,EACAV,UAAAA,CAAAA;AAEN;;;;;"}
|
|
@@ -5,6 +5,12 @@ var chalk = require('chalk');
|
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var utils = require('@strapi/utils');
|
|
7
7
|
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var boxen__default = /*#__PURE__*/_interopDefault(boxen);
|
|
11
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
12
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
13
|
+
|
|
8
14
|
const isError = (err)=>err instanceof Error;
|
|
9
15
|
/**
|
|
10
16
|
* @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.
|
|
@@ -12,10 +18,10 @@ const isError = (err)=>err instanceof Error;
|
|
|
12
18
|
* and they should use the `--debug` flag to get more information (assuming you've implemented this
|
|
13
19
|
* in your action).
|
|
14
20
|
*/ const handleUnexpectedError = (err)=>{
|
|
15
|
-
console.error(
|
|
21
|
+
console.error(chalk__default.default.red(`[ERROR] `, 'There seems to be an unexpected error, try again with --debug for more information', os__default.default.EOL));
|
|
16
22
|
if (isError(err) && err.stack) {
|
|
17
23
|
// eslint-disable-next-line no-console
|
|
18
|
-
console.log(
|
|
24
|
+
console.log(chalk__default.default.red(boxen__default.default(err.stack, {
|
|
19
25
|
padding: 1,
|
|
20
26
|
align: 'left'
|
|
21
27
|
})));
|
|
@@ -35,7 +41,7 @@ const isError = (err)=>err instanceof Error;
|
|
|
35
41
|
` value: ${error.value}`
|
|
36
42
|
].join('\n'));
|
|
37
43
|
}
|
|
38
|
-
console.log(
|
|
44
|
+
console.log(chalk__default.default.red(boxen__default.default([
|
|
39
45
|
'Details:',
|
|
40
46
|
message.join('\n\n')
|
|
41
47
|
].join('\n'), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sources":["../../../../src/node/core/errors.ts"],"sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport os from 'node:os';\nimport { errors } from '@strapi/utils';\n\nconst isError = (err: unknown): err is Error => err instanceof Error;\n\n/**\n * @description Handle unexpected errors. No, but really, your CLI should anticipate error cases.\n * If a user hits an error we don't expect, then we need to flag to them that this is not normal\n * and they should use the `--debug` flag to get more information (assuming you've implemented this\n * in your action).\n */\nconst handleUnexpectedError = (err: unknown) => {\n console.error(\n chalk.red(\n `[ERROR] `,\n 'There seems to be an unexpected error, try again with --debug for more information',\n os.EOL\n )\n );\n\n if (isError(err) && err.stack) {\n // eslint-disable-next-line no-console\n console.log(\n chalk.red(\n boxen(err.stack, {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n if (err instanceof errors.YupValidationError) {\n const message = [];\n const size = err.details.errors.length;\n\n for (const error of err.details.errors) {\n // No need to repeat the error message as it's the same as the err.message\n if (size === 1) {\n message.push(` value: ${error.value}`);\n continue;\n }\n\n message.push(\n [` [${error.name}]`, ` message: ${error.message}`, ` value: ${error.value}`].join(\n '\\n'\n )\n );\n }\n\n console.log(\n chalk.red(\n boxen(['Details:', message.join('\\n\\n')].join('\\n'), {\n padding: 1,\n align: 'left',\n })\n )\n );\n }\n\n process.exit(1);\n};\n\nexport { handleUnexpectedError, isError };\n"],"names":["isError","err","Error","handleUnexpectedError","console","error","chalk","red","os","EOL","stack","log","boxen","padding","align","errors","YupValidationError","message","size","details","length","push","value","name","join","process","exit"],"mappings":";;;;;;;;;;;;;AAKA,MAAMA,OAAAA,GAAU,CAACC,GAAAA,GAA+BA,GAAAA,YAAeC;AAE/D;;;;;IAMA,MAAMC,wBAAwB,CAACF,GAAAA,GAAAA;IAC7BG,OAAAA,CAAQC,KAAK,CACXC,sBAAAA,CAAMC,GAAG,CACP,CAAC,QAAQ,CAAC,EACV,oFAAA,EACAC,mBAAAA,CAAGC,GAAG,CAAA,CAAA;AAIV,IAAA,IAAIT,OAAAA,CAAQC,GAAAA,CAAAA,IAAQA,GAAAA,CAAIS,KAAK,EAAE;;QAE7BN,OAAAA,CAAQO,GAAG,CACTL,sBAAAA,CAAMC,GAAG,CACPK,sBAAAA,CAAMX,GAAAA,CAAIS,KAAK,EAAE;YACfG,OAAAA,EAAS,CAAA;YACTC,KAAAA,EAAO;AACT,SAAA,CAAA,CAAA,CAAA;AAGN,IAAA;IAEA,IAAIb,GAAAA,YAAec,YAAAA,CAAOC,kBAAkB,EAAE;AAC5C,QAAA,MAAMC,UAAU,EAAE;AAClB,QAAA,MAAMC,OAAOjB,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAACK,MAAM;AAEtC,QAAA,KAAK,MAAMf,KAAAA,IAASJ,GAAAA,CAAIkB,OAAO,CAACJ,MAAM,CAAE;;AAEtC,YAAA,IAAIG,SAAS,CAAA,EAAG;AACdD,gBAAAA,OAAAA,CAAQI,IAAI,CAAC,CAAC,SAAS,EAAEhB,KAAAA,CAAMiB,KAAK,CAAA,CAAE,CAAA;AACtC,gBAAA;AACF,YAAA;AAEAL,YAAAA,OAAAA,CAAQI,IAAI,CACV;AAAC,gBAAA,CAAC,GAAG,EAAEhB,KAAAA,CAAMkB,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,aAAa,EAAElB,KAAAA,CAAMY,OAAO,CAAA,CAAE;AAAE,gBAAA,CAAC,aAAa,EAAEZ,KAAAA,CAAMiB,KAAK,CAAA;AAAG,aAAA,CAACE,IAAI,CACxF,IAAA,CAAA,CAAA;AAGN,QAAA;AAEApB,QAAAA,OAAAA,CAAQO,GAAG,CACTL,sBAAAA,CAAMC,GAAG,CACPK,sBAAAA,CAAM;AAAC,YAAA,UAAA;AAAYK,YAAAA,OAAAA,CAAQO,IAAI,CAAC,MAAA;SAAQ,CAACA,IAAI,CAAC,IAAA,CAAA,EAAO;YACnDX,OAAAA,EAAS,CAAA;YACTC,KAAAA,EAAO;AACT,SAAA,CAAA,CAAA,CAAA;AAGN,IAAA;AAEAW,IAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf;;;;;"}
|
|
@@ -4,6 +4,10 @@ var path = require('node:path');
|
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var node = require('esbuild-register/dist/node');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
10
|
+
|
|
7
11
|
/**
|
|
8
12
|
* @internal
|
|
9
13
|
*/ const pathExists = async (path)=>{
|
|
@@ -44,7 +48,7 @@ var node = require('esbuild-register/dist/node');
|
|
|
44
48
|
* is identical to the module path separator.
|
|
45
49
|
*/ const convertSystemPathToModulePath = (sysPath)=>{
|
|
46
50
|
if (process.platform === 'win32') {
|
|
47
|
-
return sysPath.split(
|
|
51
|
+
return sysPath.split(path__default.default.sep).join(path__default.default.posix.sep);
|
|
48
52
|
}
|
|
49
53
|
return sysPath;
|
|
50
54
|
};
|
|
@@ -56,7 +60,7 @@ var node = require('esbuild-register/dist/node');
|
|
|
56
60
|
* have it relative to the runtime directory.
|
|
57
61
|
*/ const convertModulePathToSystemPath = (modulePath)=>{
|
|
58
62
|
if (process.platform === 'win32') {
|
|
59
|
-
return modulePath.split(
|
|
63
|
+
return modulePath.split(path__default.default.posix.sep).join(path__default.default.sep);
|
|
60
64
|
}
|
|
61
65
|
return modulePath;
|
|
62
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch (error) {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions: Parameters<typeof register>[0] = {\n extensions: ['.js', '.mjs', '.ts'],\n };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\n/**\n * @internal\n *\n * @description Converts a system path to a module path mainly for `Windows` systems.\n * where the path separator is `\\` instead of `/`, on linux systems the path separator\n * is identical to the module path separator.\n */\nconst convertSystemPathToModulePath = (sysPath: string) => {\n if (process.platform === 'win32') {\n return sysPath.split(path.sep).join(path.posix.sep);\n }\n\n return sysPath;\n};\n\n/**\n * @internal\n *\n * @description Converts a module path to a system path, again largely used for Windows systems.\n * The original use case was plugins where the resolve path was in module format but we want to\n * have it relative to the runtime directory.\n */\nconst convertModulePathToSystemPath = (modulePath: string) => {\n if (process.platform === 'win32') {\n return modulePath.split(path.posix.sep).join(path.sep);\n }\n\n return modulePath;\n};\n\nexport { pathExists, loadFile, convertSystemPathToModulePath, convertModulePathToSystemPath };\n"],"names":["pathExists","path","access","error","loadFile","esbuildOptions","extensions","unregister","register","mod","require","file","default","undefined","convertSystemPathToModulePath","sysPath","process","platform","split","sep","join","posix","convertModulePathToSystemPath","modulePath"],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.js","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch (error) {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions: Parameters<typeof register>[0] = {\n extensions: ['.js', '.mjs', '.ts'],\n };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\n/**\n * @internal\n *\n * @description Converts a system path to a module path mainly for `Windows` systems.\n * where the path separator is `\\` instead of `/`, on linux systems the path separator\n * is identical to the module path separator.\n */\nconst convertSystemPathToModulePath = (sysPath: string) => {\n if (process.platform === 'win32') {\n return sysPath.split(path.sep).join(path.posix.sep);\n }\n\n return sysPath;\n};\n\n/**\n * @internal\n *\n * @description Converts a module path to a system path, again largely used for Windows systems.\n * The original use case was plugins where the resolve path was in module format but we want to\n * have it relative to the runtime directory.\n */\nconst convertModulePathToSystemPath = (modulePath: string) => {\n if (process.platform === 'win32') {\n return modulePath.split(path.posix.sep).join(path.sep);\n }\n\n return modulePath;\n};\n\nexport { pathExists, loadFile, convertSystemPathToModulePath, convertModulePathToSystemPath };\n"],"names":["pathExists","path","access","error","loadFile","esbuildOptions","extensions","unregister","register","mod","require","file","default","undefined","convertSystemPathToModulePath","sysPath","process","platform","split","sep","join","posix","convertModulePathToSystemPath","modulePath"],"mappings":";;;;;;;;;;AAIA;;IAGA,MAAMA,aAAa,OAAOC,IAAAA,GAAAA;IACxB,IAAI;AACF,QAAA,MAAMC,SAAAA,CAAOD,IAAAA,CAAAA;QACb,OAAO,IAAA;AACT,IAAA,CAAA,CAAE,OAAOE,KAAAA,EAAO;QACd,OAAO,KAAA;AACT,IAAA;AACF;AAEA;;IAGA,MAAMC,WAAW,OAAOH,IAAAA,GAAAA;IACtB,IAAI,MAAMD,WAAWC,IAAAA,CAAAA,EAAO;AAC1B,QAAA,MAAMI,cAAAA,GAAiD;YACrDC,UAAAA,EAAY;AAAC,gBAAA,KAAA;AAAO,gBAAA,MAAA;AAAQ,gBAAA;AAAM;AACpC,SAAA;AAEA,QAAA,MAAM,EAAEC,UAAU,EAAE,GAAGC,aAAAA,CAASH,cAAAA,CAAAA;;AAGhC,QAAA,MAAMI,MAAMC,OAAAA,CAAQT,IAAAA,CAAAA;AAEpBM,QAAAA,UAAAA,EAAAA;AAEA;;AAEC,QACD,MAAMI,IAAAA,GAAOF,GAAAA,EAAKG,OAAAA,IAAWH,GAAAA,IAAOI,SAAAA;QAEpC,OAAOF,IAAAA;AACT,IAAA;IAEA,OAAOE,SAAAA;AACT;AAEA;;;;;;IAOA,MAAMC,gCAAgC,CAACC,OAAAA,GAAAA;IACrC,IAAIC,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOF,OAAAA,CAAQG,KAAK,CAACjB,qBAAAA,CAAKkB,GAAG,CAAA,CAAEC,IAAI,CAACnB,qBAAAA,CAAKoB,KAAK,CAACF,GAAG,CAAA;AACpD,IAAA;IAEA,OAAOJ,OAAAA;AACT;AAEA;;;;;;IAOA,MAAMO,gCAAgC,CAACC,UAAAA,GAAAA;IACrC,IAAIP,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOM,UAAAA,CAAWL,KAAK,CAACjB,qBAAAA,CAAKoB,KAAK,CAACF,GAAG,CAAA,CAAEC,IAAI,CAACnB,qBAAAA,CAAKkB,GAAG,CAAA;AACvD,IAAA;IAEA,OAAOI,UAAAA;AACT;;;;;;;"}
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
var path = require('node:path');
|
|
4
4
|
var resolveModule = require('./resolve-module.js');
|
|
5
5
|
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
9
|
+
|
|
6
10
|
const DESIGN_SYSTEM_MODULE = '@strapi/design-system';
|
|
7
11
|
/**
|
|
8
12
|
* Detect if a package is locally linked (portal:, file:, yarn link) rather than installed in node_modules.
|
|
@@ -11,7 +15,7 @@ const DESIGN_SYSTEM_MODULE = '@strapi/design-system';
|
|
|
11
15
|
* @internal
|
|
12
16
|
*/ const isPackageLinked = (mod)=>{
|
|
13
17
|
const pkgRoot = resolveModule.getModulePath(mod);
|
|
14
|
-
const pathSegments = pkgRoot.split(
|
|
18
|
+
const pathSegments = pkgRoot.split(path__default.default.sep);
|
|
15
19
|
return !pathSegments.includes('node_modules');
|
|
16
20
|
};
|
|
17
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linked-packages.js","sources":["../../../../src/node/core/linked-packages.ts"],"sourcesContent":["import path from 'node:path';\nimport { getModulePath } from './resolve-module';\n\nconst DESIGN_SYSTEM_MODULE = '@strapi/design-system';\n\n/**\n * Detect if a package is locally linked (portal:, file:, yarn link) rather than installed in node_modules.\n * When linked, the resolved path is outside node_modules.\n *\n * @internal\n */\nexport const isPackageLinked = (mod: string): boolean => {\n const pkgRoot = getModulePath(mod);\n const pathSegments = pkgRoot.split(path.sep);\n return !pathSegments.includes('node_modules');\n};\n\n/**\n * Detects if @strapi/design-system is linked (portal:, file:, or yarn link).\n * Returns the package root path when linked, null otherwise.\n * Uses the heuristic: linked packages resolve outside node_modules.\n */\nexport const getLinkedDesignSystemPath = (): string | null => {\n try {\n const pkgRoot = getModulePath(DESIGN_SYSTEM_MODULE);\n return isPackageLinked(DESIGN_SYSTEM_MODULE) ? pkgRoot : null;\n } catch {\n return null;\n }\n};\n\nexport const isDesignSystemLinked = (): boolean => getLinkedDesignSystemPath() !== null;\n"],"names":["DESIGN_SYSTEM_MODULE","isPackageLinked","mod","pkgRoot","getModulePath","pathSegments","split","path","sep","includes","getLinkedDesignSystemPath","isDesignSystemLinked"],"mappings":"
|
|
1
|
+
{"version":3,"file":"linked-packages.js","sources":["../../../../src/node/core/linked-packages.ts"],"sourcesContent":["import path from 'node:path';\nimport { getModulePath } from './resolve-module';\n\nconst DESIGN_SYSTEM_MODULE = '@strapi/design-system';\n\n/**\n * Detect if a package is locally linked (portal:, file:, yarn link) rather than installed in node_modules.\n * When linked, the resolved path is outside node_modules.\n *\n * @internal\n */\nexport const isPackageLinked = (mod: string): boolean => {\n const pkgRoot = getModulePath(mod);\n const pathSegments = pkgRoot.split(path.sep);\n return !pathSegments.includes('node_modules');\n};\n\n/**\n * Detects if @strapi/design-system is linked (portal:, file:, or yarn link).\n * Returns the package root path when linked, null otherwise.\n * Uses the heuristic: linked packages resolve outside node_modules.\n */\nexport const getLinkedDesignSystemPath = (): string | null => {\n try {\n const pkgRoot = getModulePath(DESIGN_SYSTEM_MODULE);\n return isPackageLinked(DESIGN_SYSTEM_MODULE) ? pkgRoot : null;\n } catch {\n return null;\n }\n};\n\nexport const isDesignSystemLinked = (): boolean => getLinkedDesignSystemPath() !== null;\n"],"names":["DESIGN_SYSTEM_MODULE","isPackageLinked","mod","pkgRoot","getModulePath","pathSegments","split","path","sep","includes","getLinkedDesignSystemPath","isDesignSystemLinked"],"mappings":";;;;;;;;;AAGA,MAAMA,oBAAAA,GAAuB,uBAAA;AAE7B;;;;;IAMO,MAAMC,eAAAA,GAAkB,CAACC,GAAAA,GAAAA;AAC9B,IAAA,MAAMC,UAAUC,2BAAAA,CAAcF,GAAAA,CAAAA;AAC9B,IAAA,MAAMG,YAAAA,GAAeF,OAAAA,CAAQG,KAAK,CAACC,sBAAKC,GAAG,CAAA;IAC3C,OAAO,CAACH,YAAAA,CAAaI,QAAQ,CAAC,cAAA,CAAA;AAChC;AAEA;;;;UAKaC,yBAAAA,GAA4B,IAAA;IACvC,IAAI;AACF,QAAA,MAAMP,UAAUC,2BAAAA,CAAcJ,oBAAAA,CAAAA;QAC9B,OAAOC,eAAAA,CAAgBD,wBAAwBG,OAAAA,GAAU,IAAA;AAC3D,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,IAAA;AACT,IAAA;AACF;AAEO,MAAMQ,oBAAAA,GAAuB,IAAeD,yBAAAA,EAAAA,KAAgC;;;;;;"}
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
var path = require('path');
|
|
4
4
|
var readPkgUp = require('read-pkg-up');
|
|
5
5
|
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
9
|
+
var readPkgUp__default = /*#__PURE__*/_interopDefault(readPkgUp);
|
|
10
|
+
|
|
6
11
|
/**
|
|
7
12
|
* Load information about the strapi CMS monorepo (if applicable)
|
|
8
13
|
*
|
|
@@ -10,7 +15,7 @@ var readPkgUp = require('read-pkg-up');
|
|
|
10
15
|
*/ async function loadStrapiMonorepo(cwd) {
|
|
11
16
|
let p = cwd;
|
|
12
17
|
while(p !== '/'){
|
|
13
|
-
const readResult = await
|
|
18
|
+
const readResult = await readPkgUp__default.default({
|
|
14
19
|
cwd: p
|
|
15
20
|
});
|
|
16
21
|
if (!readResult) {
|
|
@@ -18,10 +23,10 @@ var readPkgUp = require('read-pkg-up');
|
|
|
18
23
|
}
|
|
19
24
|
if (readResult.packageJson.isStrapiMonorepo) {
|
|
20
25
|
return {
|
|
21
|
-
path:
|
|
26
|
+
path: path__default.default.dirname(readResult.path)
|
|
22
27
|
};
|
|
23
28
|
}
|
|
24
|
-
p =
|
|
29
|
+
p = path__default.default.dirname(path__default.default.dirname(readResult.path));
|
|
25
30
|
}
|
|
26
31
|
return undefined;
|
|
27
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monorepo.js","sources":["../../../../src/node/core/monorepo.ts"],"sourcesContent":["import path from 'path';\nimport readPkgUp from 'read-pkg-up';\n\ninterface StrapiMonorepo {\n path: string;\n}\n\n/**\n * Load information about the strapi CMS monorepo (if applicable)\n *\n * @internal\n */\nasync function loadStrapiMonorepo(cwd: string): Promise<StrapiMonorepo | undefined> {\n let p = cwd;\n\n while (p !== '/') {\n const readResult = await readPkgUp({ cwd: p });\n\n if (!readResult) {\n return undefined;\n }\n\n if (readResult.packageJson.isStrapiMonorepo) {\n return { path: path.dirname(readResult.path) };\n }\n\n p = path.dirname(path.dirname(readResult.path));\n }\n\n return undefined;\n}\n\nexport { loadStrapiMonorepo };\nexport type { StrapiMonorepo };\n"],"names":["loadStrapiMonorepo","cwd","p","readResult","readPkgUp","undefined","packageJson","isStrapiMonorepo","path","dirname"],"mappings":"
|
|
1
|
+
{"version":3,"file":"monorepo.js","sources":["../../../../src/node/core/monorepo.ts"],"sourcesContent":["import path from 'path';\nimport readPkgUp from 'read-pkg-up';\n\ninterface StrapiMonorepo {\n path: string;\n}\n\n/**\n * Load information about the strapi CMS monorepo (if applicable)\n *\n * @internal\n */\nasync function loadStrapiMonorepo(cwd: string): Promise<StrapiMonorepo | undefined> {\n let p = cwd;\n\n while (p !== '/') {\n const readResult = await readPkgUp({ cwd: p });\n\n if (!readResult) {\n return undefined;\n }\n\n if (readResult.packageJson.isStrapiMonorepo) {\n return { path: path.dirname(readResult.path) };\n }\n\n p = path.dirname(path.dirname(readResult.path));\n }\n\n return undefined;\n}\n\nexport { loadStrapiMonorepo };\nexport type { StrapiMonorepo };\n"],"names":["loadStrapiMonorepo","cwd","p","readResult","readPkgUp","undefined","packageJson","isStrapiMonorepo","path","dirname"],"mappings":";;;;;;;;;;AAOA;;;;IAKA,eAAeA,mBAAmBC,GAAW,EAAA;AAC3C,IAAA,IAAIC,CAAAA,GAAID,GAAAA;AAER,IAAA,MAAOC,MAAM,GAAA,CAAK;QAChB,MAAMC,UAAAA,GAAa,MAAMC,0BAAAA,CAAU;YAAEH,GAAAA,EAAKC;AAAE,SAAA,CAAA;AAE5C,QAAA,IAAI,CAACC,UAAAA,EAAY;YACf,OAAOE,SAAAA;AACT,QAAA;AAEA,QAAA,IAAIF,UAAAA,CAAWG,WAAW,CAACC,gBAAgB,EAAE;YAC3C,OAAO;AAAEC,gBAAAA,IAAAA,EAAMA,qBAAAA,CAAKC,OAAO,CAACN,UAAAA,CAAWK,IAAI;AAAE,aAAA;AAC/C,QAAA;AAEAN,QAAAA,CAAAA,GAAIM,sBAAKC,OAAO,CAACD,sBAAKC,OAAO,CAACN,WAAWK,IAAI,CAAA,CAAA;AAC/C,IAAA;IAEA,OAAOH,SAAAA;AACT;;;;"}
|
|
@@ -9,6 +9,13 @@ var dependencies = require('./dependencies.js');
|
|
|
9
9
|
var files = require('./files.js');
|
|
10
10
|
var errors = require('./errors.js');
|
|
11
11
|
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
15
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
16
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
17
|
+
var camelCase__default = /*#__PURE__*/_interopDefault(camelCase);
|
|
18
|
+
|
|
12
19
|
const validatePackageHasStrapi = (pkg)=>'strapi' in pkg && typeof pkg.strapi === 'object' && !Array.isArray(pkg.strapi) && pkg.strapi !== null;
|
|
13
20
|
const validatePackageIsPlugin = (pkg)=>validatePackageHasStrapi(pkg) && pkg.strapi.kind === 'plugin';
|
|
14
21
|
const isPluginConfigEnabled = (config)=>{
|
|
@@ -24,9 +31,9 @@ const getEnabledPlugins = async ({ cwd, logger, runtimeDir, strapi })=>{
|
|
|
24
31
|
* It will include libraries like "react", so we need to collect the ones that
|
|
25
32
|
* are plugins.
|
|
26
33
|
*/ const deps = strapi.config.get('info.dependencies', {});
|
|
27
|
-
logger.debug("Dependencies from user's project",
|
|
34
|
+
logger.debug("Dependencies from user's project", os__default.default.EOL, deps);
|
|
28
35
|
const userPluginsFile = await loadUserPluginsFile(strapi.dirs.app.config);
|
|
29
|
-
logger.debug("User's plugins file",
|
|
36
|
+
logger.debug("User's plugins file", os__default.default.EOL, userPluginsFile);
|
|
30
37
|
for (const dep of Object.keys(deps)){
|
|
31
38
|
const pkg = await dependencies.getModule(dep, cwd);
|
|
32
39
|
if (pkg && validatePackageIsPlugin(pkg)) {
|
|
@@ -42,7 +49,7 @@ const getEnabledPlugins = async ({ cwd, logger, runtimeDir, strapi })=>{
|
|
|
42
49
|
}
|
|
43
50
|
plugins[name] = {
|
|
44
51
|
name,
|
|
45
|
-
importName:
|
|
52
|
+
importName: camelCase__default.default(name),
|
|
46
53
|
type: 'module',
|
|
47
54
|
modulePath: dep
|
|
48
55
|
};
|
|
@@ -59,12 +66,12 @@ const getEnabledPlugins = async ({ cwd, logger, runtimeDir, strapi })=>{
|
|
|
59
66
|
const sysPath = files.convertModulePathToSystemPath(userPluginConfig.resolve);
|
|
60
67
|
plugins[userPluginName] = {
|
|
61
68
|
name: userPluginName,
|
|
62
|
-
importName:
|
|
69
|
+
importName: camelCase__default.default(userPluginName),
|
|
63
70
|
type: 'local',
|
|
64
71
|
/**
|
|
65
72
|
* User plugin paths are resolved from the entry point
|
|
66
73
|
* of the app, because that's how you import them.
|
|
67
|
-
*/ modulePath: files.convertSystemPathToModulePath(
|
|
74
|
+
*/ modulePath: files.convertSystemPathToModulePath(path__default.default.relative(runtimeDir, sysPath)),
|
|
68
75
|
path: sysPath
|
|
69
76
|
};
|
|
70
77
|
}
|
|
@@ -78,7 +85,7 @@ const PLUGIN_CONFIGS = [
|
|
|
78
85
|
];
|
|
79
86
|
const loadUserPluginsFile = async (root)=>{
|
|
80
87
|
for (const file of PLUGIN_CONFIGS){
|
|
81
|
-
const filePath =
|
|
88
|
+
const filePath = path__default.default.join(root, file);
|
|
82
89
|
const configFile = await files.loadFile(filePath);
|
|
83
90
|
if (configFile) {
|
|
84
91
|
/**
|
|
@@ -115,9 +122,9 @@ const getMapOfPluginsWithAdmin = (plugins)=>{
|
|
|
115
122
|
const localPluginPath = plugin.path;
|
|
116
123
|
if (localPluginPath) {
|
|
117
124
|
// Here we are loading a locally installed plugin
|
|
118
|
-
const packageJsonPath =
|
|
119
|
-
if (
|
|
120
|
-
const packageJson = JSON.parse(
|
|
125
|
+
const packageJsonPath = path__default.default.join(localPluginPath, 'package.json');
|
|
126
|
+
if (fs__default.default.existsSync(packageJsonPath)) {
|
|
127
|
+
const packageJson = JSON.parse(fs__default.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
121
128
|
const localAdminPath = packageJson?.exports?.['./strapi-admin']?.import;
|
|
122
129
|
if (localAdminPath) {
|
|
123
130
|
pluginImportPaths[plugin.modulePath] = localAdminPath;
|
|
@@ -125,7 +132,7 @@ const getMapOfPluginsWithAdmin = (plugins)=>{
|
|
|
125
132
|
}
|
|
126
133
|
}
|
|
127
134
|
// Check if legacy admin file exists in local plugin
|
|
128
|
-
if (
|
|
135
|
+
if (fs__default.default.existsSync(path__default.default.join(localPluginPath, 'strapi-admin.js'))) {
|
|
129
136
|
pluginImportPaths[plugin.modulePath] = 'strapi-admin';
|
|
130
137
|
return true;
|
|
131
138
|
}
|