create-strapi-app 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/create-strapi.d.ts.map +1 -1
- package/dist/create-strapi.js +60 -32
- package/dist/create-strapi.js.map +1 -1
- package/dist/create-strapi.mjs +22 -1
- package/dist/create-strapi.mjs.map +1 -1
- package/dist/index.js +21 -13
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/check-install-path.js +10 -5
- package/dist/utils/check-install-path.js.map +1 -1
- package/dist/utils/check-requirements.d.ts.map +1 -1
- package/dist/utils/check-requirements.js +12 -6
- package/dist/utils/check-requirements.js.map +1 -1
- package/dist/utils/check-requirements.mjs +2 -1
- package/dist/utils/check-requirements.mjs.map +1 -1
- package/dist/utils/dot-env.d.ts.map +1 -1
- package/dist/utils/dot-env.js +9 -2
- package/dist/utils/dot-env.js.map +1 -1
- package/dist/utils/dot-env.mjs +2 -0
- package/dist/utils/dot-env.mjs.map +1 -1
- package/dist/utils/get-package-manager-args.d.ts.map +1 -1
- package/dist/utils/get-package-manager-args.js +7 -2
- package/dist/utils/get-package-manager-args.js.map +1 -1
- package/dist/utils/git.js +10 -6
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/install-id.js +6 -2
- package/dist/utils/install-id.js.map +1 -1
- package/dist/utils/logger.js +11 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/package-json.d.ts.map +1 -1
- package/dist/utils/package-json.js +27 -3
- package/dist/utils/package-json.js.map +1 -1
- package/dist/utils/package-json.mjs +23 -3
- package/dist/utils/package-json.mjs.map +1 -1
- package/dist/utils/parse-to-chalk.js +11 -7
- package/dist/utils/parse-to-chalk.js.map +1 -1
- package/dist/utils/pnpm-config.d.ts +18 -0
- package/dist/utils/pnpm-config.d.ts.map +1 -0
- package/dist/utils/pnpm-config.js +113 -0
- package/dist/utils/pnpm-config.js.map +1 -0
- package/dist/utils/pnpm-config.mjs +96 -0
- package/dist/utils/pnpm-config.mjs.map +1 -0
- package/dist/utils/template.js +17 -10
- package/dist/utils/template.js.map +1 -1
- package/dist/utils/usage.js +10 -5
- package/dist/utils/usage.js.map +1 -1
- package/package.json +5 -5
- package/templates/example/config/admin.ts +4 -4
- package/templates/example/config/api.ts +4 -0
- package/templates/example/config/database.ts +11 -3
- package/templates/example/config/plugins.ts +40 -1
- package/templates/example/config/server.ts +4 -1
- package/templates/example/tsconfig.json +1 -1
- package/templates/example-js/config/api.js +4 -0
- package/templates/example-js/config/plugins.js +40 -1
- package/templates/vanilla/config/admin.ts +4 -4
- package/templates/vanilla/config/api.ts +4 -0
- package/templates/vanilla/config/database.ts +11 -3
- package/templates/vanilla/config/plugins.ts +40 -1
- package/templates/vanilla/config/server.ts +4 -1
- package/templates/vanilla/tsconfig.json +1 -1
- package/templates/vanilla-js/config/api.js +4 -0
- package/templates/vanilla-js/config/plugins.js +40 -1
package/dist/utils/logger.js
CHANGED
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
4
|
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
8
|
+
|
|
5
9
|
const MAX_PREFIX_LENGTH = 8;
|
|
6
|
-
const badge = (text, bgColor, textColor =
|
|
10
|
+
const badge = (text, bgColor, textColor = chalk__default.default.black)=>{
|
|
7
11
|
const wrappedText = ` ${text} `;
|
|
8
12
|
const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);
|
|
9
13
|
return ' '.repeat(repeat) + bgColor(textColor(wrappedText));
|
|
@@ -24,28 +28,28 @@ const logger = {
|
|
|
24
28
|
console.log(textIndent(message));
|
|
25
29
|
},
|
|
26
30
|
title (title, message) {
|
|
27
|
-
const prefix = badge(title,
|
|
31
|
+
const prefix = badge(title, chalk__default.default.bgBlueBright);
|
|
28
32
|
console.log(`\n${prefix} ${message}`);
|
|
29
33
|
},
|
|
30
34
|
info (message) {
|
|
31
|
-
console.log(`${' '.repeat(7)}${
|
|
35
|
+
console.log(`${' '.repeat(7)}${chalk__default.default.cyan('●')} ${message}`);
|
|
32
36
|
},
|
|
33
37
|
success (message) {
|
|
34
|
-
console.log(`\n${' '.repeat(7)}${
|
|
38
|
+
console.log(`\n${' '.repeat(7)}${chalk__default.default.green('✓')} ${chalk__default.default.green(message)}`);
|
|
35
39
|
},
|
|
36
40
|
fatal (message) {
|
|
37
|
-
const prefix = badge('Error',
|
|
41
|
+
const prefix = badge('Error', chalk__default.default.bgRed);
|
|
38
42
|
if (message) {
|
|
39
43
|
console.error(`\n${prefix} ${textIndent(message, false)}\n`);
|
|
40
44
|
}
|
|
41
45
|
process.exit(1);
|
|
42
46
|
},
|
|
43
47
|
error (message) {
|
|
44
|
-
const prefix = badge('Error',
|
|
48
|
+
const prefix = badge('Error', chalk__default.default.bgRed);
|
|
45
49
|
console.error(`\n${prefix} ${textIndent(message, false)}\n`);
|
|
46
50
|
},
|
|
47
51
|
warn (message) {
|
|
48
|
-
const prefix = badge('Warn',
|
|
52
|
+
const prefix = badge('Warn', chalk__default.default.bgYellow);
|
|
49
53
|
console.warn(`\n${prefix} ${textIndent(message, false)}\n`);
|
|
50
54
|
}
|
|
51
55
|
};
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sources":["../../src/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);\n\n return ' '.repeat(repeat) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n"],"names":["MAX_PREFIX_LENGTH","badge","text","bgColor","textColor","chalk","black","wrappedText","repeat","Math","max","length","textIndent","indentFirst","indent","parts","Array","isArray","map","part","i","join","logger","log","message","console","title","prefix","bgBlueBright","info","cyan","success","green","fatal","bgRed","error","process","exit","warn","bgYellow"],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../../src/utils/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { ChalkFunction } from 'chalk';\n\nconst MAX_PREFIX_LENGTH = 8;\n\nconst badge = (text: string, bgColor: ChalkFunction, textColor: ChalkFunction = chalk.black) => {\n const wrappedText = ` ${text} `;\n\n const repeat = Math.max(0, MAX_PREFIX_LENGTH - wrappedText.length);\n\n return ' '.repeat(repeat) + bgColor(textColor(wrappedText));\n};\n\nconst textIndent = (\n text: string | string[],\n indentFirst = true,\n indent: number = MAX_PREFIX_LENGTH + 2\n) => {\n const parts = Array.isArray(text) ? text : [text];\n\n return parts\n .map((part, i) => {\n if (i === 0 && !indentFirst) {\n return part;\n }\n\n return ' '.repeat(indent) + part;\n })\n .join('\\n');\n};\n\nexport const logger = {\n log(message: string | string[]): void {\n console.log(textIndent(message));\n },\n title(title: string, message: string): void {\n const prefix = badge(title, chalk.bgBlueBright);\n console.log(`\\n${prefix} ${message}`);\n },\n info(message: string): void {\n console.log(`${' '.repeat(7)}${chalk.cyan('●')} ${message}`);\n },\n success(message: string): void {\n console.log(`\\n${' '.repeat(7)}${chalk.green('✓')} ${chalk.green(message)}`);\n },\n fatal(message?: string | string[]): never {\n const prefix = badge('Error', chalk.bgRed);\n\n if (message) {\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n }\n\n process.exit(1);\n },\n error(message: string | string[]): void {\n const prefix = badge('Error', chalk.bgRed);\n console.error(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n warn(message: string | string[]): void {\n const prefix = badge('Warn', chalk.bgYellow);\n console.warn(`\\n${prefix} ${textIndent(message, false)}\\n`);\n },\n};\n"],"names":["MAX_PREFIX_LENGTH","badge","text","bgColor","textColor","chalk","black","wrappedText","repeat","Math","max","length","textIndent","indentFirst","indent","parts","Array","isArray","map","part","i","join","logger","log","message","console","title","prefix","bgBlueBright","info","cyan","success","green","fatal","bgRed","error","process","exit","warn","bgYellow"],"mappings":";;;;;;;;AAGA,MAAMA,iBAAAA,GAAoB,CAAA;AAE1B,MAAMC,QAAQ,CAACC,IAAAA,EAAcC,OAAAA,EAAwBC,SAAAA,GAA2BC,uBAAMC,KAAK,GAAA;AACzF,IAAA,MAAMC,cAAc,CAAC,CAAC,EAAEL,IAAAA,CAAK,CAAC,CAAC;AAE/B,IAAA,MAAMM,SAASC,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAGV,iBAAAA,GAAoBO,YAAYI,MAAM,CAAA;AAEjE,IAAA,OAAO,GAAA,CAAIH,MAAM,CAACA,MAAAA,CAAAA,GAAUL,QAAQC,SAAAA,CAAUG,WAAAA,CAAAA,CAAAA;AAChD,CAAA;AAEA,MAAMK,UAAAA,GAAa,CACjBV,IAAAA,EACAW,WAAAA,GAAc,IAAI,EAClBC,MAAAA,GAAiBd,oBAAoB,CAAC,GAAA;AAEtC,IAAA,MAAMe,KAAAA,GAAQC,KAAAA,CAAMC,OAAO,CAACf,QAAQA,IAAAA,GAAO;AAACA,QAAAA;AAAK,KAAA;AAEjD,IAAA,OAAOa,KAAAA,CACJG,GAAG,CAAC,CAACC,IAAAA,EAAMC,CAAAA,GAAAA;QACV,IAAIA,CAAAA,KAAM,CAAA,IAAK,CAACP,WAAAA,EAAa;YAC3B,OAAOM,IAAAA;AACT,QAAA;QAEA,OAAO,GAAA,CAAIX,MAAM,CAACM,MAAAA,CAAAA,GAAUK,IAAAA;AAC9B,IAAA,CAAA,CAAA,CACCE,IAAI,CAAC,IAAA,CAAA;AACV,CAAA;MAEaC,MAAAA,GAAS;AACpBC,IAAAA,GAAAA,CAAAA,CAAIC,OAA0B,EAAA;QAC5BC,OAAAA,CAAQF,GAAG,CAACX,UAAAA,CAAWY,OAAAA,CAAAA,CAAAA;AACzB,IAAA,CAAA;IACAE,KAAAA,CAAAA,CAAMA,KAAa,EAAEF,OAAe,EAAA;AAClC,QAAA,MAAMG,MAAAA,GAAS1B,KAAAA,CAAMyB,KAAAA,EAAOrB,sBAAAA,CAAMuB,YAAY,CAAA;QAC9CH,OAAAA,CAAQF,GAAG,CAAC,CAAC,EAAE,EAAEI,MAAAA,CAAO,EAAE,EAAEH,OAAAA,CAAAA,CAAS,CAAA;AACvC,IAAA,CAAA;AACAK,IAAAA,IAAAA,CAAAA,CAAKL,OAAe,EAAA;AAClBC,QAAAA,OAAAA,CAAQF,GAAG,CAAC,CAAA,EAAG,GAAA,CAAIf,MAAM,CAAC,CAAA,CAAA,CAAA,EAAKH,sBAAAA,CAAMyB,IAAI,CAAC,GAAA,CAAA,CAAK,EAAE,EAAEN,OAAAA,CAAAA,CAAS,CAAA;AAC9D,IAAA,CAAA;AACAO,IAAAA,OAAAA,CAAAA,CAAQP,OAAe,EAAA;AACrBC,QAAAA,OAAAA,CAAQF,GAAG,CAAC,CAAC,EAAE,EAAE,GAAA,CAAIf,MAAM,CAAC,CAAA,CAAA,CAAA,EAAKH,sBAAAA,CAAM2B,KAAK,CAAC,GAAA,CAAA,CAAK,EAAE,EAAE3B,sBAAAA,CAAM2B,KAAK,CAACR,OAAAA,CAAAA,CAAAA,CAAU,CAAA;AAC9E,IAAA,CAAA;AACAS,IAAAA,KAAAA,CAAAA,CAAMT,OAA2B,EAAA;AAC/B,QAAA,MAAMG,MAAAA,GAAS1B,KAAAA,CAAM,OAAA,EAASI,sBAAAA,CAAM6B,KAAK,CAAA;AAEzC,QAAA,IAAIV,OAAAA,EAAS;AACXC,YAAAA,OAAAA,CAAQU,KAAK,CAAC,CAAC,EAAE,EAAER,MAAAA,CAAO,EAAE,EAAEf,UAAAA,CAAWY,OAAAA,EAAS,KAAA,CAAA,CAAO,EAAE,CAAC,CAAA;AAC9D,QAAA;AAEAY,QAAAA,OAAAA,CAAQC,IAAI,CAAC,CAAA,CAAA;AACf,IAAA,CAAA;AACAF,IAAAA,KAAAA,CAAAA,CAAMX,OAA0B,EAAA;AAC9B,QAAA,MAAMG,MAAAA,GAAS1B,KAAAA,CAAM,OAAA,EAASI,sBAAAA,CAAM6B,KAAK,CAAA;AACzCT,QAAAA,OAAAA,CAAQU,KAAK,CAAC,CAAC,EAAE,EAAER,MAAAA,CAAO,EAAE,EAAEf,UAAAA,CAAWY,OAAAA,EAAS,KAAA,CAAA,CAAO,EAAE,CAAC,CAAA;AAC9D,IAAA,CAAA;AACAc,IAAAA,IAAAA,CAAAA,CAAKd,OAA0B,EAAA;AAC7B,QAAA,MAAMG,MAAAA,GAAS1B,KAAAA,CAAM,MAAA,EAAQI,sBAAAA,CAAMkC,QAAQ,CAAA;AAC3Cd,QAAAA,OAAAA,CAAQa,IAAI,CAAC,CAAC,EAAE,EAAEX,MAAAA,CAAO,EAAE,EAAEf,UAAAA,CAAWY,OAAAA,EAAS,KAAA,CAAA,CAAO,EAAE,CAAC,CAAA;AAC7D,IAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/utils/package-json.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAsCtC,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,iBA2BnD"}
|
|
@@ -4,11 +4,34 @@ var path = require('path');
|
|
|
4
4
|
var _ = require('lodash');
|
|
5
5
|
var fse = require('fs-extra');
|
|
6
6
|
var engines = require('./engines.js');
|
|
7
|
+
var pnpmConfig = require('./pnpm-config.js');
|
|
7
8
|
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var fse__default = /*#__PURE__*/_interopDefault(fse);
|
|
12
|
+
|
|
13
|
+
const mergePackageJson = (existingPkg, pkg)=>_.mergeWith({}, existingPkg, pkg, (_objValue, srcValue)=>{
|
|
14
|
+
if (Array.isArray(srcValue)) {
|
|
15
|
+
return srcValue;
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
});
|
|
19
|
+
const getPnpmPackageJsonConfig = (scope, existingPkg)=>{
|
|
20
|
+
if (scope.packageManager !== 'pnpm' || !pnpmConfig.shouldUsePackageJsonPnpmConfig(scope.pnpmVersion)) {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
const existingOnlyBuiltDependencies = Array.isArray(existingPkg.pnpm?.onlyBuiltDependencies) ? existingPkg.pnpm.onlyBuiltDependencies.filter((dep)=>typeof dep === 'string') : [];
|
|
24
|
+
return {
|
|
25
|
+
pnpm: {
|
|
26
|
+
...existingPkg.pnpm ?? {},
|
|
27
|
+
onlyBuiltDependencies: pnpmConfig.getPnpmOnlyBuiltDependencies(scope, existingOnlyBuiltDependencies)
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
8
31
|
async function createPackageJSON(scope) {
|
|
9
32
|
const { sortPackageJson } = await import('sort-package-json');
|
|
10
33
|
const pkgJSONPath = path.join(scope.rootPath, 'package.json');
|
|
11
|
-
const existingPkg = await
|
|
34
|
+
const existingPkg = await fse__default.default.readJSON(pkgJSONPath).catch(()=>({}));
|
|
12
35
|
const pkg = {
|
|
13
36
|
name: _.kebabCase(scope.name),
|
|
14
37
|
private: true,
|
|
@@ -21,10 +44,11 @@ async function createPackageJSON(scope) {
|
|
|
21
44
|
uuid: scope.uuid,
|
|
22
45
|
installId: scope.installId
|
|
23
46
|
},
|
|
24
|
-
engines: engines.engines
|
|
47
|
+
engines: engines.engines,
|
|
48
|
+
...getPnpmPackageJsonConfig(scope, existingPkg)
|
|
25
49
|
};
|
|
26
50
|
// copy templates
|
|
27
|
-
await
|
|
51
|
+
await fse__default.default.writeJSON(pkgJSONPath, sortPackageJson(mergePackageJson(existingPkg, pkg)), {
|
|
28
52
|
spaces: 2
|
|
29
53
|
});
|
|
30
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.js","sources":["../../src/utils/package-json.ts"],"sourcesContent":["import { join } from 'path';\nimport { kebabCase,
|
|
1
|
+
{"version":3,"file":"package-json.js","sources":["../../src/utils/package-json.ts"],"sourcesContent":["import { join } from 'path';\nimport { kebabCase, mergeWith } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport { getPnpmOnlyBuiltDependencies, shouldUsePackageJsonPnpmConfig } from './pnpm-config';\nimport type { Scope } from '../types';\n\ntype PnpmPackageConfig = {\n onlyBuiltDependencies?: string[];\n [key: string]: unknown;\n};\n\ntype PackageJson = {\n pnpm?: PnpmPackageConfig;\n [key: string]: unknown;\n};\n\nconst mergePackageJson = (existingPkg: PackageJson, pkg: PackageJson) =>\n mergeWith({}, existingPkg, pkg, (_objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n\n return undefined;\n });\n\nconst getPnpmPackageJsonConfig = (scope: Scope, existingPkg: PackageJson) => {\n if (scope.packageManager !== 'pnpm' || !shouldUsePackageJsonPnpmConfig(scope.pnpmVersion)) {\n return {};\n }\n\n const existingOnlyBuiltDependencies = Array.isArray(existingPkg.pnpm?.onlyBuiltDependencies)\n ? existingPkg.pnpm.onlyBuiltDependencies.filter((dep): dep is string => typeof dep === 'string')\n : [];\n\n return {\n pnpm: {\n ...(existingPkg.pnpm ?? {}),\n onlyBuiltDependencies: getPnpmOnlyBuiltDependencies(scope, existingOnlyBuiltDependencies),\n },\n };\n};\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = (await fse.readJSON(pkgJSONPath).catch(() => ({}))) as PackageJson;\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n installId: scope.installId,\n },\n engines,\n ...getPnpmPackageJsonConfig(scope, existingPkg),\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(mergePackageJson(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n"],"names":["mergePackageJson","existingPkg","pkg","mergeWith","_objValue","srcValue","Array","isArray","undefined","getPnpmPackageJsonConfig","scope","packageManager","shouldUsePackageJsonPnpmConfig","pnpmVersion","existingOnlyBuiltDependencies","pnpm","onlyBuiltDependencies","filter","dep","getPnpmOnlyBuiltDependencies","createPackageJSON","sortPackageJson","pkgJSONPath","join","rootPath","fse","readJSON","catch","name","kebabCase","private","version","description","devDependencies","dependencies","strapi","packageJsonStrapi","uuid","installId","engines","writeJSON","spaces"],"mappings":";;;;;;;;;;;;AAkBA,MAAMA,gBAAAA,GAAmB,CAACC,WAAAA,EAA0BC,GAAAA,GAClDC,WAAAA,CAAU,EAAC,EAAGF,WAAAA,EAAaC,GAAAA,EAAK,CAACE,SAAAA,EAAWC,QAAAA,GAAAA;QAC1C,IAAIC,KAAAA,CAAMC,OAAO,CAACF,QAAAA,CAAAA,EAAW;YAC3B,OAAOA,QAAAA;AACT,QAAA;QAEA,OAAOG,SAAAA;AACT,IAAA,CAAA,CAAA;AAEF,MAAMC,wBAAAA,GAA2B,CAACC,KAAAA,EAAcT,WAAAA,GAAAA;IAC9C,IAAIS,KAAAA,CAAMC,cAAc,KAAK,MAAA,IAAU,CAACC,yCAAAA,CAA+BF,KAAAA,CAAMG,WAAW,CAAA,EAAG;AACzF,QAAA,OAAO,EAAC;AACV,IAAA;IAEA,MAAMC,6BAAAA,GAAgCR,MAAMC,OAAO,CAACN,YAAYc,IAAI,EAAEC,yBAClEf,WAAAA,CAAYc,IAAI,CAACC,qBAAqB,CAACC,MAAM,CAAC,CAACC,MAAuB,OAAOA,GAAAA,KAAQ,YACrF,EAAE;IAEN,OAAO;QACLH,IAAAA,EAAM;AACJ,YAAA,GAAId,WAAAA,CAAYc,IAAI,IAAI,EAAE;AAC1BC,YAAAA,qBAAAA,EAAuBG,wCAA6BT,KAAAA,EAAOI,6BAAAA;AAC7D;AACF,KAAA;AACF,CAAA;AAEO,eAAeM,kBAAkBV,KAAY,EAAA;AAClD,IAAA,MAAM,EAAEW,eAAe,EAAE,GAAG,MAAM,OAAO,mBAAA,CAAA;AAEzC,IAAA,MAAMC,WAAAA,GAAcC,SAAAA,CAAKb,KAAAA,CAAMc,QAAQ,EAAE,cAAA,CAAA;IAEzC,MAAMvB,WAAAA,GAAe,MAAMwB,oBAAAA,CAAIC,QAAQ,CAACJ,WAAAA,CAAAA,CAAaK,KAAK,CAAC,KAAO,EAAC,CAAA,CAAA;AAEnE,IAAA,MAAMzB,GAAAA,GAAM;QACV0B,IAAAA,EAAMC,WAAAA,CAAUnB,MAAMkB,IAAI,CAAA;QAC1BE,OAAAA,EAAS,IAAA;QACTC,OAAAA,EAAS,OAAA;QACTC,WAAAA,EAAa,sBAAA;QACbC,eAAAA,EAAiBvB,KAAAA,CAAMuB,eAAe,IAAI,EAAC;QAC3CC,YAAAA,EAAcxB,KAAAA,CAAMwB,YAAY,IAAI,EAAC;QACrCC,MAAAA,EAAQ;AACN,YAAA,GAAIzB,KAAAA,CAAM0B,iBAAiB,IAAI,EAAE;AACjCC,YAAAA,IAAAA,EAAM3B,MAAM2B,IAAI;AAChBC,YAAAA,SAAAA,EAAW5B,MAAM4B;AACnB,SAAA;AACAC,iBAAAA,eAAAA;QACA,GAAG9B,wBAAAA,CAAyBC,OAAOT,WAAAA;AACrC,KAAA;;AAGA,IAAA,MAAMwB,qBAAIe,SAAS,CAAClB,aAAaD,eAAAA,CAAgBrB,gBAAAA,CAAiBC,aAAaC,GAAAA,CAAAA,CAAAA,EAAO;QACpFuC,MAAAA,EAAQ;AACV,KAAA,CAAA;AACF;;;;"}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
|
-
import { kebabCase,
|
|
2
|
+
import { kebabCase, mergeWith } from 'lodash';
|
|
3
3
|
import fse from 'fs-extra';
|
|
4
4
|
import { engines } from './engines.mjs';
|
|
5
|
+
import { shouldUsePackageJsonPnpmConfig, getPnpmOnlyBuiltDependencies } from './pnpm-config.mjs';
|
|
5
6
|
|
|
7
|
+
const mergePackageJson = (existingPkg, pkg)=>mergeWith({}, existingPkg, pkg, (_objValue, srcValue)=>{
|
|
8
|
+
if (Array.isArray(srcValue)) {
|
|
9
|
+
return srcValue;
|
|
10
|
+
}
|
|
11
|
+
return undefined;
|
|
12
|
+
});
|
|
13
|
+
const getPnpmPackageJsonConfig = (scope, existingPkg)=>{
|
|
14
|
+
if (scope.packageManager !== 'pnpm' || !shouldUsePackageJsonPnpmConfig(scope.pnpmVersion)) {
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
const existingOnlyBuiltDependencies = Array.isArray(existingPkg.pnpm?.onlyBuiltDependencies) ? existingPkg.pnpm.onlyBuiltDependencies.filter((dep)=>typeof dep === 'string') : [];
|
|
18
|
+
return {
|
|
19
|
+
pnpm: {
|
|
20
|
+
...existingPkg.pnpm ?? {},
|
|
21
|
+
onlyBuiltDependencies: getPnpmOnlyBuiltDependencies(scope, existingOnlyBuiltDependencies)
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
6
25
|
async function createPackageJSON(scope) {
|
|
7
26
|
const { sortPackageJson } = await import('sort-package-json');
|
|
8
27
|
const pkgJSONPath = join(scope.rootPath, 'package.json');
|
|
@@ -19,10 +38,11 @@ async function createPackageJSON(scope) {
|
|
|
19
38
|
uuid: scope.uuid,
|
|
20
39
|
installId: scope.installId
|
|
21
40
|
},
|
|
22
|
-
engines
|
|
41
|
+
engines,
|
|
42
|
+
...getPnpmPackageJsonConfig(scope, existingPkg)
|
|
23
43
|
};
|
|
24
44
|
// copy templates
|
|
25
|
-
await fse.writeJSON(pkgJSONPath, sortPackageJson(
|
|
45
|
+
await fse.writeJSON(pkgJSONPath, sortPackageJson(mergePackageJson(existingPkg, pkg)), {
|
|
26
46
|
spaces: 2
|
|
27
47
|
});
|
|
28
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-json.mjs","sources":["../../src/utils/package-json.ts"],"sourcesContent":["import { join } from 'path';\nimport { kebabCase,
|
|
1
|
+
{"version":3,"file":"package-json.mjs","sources":["../../src/utils/package-json.ts"],"sourcesContent":["import { join } from 'path';\nimport { kebabCase, mergeWith } from 'lodash';\nimport fse from 'fs-extra';\n\nimport { engines } from './engines';\nimport { getPnpmOnlyBuiltDependencies, shouldUsePackageJsonPnpmConfig } from './pnpm-config';\nimport type { Scope } from '../types';\n\ntype PnpmPackageConfig = {\n onlyBuiltDependencies?: string[];\n [key: string]: unknown;\n};\n\ntype PackageJson = {\n pnpm?: PnpmPackageConfig;\n [key: string]: unknown;\n};\n\nconst mergePackageJson = (existingPkg: PackageJson, pkg: PackageJson) =>\n mergeWith({}, existingPkg, pkg, (_objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n\n return undefined;\n });\n\nconst getPnpmPackageJsonConfig = (scope: Scope, existingPkg: PackageJson) => {\n if (scope.packageManager !== 'pnpm' || !shouldUsePackageJsonPnpmConfig(scope.pnpmVersion)) {\n return {};\n }\n\n const existingOnlyBuiltDependencies = Array.isArray(existingPkg.pnpm?.onlyBuiltDependencies)\n ? existingPkg.pnpm.onlyBuiltDependencies.filter((dep): dep is string => typeof dep === 'string')\n : [];\n\n return {\n pnpm: {\n ...(existingPkg.pnpm ?? {}),\n onlyBuiltDependencies: getPnpmOnlyBuiltDependencies(scope, existingOnlyBuiltDependencies),\n },\n };\n};\n\nexport async function createPackageJSON(scope: Scope) {\n const { sortPackageJson } = await import('sort-package-json');\n\n const pkgJSONPath = join(scope.rootPath, 'package.json');\n\n const existingPkg = (await fse.readJSON(pkgJSONPath).catch(() => ({}))) as PackageJson;\n\n const pkg = {\n name: kebabCase(scope.name),\n private: true,\n version: '0.1.0',\n description: 'A Strapi application',\n devDependencies: scope.devDependencies ?? {},\n dependencies: scope.dependencies ?? {},\n strapi: {\n ...(scope.packageJsonStrapi ?? {}),\n uuid: scope.uuid,\n installId: scope.installId,\n },\n engines,\n ...getPnpmPackageJsonConfig(scope, existingPkg),\n };\n\n // copy templates\n await fse.writeJSON(pkgJSONPath, sortPackageJson(mergePackageJson(existingPkg, pkg)), {\n spaces: 2,\n });\n}\n"],"names":["mergePackageJson","existingPkg","pkg","mergeWith","_objValue","srcValue","Array","isArray","undefined","getPnpmPackageJsonConfig","scope","packageManager","shouldUsePackageJsonPnpmConfig","pnpmVersion","existingOnlyBuiltDependencies","pnpm","onlyBuiltDependencies","filter","dep","getPnpmOnlyBuiltDependencies","createPackageJSON","sortPackageJson","pkgJSONPath","join","rootPath","fse","readJSON","catch","name","kebabCase","private","version","description","devDependencies","dependencies","strapi","packageJsonStrapi","uuid","installId","engines","writeJSON","spaces"],"mappings":";;;;;;AAkBA,MAAMA,gBAAAA,GAAmB,CAACC,WAAAA,EAA0BC,GAAAA,GAClDC,SAAAA,CAAU,EAAC,EAAGF,WAAAA,EAAaC,GAAAA,EAAK,CAACE,SAAAA,EAAWC,QAAAA,GAAAA;QAC1C,IAAIC,KAAAA,CAAMC,OAAO,CAACF,QAAAA,CAAAA,EAAW;YAC3B,OAAOA,QAAAA;AACT,QAAA;QAEA,OAAOG,SAAAA;AACT,IAAA,CAAA,CAAA;AAEF,MAAMC,wBAAAA,GAA2B,CAACC,KAAAA,EAAcT,WAAAA,GAAAA;IAC9C,IAAIS,KAAAA,CAAMC,cAAc,KAAK,MAAA,IAAU,CAACC,8BAAAA,CAA+BF,KAAAA,CAAMG,WAAW,CAAA,EAAG;AACzF,QAAA,OAAO,EAAC;AACV,IAAA;IAEA,MAAMC,6BAAAA,GAAgCR,MAAMC,OAAO,CAACN,YAAYc,IAAI,EAAEC,yBAClEf,WAAAA,CAAYc,IAAI,CAACC,qBAAqB,CAACC,MAAM,CAAC,CAACC,MAAuB,OAAOA,GAAAA,KAAQ,YACrF,EAAE;IAEN,OAAO;QACLH,IAAAA,EAAM;AACJ,YAAA,GAAId,WAAAA,CAAYc,IAAI,IAAI,EAAE;AAC1BC,YAAAA,qBAAAA,EAAuBG,6BAA6BT,KAAAA,EAAOI,6BAAAA;AAC7D;AACF,KAAA;AACF,CAAA;AAEO,eAAeM,kBAAkBV,KAAY,EAAA;AAClD,IAAA,MAAM,EAAEW,eAAe,EAAE,GAAG,MAAM,OAAO,mBAAA,CAAA;AAEzC,IAAA,MAAMC,WAAAA,GAAcC,IAAAA,CAAKb,KAAAA,CAAMc,QAAQ,EAAE,cAAA,CAAA;IAEzC,MAAMvB,WAAAA,GAAe,MAAMwB,GAAAA,CAAIC,QAAQ,CAACJ,WAAAA,CAAAA,CAAaK,KAAK,CAAC,KAAO,EAAC,CAAA,CAAA;AAEnE,IAAA,MAAMzB,GAAAA,GAAM;QACV0B,IAAAA,EAAMC,SAAAA,CAAUnB,MAAMkB,IAAI,CAAA;QAC1BE,OAAAA,EAAS,IAAA;QACTC,OAAAA,EAAS,OAAA;QACTC,WAAAA,EAAa,sBAAA;QACbC,eAAAA,EAAiBvB,KAAAA,CAAMuB,eAAe,IAAI,EAAC;QAC3CC,YAAAA,EAAcxB,KAAAA,CAAMwB,YAAY,IAAI,EAAC;QACrCC,MAAAA,EAAQ;AACN,YAAA,GAAIzB,KAAAA,CAAM0B,iBAAiB,IAAI,EAAE;AACjCC,YAAAA,IAAAA,EAAM3B,MAAM2B,IAAI;AAChBC,YAAAA,SAAAA,EAAW5B,MAAM4B;AACnB,SAAA;AACAC,QAAAA,OAAAA;QACA,GAAG9B,wBAAAA,CAAyBC,OAAOT,WAAAA;AACrC,KAAA;;AAGA,IAAA,MAAMwB,IAAIe,SAAS,CAAClB,aAAaD,eAAAA,CAAgBrB,gBAAAA,CAAiBC,aAAaC,GAAAA,CAAAA,CAAAA,EAAO;QACpFuC,MAAAA,EAAQ;AACV,KAAA,CAAA;AACF;;;;"}
|
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
4
|
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var chalk__default = /*#__PURE__*/_interopDefault(chalk);
|
|
8
|
+
|
|
5
9
|
// TODO: move styles to API
|
|
6
10
|
const supportedStyles = {
|
|
7
|
-
magentaBright:
|
|
8
|
-
blueBright:
|
|
9
|
-
yellowBright:
|
|
10
|
-
green:
|
|
11
|
-
red:
|
|
12
|
-
bold:
|
|
13
|
-
italic:
|
|
11
|
+
magentaBright: chalk__default.default.magentaBright,
|
|
12
|
+
blueBright: chalk__default.default.blueBright,
|
|
13
|
+
yellowBright: chalk__default.default.yellowBright,
|
|
14
|
+
green: chalk__default.default.green,
|
|
15
|
+
red: chalk__default.default.red,
|
|
16
|
+
bold: chalk__default.default.bold,
|
|
17
|
+
italic: chalk__default.default.italic
|
|
14
18
|
};
|
|
15
19
|
function parseToChalk(template) {
|
|
16
20
|
let result = template;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-to-chalk.js","sources":["../../src/utils/parse-to-chalk.ts"],"sourcesContent":["import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n"],"names":["supportedStyles","magentaBright","chalk","blueBright","yellowBright","green","red","bold","italic","parseToChalk","template","result","color","chalkFunction","Object","entries","regex","RegExp","replace","_","p1","trim"],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-to-chalk.js","sources":["../../src/utils/parse-to-chalk.ts"],"sourcesContent":["import chalk from 'chalk';\n\n// TODO: move styles to API\n\nconst supportedStyles = {\n magentaBright: chalk.magentaBright,\n blueBright: chalk.blueBright,\n yellowBright: chalk.yellowBright,\n green: chalk.green,\n red: chalk.red,\n bold: chalk.bold,\n italic: chalk.italic,\n};\n\nexport default function parseToChalk(template: string) {\n let result = template;\n\n for (const [color, chalkFunction] of Object.entries(supportedStyles)) {\n const regex = new RegExp(`{${color}}(.*?){/${color}}`, 'g');\n result = result.replace(regex, (_, p1) => chalkFunction(p1.trim()));\n }\n\n return result;\n}\n"],"names":["supportedStyles","magentaBright","chalk","blueBright","yellowBright","green","red","bold","italic","parseToChalk","template","result","color","chalkFunction","Object","entries","regex","RegExp","replace","_","p1","trim"],"mappings":";;;;;;;;AAEA;AAEA,MAAMA,eAAAA,GAAkB;AACtBC,IAAAA,aAAAA,EAAeC,uBAAMD,aAAa;AAClCE,IAAAA,UAAAA,EAAYD,uBAAMC,UAAU;AAC5BC,IAAAA,YAAAA,EAAcF,uBAAME,YAAY;AAChCC,IAAAA,KAAAA,EAAOH,uBAAMG,KAAK;AAClBC,IAAAA,GAAAA,EAAKJ,uBAAMI,GAAG;AACdC,IAAAA,IAAAA,EAAML,uBAAMK,IAAI;AAChBC,IAAAA,MAAAA,EAAQN,uBAAMM;AAChB,CAAA;AAEe,SAASC,aAAaC,QAAgB,EAAA;AACnD,IAAA,IAAIC,MAAAA,GAASD,QAAAA;IAEb,KAAK,MAAM,CAACE,KAAAA,EAAOC,aAAAA,CAAc,IAAIC,MAAAA,CAAOC,OAAO,CAACf,eAAAA,CAAAA,CAAkB;AACpE,QAAA,MAAMgB,KAAAA,GAAQ,IAAIC,MAAAA,CAAO,CAAC,CAAC,EAAEL,KAAAA,CAAM,QAAQ,EAAEA,KAAAA,CAAM,CAAC,CAAC,EAAE,GAAA,CAAA;QACvDD,MAAAA,GAASA,MAAAA,CAAOO,OAAO,CAACF,KAAAA,EAAO,CAACG,CAAAA,EAAGC,EAAAA,GAAOP,aAAAA,CAAcO,EAAAA,CAAGC,IAAI,EAAA,CAAA,CAAA;AACjE,IAAA;IAEA,OAAOV,MAAAA;AACT;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Scope } from '../types';
|
|
2
|
+
/** allowBuilds in pnpm-workspace.yaml (pnpm >= 10.26). */
|
|
3
|
+
export declare const PNPM_WORKSPACE_CONFIG_MIN_VERSION = "10.26.0";
|
|
4
|
+
/** pnpm 11 reads project settings from pnpm-workspace.yaml only. */
|
|
5
|
+
export declare const PNPM11_MIN_VERSION = "11.0.0";
|
|
6
|
+
/**
|
|
7
|
+
* Native / tooling packages Strapi needs to run postinstall scripts for (admin build, upload, sqlite).
|
|
8
|
+
*/
|
|
9
|
+
export declare const PNPM_STRAPI_BUILD_PACKAGES: readonly ["@swc/core", "core-js-pure", "esbuild", "sharp"];
|
|
10
|
+
export declare const PNPM_SQLITE_BUILD_PACKAGE = "better-sqlite3";
|
|
11
|
+
export declare const shouldUsePnpmWorkspaceConfig: (pnpmVersion: string | null | undefined) => boolean;
|
|
12
|
+
export declare const shouldUsePackageJsonPnpmConfig: (pnpmVersion: string | null | undefined) => boolean;
|
|
13
|
+
export declare const getPnpmBuildPackageNames: (scope: Scope) => string[];
|
|
14
|
+
export declare const getPnpmAllowBuilds: (scope: Scope) => Record<string, true>;
|
|
15
|
+
export declare const getPnpmOnlyBuiltDependencies: (scope: Scope, existing?: string[]) => string[];
|
|
16
|
+
export declare const formatPnpmWorkspaceYaml: (scope: Scope, pnpmVersion: string | null) => string;
|
|
17
|
+
export declare const writePnpmWorkspaceConfig: (scope: Scope, pnpmVersion: string | null) => Promise<void>;
|
|
18
|
+
//# sourceMappingURL=pnpm-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-config.d.ts","sourceRoot":"","sources":["../../src/utils/pnpm-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,0DAA0D;AAC1D,eAAO,MAAM,iCAAiC,YAAY,CAAC;AAE3D,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,0BAA0B,4DAK7B,CAAC;AAEX,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D,eAAO,MAAM,4BAA4B,GAAI,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAIrF,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,aAAa,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,OAQvF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,OAAO,KAAK,KAAG,MAAM,EAQ7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,KAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAKpE,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,KAAK,EAAE,WAAU,MAAM,EAAO,KAAG,MAAM,EAE1F,CAAC;AAUF,eAAO,MAAM,uBAAuB,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,GAAG,IAAI,KAAG,MAuBlF,CAAC;AAgBF,eAAO,MAAM,wBAAwB,GACnC,OAAO,KAAK,EACZ,aAAa,MAAM,GAAG,IAAI,KACzB,OAAO,CAAC,IAAI,CAgBd,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
var fse = require('fs-extra');
|
|
5
|
+
var semver = require('semver');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var fse__default = /*#__PURE__*/_interopDefault(fse);
|
|
10
|
+
var semver__default = /*#__PURE__*/_interopDefault(semver);
|
|
11
|
+
|
|
12
|
+
/** allowBuilds in pnpm-workspace.yaml (pnpm >= 10.26). */ const PNPM_WORKSPACE_CONFIG_MIN_VERSION = '10.26.0';
|
|
13
|
+
/** pnpm 11 reads project settings from pnpm-workspace.yaml only. */ const PNPM11_MIN_VERSION = '11.0.0';
|
|
14
|
+
/**
|
|
15
|
+
* Native / tooling packages Strapi needs to run postinstall scripts for (admin build, upload, sqlite).
|
|
16
|
+
*/ const PNPM_STRAPI_BUILD_PACKAGES = [
|
|
17
|
+
'@swc/core',
|
|
18
|
+
'core-js-pure',
|
|
19
|
+
'esbuild',
|
|
20
|
+
'sharp'
|
|
21
|
+
];
|
|
22
|
+
const PNPM_SQLITE_BUILD_PACKAGE = 'better-sqlite3';
|
|
23
|
+
const shouldUsePnpmWorkspaceConfig = (pnpmVersion)=>{
|
|
24
|
+
const normalized = pnpmVersion ? semver__default.default.coerce(pnpmVersion)?.version : null;
|
|
25
|
+
return normalized ? semver__default.default.gte(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION) : true;
|
|
26
|
+
};
|
|
27
|
+
const shouldUsePackageJsonPnpmConfig = (pnpmVersion)=>{
|
|
28
|
+
const normalized = pnpmVersion ? semver__default.default.coerce(pnpmVersion)?.version : null;
|
|
29
|
+
if (!normalized) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return semver__default.default.lt(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION);
|
|
33
|
+
};
|
|
34
|
+
const getPnpmBuildPackageNames = (scope)=>{
|
|
35
|
+
const packages = new Set(PNPM_STRAPI_BUILD_PACKAGES);
|
|
36
|
+
if (scope.database.client === 'sqlite') {
|
|
37
|
+
packages.add(PNPM_SQLITE_BUILD_PACKAGE);
|
|
38
|
+
}
|
|
39
|
+
return Array.from(packages).sort();
|
|
40
|
+
};
|
|
41
|
+
const getPnpmAllowBuilds = (scope)=>{
|
|
42
|
+
return Object.fromEntries(getPnpmBuildPackageNames(scope).map((name)=>[
|
|
43
|
+
name,
|
|
44
|
+
true
|
|
45
|
+
]));
|
|
46
|
+
};
|
|
47
|
+
const getPnpmOnlyBuiltDependencies = (scope, existing = [])=>{
|
|
48
|
+
return Array.from(new Set([
|
|
49
|
+
...existing,
|
|
50
|
+
...getPnpmBuildPackageNames(scope)
|
|
51
|
+
])).sort();
|
|
52
|
+
};
|
|
53
|
+
const quoteYamlKey = (key)=>{
|
|
54
|
+
if (/^[a-z0-9_-]+$/.test(key)) {
|
|
55
|
+
return key;
|
|
56
|
+
}
|
|
57
|
+
return `'${key}'`;
|
|
58
|
+
};
|
|
59
|
+
const formatPnpmWorkspaceYaml = (scope, pnpmVersion)=>{
|
|
60
|
+
const allowBuilds = getPnpmAllowBuilds(scope);
|
|
61
|
+
const normalized = pnpmVersion ? semver__default.default.coerce(pnpmVersion)?.version : null;
|
|
62
|
+
const isPnpm11 = normalized ? semver__default.default.gte(normalized, PNPM11_MIN_VERSION) : true;
|
|
63
|
+
const lines = [
|
|
64
|
+
'packages:',
|
|
65
|
+
" - '.'",
|
|
66
|
+
''
|
|
67
|
+
];
|
|
68
|
+
if (isPnpm11) {
|
|
69
|
+
lines.push('# Allow day-0 @strapi/* npm publishes while keeping pnpm 11 supply-chain defaults for other deps.', 'minimumReleaseAgeExclude:', " - '@strapi/*'", '');
|
|
70
|
+
}
|
|
71
|
+
lines.push('allowBuilds:');
|
|
72
|
+
for (const name of Object.keys(allowBuilds).sort()){
|
|
73
|
+
lines.push(` ${quoteYamlKey(name)}: true`);
|
|
74
|
+
}
|
|
75
|
+
lines.push('');
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
};
|
|
78
|
+
const hasParentPnpmWorkspace = async (rootPath)=>{
|
|
79
|
+
let dir = path.join(rootPath, '..');
|
|
80
|
+
while(dir !== path.join(dir, '..')){
|
|
81
|
+
if (await fse__default.default.pathExists(path.join(dir, 'pnpm-workspace.yaml'))) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
dir = path.join(dir, '..');
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
};
|
|
88
|
+
const writePnpmWorkspaceConfig = async (scope, pnpmVersion)=>{
|
|
89
|
+
if (scope.packageManager !== 'pnpm' || !shouldUsePnpmWorkspaceConfig(pnpmVersion)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const workspaceFile = path.join(scope.rootPath, 'pnpm-workspace.yaml');
|
|
93
|
+
if (await hasParentPnpmWorkspace(scope.rootPath)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (await fse__default.default.pathExists(workspaceFile)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
await fse__default.default.writeFile(workspaceFile, formatPnpmWorkspaceYaml(scope, pnpmVersion));
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
exports.PNPM11_MIN_VERSION = PNPM11_MIN_VERSION;
|
|
103
|
+
exports.PNPM_SQLITE_BUILD_PACKAGE = PNPM_SQLITE_BUILD_PACKAGE;
|
|
104
|
+
exports.PNPM_STRAPI_BUILD_PACKAGES = PNPM_STRAPI_BUILD_PACKAGES;
|
|
105
|
+
exports.PNPM_WORKSPACE_CONFIG_MIN_VERSION = PNPM_WORKSPACE_CONFIG_MIN_VERSION;
|
|
106
|
+
exports.formatPnpmWorkspaceYaml = formatPnpmWorkspaceYaml;
|
|
107
|
+
exports.getPnpmAllowBuilds = getPnpmAllowBuilds;
|
|
108
|
+
exports.getPnpmBuildPackageNames = getPnpmBuildPackageNames;
|
|
109
|
+
exports.getPnpmOnlyBuiltDependencies = getPnpmOnlyBuiltDependencies;
|
|
110
|
+
exports.shouldUsePackageJsonPnpmConfig = shouldUsePackageJsonPnpmConfig;
|
|
111
|
+
exports.shouldUsePnpmWorkspaceConfig = shouldUsePnpmWorkspaceConfig;
|
|
112
|
+
exports.writePnpmWorkspaceConfig = writePnpmWorkspaceConfig;
|
|
113
|
+
//# sourceMappingURL=pnpm-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-config.js","sources":["../../src/utils/pnpm-config.ts"],"sourcesContent":["import { join } from 'node:path';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport type { Scope } from '../types';\n\n/** allowBuilds in pnpm-workspace.yaml (pnpm >= 10.26). */\nexport const PNPM_WORKSPACE_CONFIG_MIN_VERSION = '10.26.0';\n\n/** pnpm 11 reads project settings from pnpm-workspace.yaml only. */\nexport const PNPM11_MIN_VERSION = '11.0.0';\n\n/**\n * Native / tooling packages Strapi needs to run postinstall scripts for (admin build, upload, sqlite).\n */\nexport const PNPM_STRAPI_BUILD_PACKAGES = [\n '@swc/core',\n 'core-js-pure',\n 'esbuild',\n 'sharp',\n] as const;\n\nexport const PNPM_SQLITE_BUILD_PACKAGE = 'better-sqlite3';\n\nexport const shouldUsePnpmWorkspaceConfig = (pnpmVersion: string | null | undefined): boolean => {\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n\n return normalized ? semver.gte(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION) : true;\n};\n\nexport const shouldUsePackageJsonPnpmConfig = (pnpmVersion: string | null | undefined): boolean => {\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n\n if (!normalized) {\n return false;\n }\n\n return semver.lt(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION);\n};\n\nexport const getPnpmBuildPackageNames = (scope: Scope): string[] => {\n const packages = new Set<string>(PNPM_STRAPI_BUILD_PACKAGES);\n\n if (scope.database.client === 'sqlite') {\n packages.add(PNPM_SQLITE_BUILD_PACKAGE);\n }\n\n return Array.from(packages).sort();\n};\n\nexport const getPnpmAllowBuilds = (scope: Scope): Record<string, true> => {\n return Object.fromEntries(getPnpmBuildPackageNames(scope).map((name) => [name, true])) as Record<\n string,\n true\n >;\n};\n\nexport const getPnpmOnlyBuiltDependencies = (scope: Scope, existing: string[] = []): string[] => {\n return Array.from(new Set([...existing, ...getPnpmBuildPackageNames(scope)])).sort();\n};\n\nconst quoteYamlKey = (key: string): string => {\n if (/^[a-z0-9_-]+$/.test(key)) {\n return key;\n }\n\n return `'${key}'`;\n};\n\nexport const formatPnpmWorkspaceYaml = (scope: Scope, pnpmVersion: string | null): string => {\n const allowBuilds = getPnpmAllowBuilds(scope);\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n const isPnpm11 = normalized ? semver.gte(normalized, PNPM11_MIN_VERSION) : true;\n\n const lines = ['packages:', \" - '.'\", ''];\n\n if (isPnpm11) {\n lines.push(\n '# Allow day-0 @strapi/* npm publishes while keeping pnpm 11 supply-chain defaults for other deps.',\n 'minimumReleaseAgeExclude:',\n \" - '@strapi/*'\",\n ''\n );\n }\n\n lines.push('allowBuilds:');\n for (const name of Object.keys(allowBuilds).sort()) {\n lines.push(` ${quoteYamlKey(name)}: true`);\n }\n lines.push('');\n\n return lines.join('\\n');\n};\n\nconst hasParentPnpmWorkspace = async (rootPath: string): Promise<boolean> => {\n let dir = join(rootPath, '..');\n\n while (dir !== join(dir, '..')) {\n if (await fse.pathExists(join(dir, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n dir = join(dir, '..');\n }\n\n return false;\n};\n\nexport const writePnpmWorkspaceConfig = async (\n scope: Scope,\n pnpmVersion: string | null\n): Promise<void> => {\n if (scope.packageManager !== 'pnpm' || !shouldUsePnpmWorkspaceConfig(pnpmVersion)) {\n return;\n }\n\n const workspaceFile = join(scope.rootPath, 'pnpm-workspace.yaml');\n\n if (await hasParentPnpmWorkspace(scope.rootPath)) {\n return;\n }\n\n if (await fse.pathExists(workspaceFile)) {\n return;\n }\n\n await fse.writeFile(workspaceFile, formatPnpmWorkspaceYaml(scope, pnpmVersion));\n};\n"],"names":["PNPM_WORKSPACE_CONFIG_MIN_VERSION","PNPM11_MIN_VERSION","PNPM_STRAPI_BUILD_PACKAGES","PNPM_SQLITE_BUILD_PACKAGE","shouldUsePnpmWorkspaceConfig","pnpmVersion","normalized","semver","coerce","version","gte","shouldUsePackageJsonPnpmConfig","lt","getPnpmBuildPackageNames","scope","packages","Set","database","client","add","Array","from","sort","getPnpmAllowBuilds","Object","fromEntries","map","name","getPnpmOnlyBuiltDependencies","existing","quoteYamlKey","key","test","formatPnpmWorkspaceYaml","allowBuilds","isPnpm11","lines","push","keys","join","hasParentPnpmWorkspace","rootPath","dir","fse","pathExists","writePnpmWorkspaceConfig","packageManager","workspaceFile","writeFile"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import fse from 'fs-extra';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
|
|
5
|
+
/** allowBuilds in pnpm-workspace.yaml (pnpm >= 10.26). */ const PNPM_WORKSPACE_CONFIG_MIN_VERSION = '10.26.0';
|
|
6
|
+
/** pnpm 11 reads project settings from pnpm-workspace.yaml only. */ const PNPM11_MIN_VERSION = '11.0.0';
|
|
7
|
+
/**
|
|
8
|
+
* Native / tooling packages Strapi needs to run postinstall scripts for (admin build, upload, sqlite).
|
|
9
|
+
*/ const PNPM_STRAPI_BUILD_PACKAGES = [
|
|
10
|
+
'@swc/core',
|
|
11
|
+
'core-js-pure',
|
|
12
|
+
'esbuild',
|
|
13
|
+
'sharp'
|
|
14
|
+
];
|
|
15
|
+
const PNPM_SQLITE_BUILD_PACKAGE = 'better-sqlite3';
|
|
16
|
+
const shouldUsePnpmWorkspaceConfig = (pnpmVersion)=>{
|
|
17
|
+
const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;
|
|
18
|
+
return normalized ? semver.gte(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION) : true;
|
|
19
|
+
};
|
|
20
|
+
const shouldUsePackageJsonPnpmConfig = (pnpmVersion)=>{
|
|
21
|
+
const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;
|
|
22
|
+
if (!normalized) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return semver.lt(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION);
|
|
26
|
+
};
|
|
27
|
+
const getPnpmBuildPackageNames = (scope)=>{
|
|
28
|
+
const packages = new Set(PNPM_STRAPI_BUILD_PACKAGES);
|
|
29
|
+
if (scope.database.client === 'sqlite') {
|
|
30
|
+
packages.add(PNPM_SQLITE_BUILD_PACKAGE);
|
|
31
|
+
}
|
|
32
|
+
return Array.from(packages).sort();
|
|
33
|
+
};
|
|
34
|
+
const getPnpmAllowBuilds = (scope)=>{
|
|
35
|
+
return Object.fromEntries(getPnpmBuildPackageNames(scope).map((name)=>[
|
|
36
|
+
name,
|
|
37
|
+
true
|
|
38
|
+
]));
|
|
39
|
+
};
|
|
40
|
+
const getPnpmOnlyBuiltDependencies = (scope, existing = [])=>{
|
|
41
|
+
return Array.from(new Set([
|
|
42
|
+
...existing,
|
|
43
|
+
...getPnpmBuildPackageNames(scope)
|
|
44
|
+
])).sort();
|
|
45
|
+
};
|
|
46
|
+
const quoteYamlKey = (key)=>{
|
|
47
|
+
if (/^[a-z0-9_-]+$/.test(key)) {
|
|
48
|
+
return key;
|
|
49
|
+
}
|
|
50
|
+
return `'${key}'`;
|
|
51
|
+
};
|
|
52
|
+
const formatPnpmWorkspaceYaml = (scope, pnpmVersion)=>{
|
|
53
|
+
const allowBuilds = getPnpmAllowBuilds(scope);
|
|
54
|
+
const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;
|
|
55
|
+
const isPnpm11 = normalized ? semver.gte(normalized, PNPM11_MIN_VERSION) : true;
|
|
56
|
+
const lines = [
|
|
57
|
+
'packages:',
|
|
58
|
+
" - '.'",
|
|
59
|
+
''
|
|
60
|
+
];
|
|
61
|
+
if (isPnpm11) {
|
|
62
|
+
lines.push('# Allow day-0 @strapi/* npm publishes while keeping pnpm 11 supply-chain defaults for other deps.', 'minimumReleaseAgeExclude:', " - '@strapi/*'", '');
|
|
63
|
+
}
|
|
64
|
+
lines.push('allowBuilds:');
|
|
65
|
+
for (const name of Object.keys(allowBuilds).sort()){
|
|
66
|
+
lines.push(` ${quoteYamlKey(name)}: true`);
|
|
67
|
+
}
|
|
68
|
+
lines.push('');
|
|
69
|
+
return lines.join('\n');
|
|
70
|
+
};
|
|
71
|
+
const hasParentPnpmWorkspace = async (rootPath)=>{
|
|
72
|
+
let dir = join(rootPath, '..');
|
|
73
|
+
while(dir !== join(dir, '..')){
|
|
74
|
+
if (await fse.pathExists(join(dir, 'pnpm-workspace.yaml'))) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
dir = join(dir, '..');
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
const writePnpmWorkspaceConfig = async (scope, pnpmVersion)=>{
|
|
82
|
+
if (scope.packageManager !== 'pnpm' || !shouldUsePnpmWorkspaceConfig(pnpmVersion)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const workspaceFile = join(scope.rootPath, 'pnpm-workspace.yaml');
|
|
86
|
+
if (await hasParentPnpmWorkspace(scope.rootPath)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (await fse.pathExists(workspaceFile)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await fse.writeFile(workspaceFile, formatPnpmWorkspaceYaml(scope, pnpmVersion));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export { PNPM11_MIN_VERSION, PNPM_SQLITE_BUILD_PACKAGE, PNPM_STRAPI_BUILD_PACKAGES, PNPM_WORKSPACE_CONFIG_MIN_VERSION, formatPnpmWorkspaceYaml, getPnpmAllowBuilds, getPnpmBuildPackageNames, getPnpmOnlyBuiltDependencies, shouldUsePackageJsonPnpmConfig, shouldUsePnpmWorkspaceConfig, writePnpmWorkspaceConfig };
|
|
96
|
+
//# sourceMappingURL=pnpm-config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpm-config.mjs","sources":["../../src/utils/pnpm-config.ts"],"sourcesContent":["import { join } from 'node:path';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport type { Scope } from '../types';\n\n/** allowBuilds in pnpm-workspace.yaml (pnpm >= 10.26). */\nexport const PNPM_WORKSPACE_CONFIG_MIN_VERSION = '10.26.0';\n\n/** pnpm 11 reads project settings from pnpm-workspace.yaml only. */\nexport const PNPM11_MIN_VERSION = '11.0.0';\n\n/**\n * Native / tooling packages Strapi needs to run postinstall scripts for (admin build, upload, sqlite).\n */\nexport const PNPM_STRAPI_BUILD_PACKAGES = [\n '@swc/core',\n 'core-js-pure',\n 'esbuild',\n 'sharp',\n] as const;\n\nexport const PNPM_SQLITE_BUILD_PACKAGE = 'better-sqlite3';\n\nexport const shouldUsePnpmWorkspaceConfig = (pnpmVersion: string | null | undefined): boolean => {\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n\n return normalized ? semver.gte(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION) : true;\n};\n\nexport const shouldUsePackageJsonPnpmConfig = (pnpmVersion: string | null | undefined): boolean => {\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n\n if (!normalized) {\n return false;\n }\n\n return semver.lt(normalized, PNPM_WORKSPACE_CONFIG_MIN_VERSION);\n};\n\nexport const getPnpmBuildPackageNames = (scope: Scope): string[] => {\n const packages = new Set<string>(PNPM_STRAPI_BUILD_PACKAGES);\n\n if (scope.database.client === 'sqlite') {\n packages.add(PNPM_SQLITE_BUILD_PACKAGE);\n }\n\n return Array.from(packages).sort();\n};\n\nexport const getPnpmAllowBuilds = (scope: Scope): Record<string, true> => {\n return Object.fromEntries(getPnpmBuildPackageNames(scope).map((name) => [name, true])) as Record<\n string,\n true\n >;\n};\n\nexport const getPnpmOnlyBuiltDependencies = (scope: Scope, existing: string[] = []): string[] => {\n return Array.from(new Set([...existing, ...getPnpmBuildPackageNames(scope)])).sort();\n};\n\nconst quoteYamlKey = (key: string): string => {\n if (/^[a-z0-9_-]+$/.test(key)) {\n return key;\n }\n\n return `'${key}'`;\n};\n\nexport const formatPnpmWorkspaceYaml = (scope: Scope, pnpmVersion: string | null): string => {\n const allowBuilds = getPnpmAllowBuilds(scope);\n const normalized = pnpmVersion ? semver.coerce(pnpmVersion)?.version : null;\n const isPnpm11 = normalized ? semver.gte(normalized, PNPM11_MIN_VERSION) : true;\n\n const lines = ['packages:', \" - '.'\", ''];\n\n if (isPnpm11) {\n lines.push(\n '# Allow day-0 @strapi/* npm publishes while keeping pnpm 11 supply-chain defaults for other deps.',\n 'minimumReleaseAgeExclude:',\n \" - '@strapi/*'\",\n ''\n );\n }\n\n lines.push('allowBuilds:');\n for (const name of Object.keys(allowBuilds).sort()) {\n lines.push(` ${quoteYamlKey(name)}: true`);\n }\n lines.push('');\n\n return lines.join('\\n');\n};\n\nconst hasParentPnpmWorkspace = async (rootPath: string): Promise<boolean> => {\n let dir = join(rootPath, '..');\n\n while (dir !== join(dir, '..')) {\n if (await fse.pathExists(join(dir, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n dir = join(dir, '..');\n }\n\n return false;\n};\n\nexport const writePnpmWorkspaceConfig = async (\n scope: Scope,\n pnpmVersion: string | null\n): Promise<void> => {\n if (scope.packageManager !== 'pnpm' || !shouldUsePnpmWorkspaceConfig(pnpmVersion)) {\n return;\n }\n\n const workspaceFile = join(scope.rootPath, 'pnpm-workspace.yaml');\n\n if (await hasParentPnpmWorkspace(scope.rootPath)) {\n return;\n }\n\n if (await fse.pathExists(workspaceFile)) {\n return;\n }\n\n await fse.writeFile(workspaceFile, formatPnpmWorkspaceYaml(scope, pnpmVersion));\n};\n"],"names":["PNPM_WORKSPACE_CONFIG_MIN_VERSION","PNPM11_MIN_VERSION","PNPM_STRAPI_BUILD_PACKAGES","PNPM_SQLITE_BUILD_PACKAGE","shouldUsePnpmWorkspaceConfig","pnpmVersion","normalized","semver","coerce","version","gte","shouldUsePackageJsonPnpmConfig","lt","getPnpmBuildPackageNames","scope","packages","Set","database","client","add","Array","from","sort","getPnpmAllowBuilds","Object","fromEntries","map","name","getPnpmOnlyBuiltDependencies","existing","quoteYamlKey","key","test","formatPnpmWorkspaceYaml","allowBuilds","isPnpm11","lines","push","keys","join","hasParentPnpmWorkspace","rootPath","dir","fse","pathExists","writePnpmWorkspaceConfig","packageManager","workspaceFile","writeFile"],"mappings":"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"}
|
package/dist/utils/template.js
CHANGED
|
@@ -8,7 +8,10 @@ var tar = require('tar');
|
|
|
8
8
|
var retry = require('async-retry');
|
|
9
9
|
var fse = require('fs-extra');
|
|
10
10
|
|
|
11
|
-
function
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
|
|
13
|
+
function _interopNamespace(e) {
|
|
14
|
+
if (e && e.__esModule) return e;
|
|
12
15
|
var n = Object.create(null);
|
|
13
16
|
if (e) {
|
|
14
17
|
Object.keys(e).forEach(function (k) {
|
|
@@ -25,7 +28,11 @@ function _interopNamespaceDefault(e) {
|
|
|
25
28
|
return Object.freeze(n);
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
var
|
|
31
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
32
|
+
var url__default = /*#__PURE__*/_interopDefault(url);
|
|
33
|
+
var tar__namespace = /*#__PURE__*/_interopNamespace(tar);
|
|
34
|
+
var retry__default = /*#__PURE__*/_interopDefault(retry);
|
|
35
|
+
var fse__default = /*#__PURE__*/_interopDefault(fse);
|
|
29
36
|
|
|
30
37
|
const stripTrailingSlash = (str)=>{
|
|
31
38
|
return str.endsWith('/') ? str.slice(0, -1) : str;
|
|
@@ -37,7 +44,7 @@ async function copyTemplate(scope, rootPath) {
|
|
|
37
44
|
throw new Error('Missing template or example app option');
|
|
38
45
|
}
|
|
39
46
|
if (await isOfficialTemplate(template, scope.templateBranch)) {
|
|
40
|
-
await
|
|
47
|
+
await retry__default.default(()=>downloadGithubRepo(rootPath, {
|
|
41
48
|
owner: 'strapi',
|
|
42
49
|
repo: 'strapi',
|
|
43
50
|
branch: scope.templateBranch,
|
|
@@ -51,13 +58,13 @@ async function copyTemplate(scope, rootPath) {
|
|
|
51
58
|
return;
|
|
52
59
|
}
|
|
53
60
|
if (isLocalTemplate(template)) {
|
|
54
|
-
const filePath = template.startsWith('file://') ?
|
|
55
|
-
await
|
|
61
|
+
const filePath = template.startsWith('file://') ? url__default.default.fileURLToPath(template) : template;
|
|
62
|
+
await fse__default.default.copy(filePath, rootPath);
|
|
56
63
|
}
|
|
57
64
|
if (isGithubShorthand(template)) {
|
|
58
65
|
const [owner, repo, ...pathSegments] = template.split('/');
|
|
59
66
|
const subPath = pathSegments.length ? pathSegments.join('/') : scope.templatePath;
|
|
60
|
-
await
|
|
67
|
+
await retry__default.default(()=>downloadGithubRepo(rootPath, {
|
|
61
68
|
owner,
|
|
62
69
|
repo,
|
|
63
70
|
branch: scope.templateBranch,
|
|
@@ -77,7 +84,7 @@ async function copyTemplate(scope, rootPath) {
|
|
|
77
84
|
throw new Error(`Invalid GitHub template URL: ${template}`);
|
|
78
85
|
}
|
|
79
86
|
if (scope.templateBranch) {
|
|
80
|
-
await
|
|
87
|
+
await retry__default.default(()=>downloadGithubRepo(rootPath, {
|
|
81
88
|
owner,
|
|
82
89
|
repo,
|
|
83
90
|
branch: scope.templateBranch,
|
|
@@ -90,7 +97,7 @@ async function copyTemplate(scope, rootPath) {
|
|
|
90
97
|
});
|
|
91
98
|
return;
|
|
92
99
|
}
|
|
93
|
-
await
|
|
100
|
+
await retry__default.default(()=>downloadGithubRepo(rootPath, {
|
|
94
101
|
owner,
|
|
95
102
|
repo,
|
|
96
103
|
branch: decodeURIComponent(branch) ?? scope.templateBranch,
|
|
@@ -105,7 +112,7 @@ async function copyTemplate(scope, rootPath) {
|
|
|
105
112
|
}
|
|
106
113
|
}
|
|
107
114
|
async function downloadGithubRepo(rootPath, { owner, repo, branch, subPath }) {
|
|
108
|
-
const filePath = subPath ? subPath.split('/').join(
|
|
115
|
+
const filePath = subPath ? subPath.split('/').join(path__default.default.posix.sep) : null;
|
|
109
116
|
let checkContentUrl = `https://api.github.com/repos/${owner}/${repo}/contents`;
|
|
110
117
|
if (filePath) {
|
|
111
118
|
checkContentUrl = `${checkContentUrl}/${filePath}`;
|
|
@@ -140,7 +147,7 @@ async function downloadGithubRepo(rootPath, { owner, repo, branch, subPath }) {
|
|
|
140
147
|
}));
|
|
141
148
|
}
|
|
142
149
|
function isLocalTemplate(template) {
|
|
143
|
-
return template.startsWith('file://') ||
|
|
150
|
+
return template.startsWith('file://') || fse__default.default.existsSync(path__default.default.isAbsolute(template) ? template : path__default.default.resolve(process.cwd(), template));
|
|
144
151
|
}
|
|
145
152
|
function isGithubShorthand(value) {
|
|
146
153
|
if (isValidUrl(value)) {
|