@strapi/strapi 5.58.0 → 5.59.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/README.md +1 -1
- package/dist/cli/commands/enterprise/install/action.d.ts +0 -1
- package/dist/cli/commands/enterprise/install/action.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/install/license.d.ts +2 -3
- package/dist/cli/commands/enterprise/install/license.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/install/package-manager.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/install/registry-access.d.ts.map +1 -1
- package/dist/node/create-build-context.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/enterprise/install/action.js +0 -2
- package/dist/src/cli/commands/enterprise/install/action.js.map +1 -1
- package/dist/src/cli/commands/enterprise/install/action.mjs +0 -2
- package/dist/src/cli/commands/enterprise/install/action.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/install/license.js +6 -12
- package/dist/src/cli/commands/enterprise/install/license.js.map +1 -1
- package/dist/src/cli/commands/enterprise/install/license.mjs +6 -12
- package/dist/src/cli/commands/enterprise/install/license.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/install/package-manager.js.map +1 -1
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/install/registry-access.js.map +1 -1
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs.map +1 -1
- package/dist/src/node/create-build-context.js +5 -1
- package/dist/src/node/create-build-context.js.map +1 -1
- package/dist/src/node/create-build-context.mjs +5 -1
- package/dist/src/node/create-build-context.mjs.map +1 -1
- package/package.json +24 -24
package/README.md
CHANGED
|
@@ -136,7 +136,7 @@ You can unlock additional features such as SSO, Audit Logs, Review Workflows in
|
|
|
136
136
|
|
|
137
137
|
## Contributing
|
|
138
138
|
|
|
139
|
-
Please read our [Contributing Guide](
|
|
139
|
+
Please read our [Contributing Guide](https://github.com/strapi/strapi/blob/main/CONTRIBUTING.md) before submitting a Pull Request to the project.
|
|
140
140
|
|
|
141
141
|
## Community support
|
|
142
142
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/action.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAuB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,WAAW,CAAC;AAK7D,OAAO,EAAkD,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAW/F,UAAU,mBAAmB;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/action.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAuB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,WAAW,CAAC;AAK7D,OAAO,EAAkD,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAW/F,UAAU,mBAAmB;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,OAAO,KAAK,CAAC;IAClC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,eAAe,EAAE,OAAO,eAAe,CAAC;CACzC;AA0BD,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB,GAAI,iBAAiB,MAAM,KAAG,gBAqB9D,CAAC;AAqKF,eAAO,MAAM,UAAU,GAAU,qDAK9B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,mBAAmB,CAAC;CACnC,KAAG,OAAO,CAAC,IAAI,CA8Df,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,EAAE,QAAQ,MAAM,KAAG,MAiBnE,CAAC;AAEF,eAAO,MAAM,MAAM,GACjB,kBAAkB,MAAM,EAAE,EAC1B,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,KAC7B,OAAO,CAAC,IAAI,CAwBd,CAAC"}
|
|
@@ -13,15 +13,14 @@ export declare const findLicense: ({ appDir, env, }: {
|
|
|
13
13
|
appDir: string;
|
|
14
14
|
env: NodeJS.ProcessEnv;
|
|
15
15
|
}) => Promise<FoundLicense | undefined>;
|
|
16
|
-
export declare const validateLicense: (license: string
|
|
16
|
+
export declare const validateLicense: (license: string) => void;
|
|
17
17
|
export declare const promptForLicense: () => Promise<string>;
|
|
18
18
|
export declare const saveLicenseFile: (appDir: string, license: string, logger: Logger) => Promise<void>;
|
|
19
|
-
export declare const resolveLicense: ({ appDir, isInteractive, logger, env,
|
|
19
|
+
export declare const resolveLicense: ({ appDir, isInteractive, logger, env, prompt, }: {
|
|
20
20
|
appDir: string;
|
|
21
21
|
isInteractive: boolean;
|
|
22
22
|
logger: Logger;
|
|
23
23
|
env: NodeJS.ProcessEnv;
|
|
24
|
-
now: Date;
|
|
25
24
|
prompt: () => Promise<string>;
|
|
26
25
|
}) => Promise<ResolvedLicense>;
|
|
27
26
|
//# sourceMappingURL=license.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/license.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/license.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;CAClC;AAiDD,eAAO,MAAM,WAAW,GAAU,kBAG/B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB,KAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAuBnC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,KAAG,IAQjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAYvD,CAAC;AAuBF,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,OAAO,CAAC,IAAI,CAOd,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,iDAMlC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B,KAAG,OAAO,CAAC,eAAe,CAwB1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/package-manager.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,sFAAsF;AACtF,MAAM,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/package-manager.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,sFAAsF;AACtF,MAAM,MAAM,sBAAsB,GAChC;IAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,GACnC,qBAAqB,OAAO,KAC3B,sBAAsB,GAAG,SAY3B,CAAC;AAmBF,eAAO,MAAM,oBAAoB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAqBzF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,gBAAgB,sBAAsB,KAAG,OACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-access.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/registry-access.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAkB,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAoBhF,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"registry-access.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/enterprise/install/registry-access.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAkB,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAoBhF,KAAK,gBAAgB,GACnB,oBAAoB,GAAG,2BAA2B,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAElG,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC,GAAG,CACA;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE;AAC9B,4DAA4D;GAC1D;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CACnD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,KAAG,kBAItD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,MAAM,EAAE,UAAU,kBAAkB,KAAG,MACC,CAAC;AAUxF,eAAO,MAAM,wBAAwB,GAAI,OAAO,MAAM,EAAE,UAAU,kBAAkB,KAAG,MACZ,CAAC;AAE5E,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,KAAG,MACa,CAAC;AAEzF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,MAA2C,CAAC;AAsChG,eAAO,MAAM,YAAY,GACvB,UAAU,MAAM,EAChB,SAAS,MAAM,EACf,UAAU,kBAAkB,EAC5B,cAAc,MAAM,KACnB,OAAO,CAAC,qBAAqB,CAoC/B,CAAC;AAoEF,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,SAAS,MAAM,EACf,UAAU,kBAAkB,EAC5B,cAAc,MAAM,KACnB,OAAO,CAAC,qBAAqB,CAwC/B,CAAC;AA6DF,eAAO,MAAM,4BAA4B,GACvC,QAAQ,MAAM,EACd,gBAAgB,sBAAsB,KACrC,OAAO,CAAC,MAAM,EAAE,CAclB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,iEAM7C;IACD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,sBAAsB,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,KAAG,OAAO,CAAC,MAAM,EAAE,CAwBnB,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,4FAA4F;IAC5F,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,qBAAqB,GAAU,2EAQzC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,sBAAsB,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,KAAG,OAAO,CAAC,cAAc,CAoDzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AAGvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,YAAa,SAAQ,WAAW;IACxC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mGAAmG;IACnG,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,sBAAuB,SAAQ,UAAU;IACjD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,gHAAgH;IAChH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAkCD,QAAA,MAAM,kBAAkB,GAAU,kDAO/B,sBAAsB,KAAG,OAAO,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"create-build-context.d.ts","sourceRoot":"","sources":["../../src/node/create-build-context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,UAAU,EAA+C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,OAAO,EAAmB,MAAM,6BAA6B,CAAC;AAGvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,YAAa,SAAQ,WAAW;IACxC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtD;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mGAAmG;IACnG,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,UAAU,sBAAuB,SAAQ,UAAU;IACjD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,gHAAgH;IAChH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAkCD,QAAA,MAAM,kBAAkB,GAAU,kDAO/B,sBAAsB,KAAG,OAAO,CAAC,YAAY,CAsJ/C,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
|
package/dist/package.json.js
CHANGED
package/dist/package.json.mjs
CHANGED
|
@@ -155,7 +155,6 @@ const runInstall = async ({ appDir, packageArguments, logger, dependencies })=>{
|
|
|
155
155
|
isInteractive: dependencies.isInteractive,
|
|
156
156
|
logger,
|
|
157
157
|
env: dependencies.env,
|
|
158
|
-
now: dependencies.now,
|
|
159
158
|
prompt: dependencies.promptForLicense
|
|
160
159
|
});
|
|
161
160
|
const registryAccess$1 = await registryAccess.prepareRegistryAccess({
|
|
@@ -234,7 +233,6 @@ const action = async (packageArguments, { logger })=>{
|
|
|
234
233
|
isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),
|
|
235
234
|
env: process.env,
|
|
236
235
|
homeDir: os__default.default.homedir(),
|
|
237
|
-
now: new Date(),
|
|
238
236
|
fetchImplementation: fetch,
|
|
239
237
|
promptForLicense: license.promptForLicense,
|
|
240
238
|
promptForPlugins: selection.promptForPlugins,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sources":["../../../../../../src/cli/commands/enterprise/install/action.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { loadEnv } from '../../../../node/core/env';\nimport type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_SCOPE, STRAPI_PACKAGE_NAME } from './constants';\nimport { discoverEnterprisePlugins } from './discovery';\nimport { EnterpriseInstallError, PackageManagerError, PromptCancelledError } from './errors';\nimport { buildInstallCommand, installPackages } from './install-packages';\nimport { promptForLicense, resolveLicense } from './license';\nimport { detectPackageManager } from './package-manager';\nimport { resolvePluginStatus } from './plugin-status';\nimport { prepareRegistryAccess } from './registry-access';\nimport { fetchPackument } from './registry';\nimport { buildPluginRow, isSelectable, orderVisibleRows, promptForPlugins } from './selection';\nimport { printSetupLinks } from './setup-links';\nimport {\n canCheckStrapiCompatibility,\n findUnsupportedStrapiRange,\n isPrerelease,\n readAppDependencyVersion,\n readInstalledVersion,\n resolveRequestedVersion,\n} from './versions';\n\ninterface InstallDependencies {\n isInteractive: boolean;\n env: NodeJS.ProcessEnv;\n homeDir: string;\n now: Date;\n fetchImplementation: typeof fetch;\n promptForLicense: typeof promptForLicense;\n promptForPlugins: typeof promptForPlugins;\n installPackages: typeof installPackages;\n}\n\nconst describeNoStableRelease = (packageName: string) =>\n `${packageName} has no stable release yet. To install a prerelease, name its version: ${packageName}@<version>.`;\n\nconst describeStrapiMismatch = (\n packageName: string,\n requiredStrapiRange: string,\n strapiVersion: string | undefined\n) =>\n `${packageName} requires Strapi ${requiredStrapiRange} and this app uses ${strapiVersion}. Upgrade Strapi first.`;\n\ninterface InstallContext {\n appDir: string;\n license: string;\n strapiVersion?: string;\n logger: Logger;\n dependencies: InstallDependencies;\n}\n\nconst ENTERPRISE_PACKAGE_NAME = new RegExp(`^${ENTERPRISE_SCOPE}/[a-z0-9-][a-z0-9._-]*$`);\nconst MAX_PACKAGE_NAME_LENGTH = 214;\n\nconst isValidPackageName = (packageName: string) =>\n packageName.length <= MAX_PACKAGE_NAME_LENGTH && ENTERPRISE_PACKAGE_NAME.test(packageName);\n\ninterface RequestedPackage {\n packageName: string;\n /** A version or a tag, when the argument names one. */\n requestedVersion?: string;\n}\n\nexport const parsePackageArgument = (packageArgument: string): RequestedPackage => {\n const scopedArgument = packageArgument.startsWith('@')\n ? packageArgument\n : `${ENTERPRISE_SCOPE}/${packageArgument}`;\n const versionSeparatorIndex = scopedArgument.indexOf('@', 1);\n const packageName =\n versionSeparatorIndex === -1 ? scopedArgument : scopedArgument.slice(0, versionSeparatorIndex);\n const requestedVersion =\n versionSeparatorIndex === -1 ? undefined : scopedArgument.slice(versionSeparatorIndex + 1);\n\n if (!packageName.startsWith(`${ENTERPRISE_SCOPE}/`)) {\n throw new EnterpriseInstallError(\n `${packageArgument} is not an Enterprise package. Enterprise packages start with ${ENTERPRISE_SCOPE}/.`\n );\n }\n\n if (!isValidPackageName(packageName)) {\n throw new EnterpriseInstallError(`${packageArgument} is not a valid package name.`);\n }\n\n return { packageName, requestedVersion: requestedVersion || undefined };\n};\n\nconst resolveNamedPackages = async (\n requestedPackages: RequestedPackage[],\n { appDir, license, strapiVersion, logger, dependencies }: InstallContext\n): Promise<string[]> => {\n const installSpecs: string[] = [];\n\n for (const { packageName, requestedVersion } of requestedPackages) {\n const lookup = await fetchPackument({\n packageName,\n license,\n fetchImplementation: dependencies.fetchImplementation,\n });\n const installedVersion = await readAppDependencyVersion(appDir, packageName);\n\n if (requestedVersion && lookup.status === 'available') {\n const resolvedVersion = resolveRequestedVersion(\n lookup.packument,\n requestedVersion,\n strapiVersion\n );\n\n if (!resolvedVersion) {\n throw new EnterpriseInstallError(\n `${packageName} has no version or tag ${requestedVersion}.`\n );\n }\n\n if (resolvedVersion === installedVersion) {\n logger.info(`${packageName} ${resolvedVersion} is already installed.`);\n continue;\n }\n\n const unsupportedStrapiRange = findUnsupportedStrapiRange(\n lookup.packument,\n resolvedVersion,\n strapiVersion\n );\n\n if (unsupportedStrapiRange) {\n logger.warn(\n `${packageName} ${resolvedVersion} requires Strapi ${unsupportedStrapiRange} and this app uses ${strapiVersion}. Strapi may not start until you upgrade it.`\n );\n }\n\n installSpecs.push(`${packageName}@${resolvedVersion}`);\n continue;\n }\n\n const status = resolvePluginStatus({ lookup, installedVersion, strapiVersion });\n\n switch (status.state) {\n case 'not-licensed':\n throw new EnterpriseInstallError(\n `Your license does not include ${packageName}, or it does not exist. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'not-found':\n throw new EnterpriseInstallError(\n `No Enterprise package named ${packageName}. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'no-stable-release':\n throw new EnterpriseInstallError(describeNoStableRelease(packageName));\n case 'no-compatible-version':\n throw new EnterpriseInstallError(\n describeStrapiMismatch(packageName, status.requiredStrapiRange, strapiVersion)\n );\n default:\n break;\n }\n\n if (status.newerVersionNote) {\n logger.info(`${packageName}: ${status.newerVersionNote}`);\n }\n\n if (status.state === 'installed') {\n logger.info(`${packageName} ${installedVersion} is already installed and up to date.`);\n continue;\n }\n\n if (installedVersion && isPrerelease(installedVersion)) {\n logger.info(\n `${packageName}: replacing the installed prerelease ${installedVersion} with the stable release ${status.targetVersion}.`\n );\n }\n\n if (status.state === 'upgrade' && status.isMajorUpgrade) {\n logger.warn(\n `${packageName}: upgrading from ${installedVersion} to ${status.targetVersion}, a major upgrade that may include breaking changes.`\n );\n }\n\n installSpecs.push(`${packageName}@${status.targetVersion}`);\n }\n\n return installSpecs;\n};\n\nconst selectPlugins = async ({\n appDir,\n license,\n strapiVersion,\n logger,\n dependencies,\n}: InstallContext): Promise<string[]> => {\n const discoveredPlugins = await discoverEnterprisePlugins({\n appDir,\n license,\n logger,\n fetchImplementation: dependencies.fetchImplementation,\n });\n\n const rows = discoveredPlugins.map(({ entry, lookup, installedVersion }) =>\n buildPluginRow({ entry, lookup, installedVersion, strapiVersion })\n );\n const isAnyPluginLicensed = discoveredPlugins.some(({ lookup }) => lookup.status === 'available');\n\n rows\n .filter((row) => row.state === 'not-licensed')\n .forEach((row) =>\n logger.warn(`${row.entry.packageName} is installed but is not included in your license.`)\n );\n\n if (!isAnyPluginLicensed && !rows.some((row) => row.state === 'not-licensed')) {\n throw new EnterpriseInstallError('Your license does not include any Enterprise plugins.');\n }\n\n if (!rows.some(isSelectable)) {\n const visibleRows = orderVisibleRows(rows);\n\n // Says why each plugin cannot be installed, rather than calling them all up to date.\n visibleRows.forEach((row) => {\n const { packageName } = row.entry;\n\n if (row.state === 'installed' && row.newerVersionNote) {\n logger.info(`${packageName}: ${row.newerVersionNote}`);\n } else if (row.state === 'no-stable-release') {\n logger.info(describeNoStableRelease(packageName));\n } else if (row.state === 'no-compatible-version') {\n logger.info(describeStrapiMismatch(packageName, row.requiredStrapiRange, strapiVersion));\n }\n });\n\n if (visibleRows.every((row) => row.state === 'installed' || row.state === 'not-licensed')) {\n logger.info('The Enterprise plugins in your license are installed and up to date.');\n }\n\n return [];\n }\n\n return dependencies.promptForPlugins(rows);\n};\n\nconst warnWhenCompatibilityIsUnknown = (strapiVersion: string | undefined, logger: Logger) => {\n if (strapiVersion === undefined) {\n logger.warn(\n `Could not find ${STRAPI_PACKAGE_NAME} in node_modules, so plugin compatibility is not checked. Install the app's dependencies first.`\n );\n } else if (!canCheckStrapiCompatibility(strapiVersion)) {\n logger.warn(\n `This app uses Strapi ${strapiVersion}, a prerelease, so plugin compatibility is not checked.`\n );\n }\n};\n\nexport const runInstall = async ({\n appDir,\n packageArguments,\n logger,\n dependencies,\n}: {\n appDir: string;\n packageArguments: string[];\n logger: Logger;\n dependencies: InstallDependencies;\n}): Promise<void> => {\n // The checks that need no license come first, so a mistake there writes nothing, not even the\n // license.txt a pasted license is saved to.\n const requestedPackages = packageArguments.map(parsePackageArgument);\n\n if (requestedPackages.length === 0 && !dependencies.isInteractive) {\n throw new EnterpriseInstallError(\n 'Pass package names, or run the command in an interactive terminal.'\n );\n }\n\n const packageManager = await detectPackageManager(appDir);\n\n const { license, source: licenseSource } = await resolveLicense({\n appDir,\n isInteractive: dependencies.isInteractive,\n logger,\n env: dependencies.env,\n now: dependencies.now,\n prompt: dependencies.promptForLicense,\n });\n\n const registryAccess = await prepareRegistryAccess({\n appDir,\n packageManager,\n license,\n licenseSource,\n logger,\n env: dependencies.env,\n homeDir: dependencies.homeDir,\n });\n\n const strapiVersion = await readInstalledVersion(appDir, STRAPI_PACKAGE_NAME);\n warnWhenCompatibilityIsUnknown(strapiVersion, logger);\n\n const context: InstallContext = { appDir, license, strapiVersion, logger, dependencies };\n const installSpecs =\n requestedPackages.length > 0\n ? await resolveNamedPackages(requestedPackages, context)\n : await selectPlugins(context);\n\n if (installSpecs.length === 0) {\n logger.info('Nothing to install.');\n return;\n }\n\n await registryAccess.apply();\n\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n logger.info(`Running ${command} ${args.join(' ')}`);\n\n const installedPackages = await Promise.all(\n installSpecs.map(async (installSpec) => {\n const { packageName } = parsePackageArgument(installSpec);\n const previousVersion = await readAppDependencyVersion(appDir, packageName);\n\n return { packageName, replacesInstalledVersion: previousVersion !== undefined };\n })\n );\n\n await dependencies.installPackages({ appDir, packageManager, installSpecs });\n\n await printSetupLinks({ appDir, installedPackages, logger });\n};\n\n/**\n * The exit code for an error, after reporting it in one line. The package manager prints its own\n * output when an install fails, so only its exit code is kept then.\n */\nexport const reportInstallError = (error: unknown, logger: Logger): number => {\n if (error instanceof PackageManagerError) {\n return error.exitCode;\n }\n\n if (error instanceof PromptCancelledError) {\n return 130;\n }\n\n if (error instanceof EnterpriseInstallError) {\n logger.error(error.message);\n return 1;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`strapi enterprise install failed: ${message}`);\n return 1;\n};\n\nexport const action = async (\n packageArguments: string[],\n { logger }: { logger: Logger }\n): Promise<void> => {\n const appDir = process.cwd();\n\n try {\n // Makes STRAPI_LICENSE from the app's `.env` available, as `strapi build` does.\n await loadEnv(appDir);\n\n await runInstall({\n appDir,\n packageArguments,\n logger,\n dependencies: {\n isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n env: process.env,\n homeDir: os.homedir(),\n now: new Date(),\n fetchImplementation: fetch,\n promptForLicense,\n promptForPlugins,\n installPackages,\n },\n });\n } catch (error) {\n process.exit(reportInstallError(error, logger));\n }\n};\n"],"names":["describeNoStableRelease","packageName","describeStrapiMismatch","requiredStrapiRange","strapiVersion","ENTERPRISE_PACKAGE_NAME","RegExp","ENTERPRISE_SCOPE","MAX_PACKAGE_NAME_LENGTH","isValidPackageName","length","test","parsePackageArgument","packageArgument","scopedArgument","startsWith","versionSeparatorIndex","indexOf","slice","requestedVersion","undefined","EnterpriseInstallError","resolveNamedPackages","requestedPackages","appDir","license","logger","dependencies","installSpecs","lookup","fetchPackument","fetchImplementation","installedVersion","readAppDependencyVersion","status","resolvedVersion","resolveRequestedVersion","packument","info","unsupportedStrapiRange","findUnsupportedStrapiRange","warn","push","resolvePluginStatus","state","newerVersionNote","isPrerelease","targetVersion","isMajorUpgrade","selectPlugins","discoveredPlugins","discoverEnterprisePlugins","rows","map","entry","buildPluginRow","isAnyPluginLicensed","some","filter","row","forEach","isSelectable","visibleRows","orderVisibleRows","every","promptForPlugins","warnWhenCompatibilityIsUnknown","STRAPI_PACKAGE_NAME","canCheckStrapiCompatibility","runInstall","packageArguments","isInteractive","packageManager","detectPackageManager","source","licenseSource","resolveLicense","env","now","prompt","promptForLicense","registryAccess","prepareRegistryAccess","homeDir","readInstalledVersion","context","apply","command","args","buildInstallCommand","join","installedPackages","Promise","all","installSpec","previousVersion","replacesInstalledVersion","installPackages","printSetupLinks","reportInstallError","error","PackageManagerError","exitCode","PromptCancelledError","message","Error","String","action","process","cwd","loadEnv","Boolean","stdin","isTTY","stdout","os","homedir","Date","fetch","exit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.js","sources":["../../../../../../src/cli/commands/enterprise/install/action.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { loadEnv } from '../../../../node/core/env';\nimport type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_SCOPE, STRAPI_PACKAGE_NAME } from './constants';\nimport { discoverEnterprisePlugins } from './discovery';\nimport { EnterpriseInstallError, PackageManagerError, PromptCancelledError } from './errors';\nimport { buildInstallCommand, installPackages } from './install-packages';\nimport { promptForLicense, resolveLicense } from './license';\nimport { detectPackageManager } from './package-manager';\nimport { resolvePluginStatus } from './plugin-status';\nimport { prepareRegistryAccess } from './registry-access';\nimport { fetchPackument } from './registry';\nimport { buildPluginRow, isSelectable, orderVisibleRows, promptForPlugins } from './selection';\nimport { printSetupLinks } from './setup-links';\nimport {\n canCheckStrapiCompatibility,\n findUnsupportedStrapiRange,\n isPrerelease,\n readAppDependencyVersion,\n readInstalledVersion,\n resolveRequestedVersion,\n} from './versions';\n\ninterface InstallDependencies {\n isInteractive: boolean;\n env: NodeJS.ProcessEnv;\n homeDir: string;\n fetchImplementation: typeof fetch;\n promptForLicense: typeof promptForLicense;\n promptForPlugins: typeof promptForPlugins;\n installPackages: typeof installPackages;\n}\n\nconst describeNoStableRelease = (packageName: string) =>\n `${packageName} has no stable release yet. To install a prerelease, name its version: ${packageName}@<version>.`;\n\nconst describeStrapiMismatch = (\n packageName: string,\n requiredStrapiRange: string,\n strapiVersion: string | undefined\n) =>\n `${packageName} requires Strapi ${requiredStrapiRange} and this app uses ${strapiVersion}. Upgrade Strapi first.`;\n\ninterface InstallContext {\n appDir: string;\n license: string;\n strapiVersion?: string;\n logger: Logger;\n dependencies: InstallDependencies;\n}\n\nconst ENTERPRISE_PACKAGE_NAME = new RegExp(`^${ENTERPRISE_SCOPE}/[a-z0-9-][a-z0-9._-]*$`);\nconst MAX_PACKAGE_NAME_LENGTH = 214;\n\nconst isValidPackageName = (packageName: string) =>\n packageName.length <= MAX_PACKAGE_NAME_LENGTH && ENTERPRISE_PACKAGE_NAME.test(packageName);\n\ninterface RequestedPackage {\n packageName: string;\n /** A version or a tag, when the argument names one. */\n requestedVersion?: string;\n}\n\nexport const parsePackageArgument = (packageArgument: string): RequestedPackage => {\n const scopedArgument = packageArgument.startsWith('@')\n ? packageArgument\n : `${ENTERPRISE_SCOPE}/${packageArgument}`;\n const versionSeparatorIndex = scopedArgument.indexOf('@', 1);\n const packageName =\n versionSeparatorIndex === -1 ? scopedArgument : scopedArgument.slice(0, versionSeparatorIndex);\n const requestedVersion =\n versionSeparatorIndex === -1 ? undefined : scopedArgument.slice(versionSeparatorIndex + 1);\n\n if (!packageName.startsWith(`${ENTERPRISE_SCOPE}/`)) {\n throw new EnterpriseInstallError(\n `${packageArgument} is not an Enterprise package. Enterprise packages start with ${ENTERPRISE_SCOPE}/.`\n );\n }\n\n if (!isValidPackageName(packageName)) {\n throw new EnterpriseInstallError(`${packageArgument} is not a valid package name.`);\n }\n\n return { packageName, requestedVersion: requestedVersion || undefined };\n};\n\nconst resolveNamedPackages = async (\n requestedPackages: RequestedPackage[],\n { appDir, license, strapiVersion, logger, dependencies }: InstallContext\n): Promise<string[]> => {\n const installSpecs: string[] = [];\n\n for (const { packageName, requestedVersion } of requestedPackages) {\n const lookup = await fetchPackument({\n packageName,\n license,\n fetchImplementation: dependencies.fetchImplementation,\n });\n const installedVersion = await readAppDependencyVersion(appDir, packageName);\n\n if (requestedVersion && lookup.status === 'available') {\n const resolvedVersion = resolveRequestedVersion(\n lookup.packument,\n requestedVersion,\n strapiVersion\n );\n\n if (!resolvedVersion) {\n throw new EnterpriseInstallError(\n `${packageName} has no version or tag ${requestedVersion}.`\n );\n }\n\n if (resolvedVersion === installedVersion) {\n logger.info(`${packageName} ${resolvedVersion} is already installed.`);\n continue;\n }\n\n const unsupportedStrapiRange = findUnsupportedStrapiRange(\n lookup.packument,\n resolvedVersion,\n strapiVersion\n );\n\n if (unsupportedStrapiRange) {\n logger.warn(\n `${packageName} ${resolvedVersion} requires Strapi ${unsupportedStrapiRange} and this app uses ${strapiVersion}. Strapi may not start until you upgrade it.`\n );\n }\n\n installSpecs.push(`${packageName}@${resolvedVersion}`);\n continue;\n }\n\n const status = resolvePluginStatus({ lookup, installedVersion, strapiVersion });\n\n switch (status.state) {\n case 'not-licensed':\n throw new EnterpriseInstallError(\n `Your license does not include ${packageName}, or it does not exist. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'not-found':\n throw new EnterpriseInstallError(\n `No Enterprise package named ${packageName}. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'no-stable-release':\n throw new EnterpriseInstallError(describeNoStableRelease(packageName));\n case 'no-compatible-version':\n throw new EnterpriseInstallError(\n describeStrapiMismatch(packageName, status.requiredStrapiRange, strapiVersion)\n );\n default:\n break;\n }\n\n if (status.newerVersionNote) {\n logger.info(`${packageName}: ${status.newerVersionNote}`);\n }\n\n if (status.state === 'installed') {\n logger.info(`${packageName} ${installedVersion} is already installed and up to date.`);\n continue;\n }\n\n if (installedVersion && isPrerelease(installedVersion)) {\n logger.info(\n `${packageName}: replacing the installed prerelease ${installedVersion} with the stable release ${status.targetVersion}.`\n );\n }\n\n if (status.state === 'upgrade' && status.isMajorUpgrade) {\n logger.warn(\n `${packageName}: upgrading from ${installedVersion} to ${status.targetVersion}, a major upgrade that may include breaking changes.`\n );\n }\n\n installSpecs.push(`${packageName}@${status.targetVersion}`);\n }\n\n return installSpecs;\n};\n\nconst selectPlugins = async ({\n appDir,\n license,\n strapiVersion,\n logger,\n dependencies,\n}: InstallContext): Promise<string[]> => {\n const discoveredPlugins = await discoverEnterprisePlugins({\n appDir,\n license,\n logger,\n fetchImplementation: dependencies.fetchImplementation,\n });\n\n const rows = discoveredPlugins.map(({ entry, lookup, installedVersion }) =>\n buildPluginRow({ entry, lookup, installedVersion, strapiVersion })\n );\n const isAnyPluginLicensed = discoveredPlugins.some(({ lookup }) => lookup.status === 'available');\n\n rows\n .filter((row) => row.state === 'not-licensed')\n .forEach((row) =>\n logger.warn(`${row.entry.packageName} is installed but is not included in your license.`)\n );\n\n if (!isAnyPluginLicensed && !rows.some((row) => row.state === 'not-licensed')) {\n throw new EnterpriseInstallError('Your license does not include any Enterprise plugins.');\n }\n\n if (!rows.some(isSelectable)) {\n const visibleRows = orderVisibleRows(rows);\n\n // Says why each plugin cannot be installed, rather than calling them all up to date.\n visibleRows.forEach((row) => {\n const { packageName } = row.entry;\n\n if (row.state === 'installed' && row.newerVersionNote) {\n logger.info(`${packageName}: ${row.newerVersionNote}`);\n } else if (row.state === 'no-stable-release') {\n logger.info(describeNoStableRelease(packageName));\n } else if (row.state === 'no-compatible-version') {\n logger.info(describeStrapiMismatch(packageName, row.requiredStrapiRange, strapiVersion));\n }\n });\n\n if (visibleRows.every((row) => row.state === 'installed' || row.state === 'not-licensed')) {\n logger.info('The Enterprise plugins in your license are installed and up to date.');\n }\n\n return [];\n }\n\n return dependencies.promptForPlugins(rows);\n};\n\nconst warnWhenCompatibilityIsUnknown = (strapiVersion: string | undefined, logger: Logger) => {\n if (strapiVersion === undefined) {\n logger.warn(\n `Could not find ${STRAPI_PACKAGE_NAME} in node_modules, so plugin compatibility is not checked. Install the app's dependencies first.`\n );\n } else if (!canCheckStrapiCompatibility(strapiVersion)) {\n logger.warn(\n `This app uses Strapi ${strapiVersion}, a prerelease, so plugin compatibility is not checked.`\n );\n }\n};\n\nexport const runInstall = async ({\n appDir,\n packageArguments,\n logger,\n dependencies,\n}: {\n appDir: string;\n packageArguments: string[];\n logger: Logger;\n dependencies: InstallDependencies;\n}): Promise<void> => {\n // The checks that need no license come first, so a mistake there writes nothing, not even the\n // license.txt a pasted license is saved to.\n const requestedPackages = packageArguments.map(parsePackageArgument);\n\n if (requestedPackages.length === 0 && !dependencies.isInteractive) {\n throw new EnterpriseInstallError(\n 'Pass package names, or run the command in an interactive terminal.'\n );\n }\n\n const packageManager = await detectPackageManager(appDir);\n\n const { license, source: licenseSource } = await resolveLicense({\n appDir,\n isInteractive: dependencies.isInteractive,\n logger,\n env: dependencies.env,\n prompt: dependencies.promptForLicense,\n });\n\n const registryAccess = await prepareRegistryAccess({\n appDir,\n packageManager,\n license,\n licenseSource,\n logger,\n env: dependencies.env,\n homeDir: dependencies.homeDir,\n });\n\n const strapiVersion = await readInstalledVersion(appDir, STRAPI_PACKAGE_NAME);\n warnWhenCompatibilityIsUnknown(strapiVersion, logger);\n\n const context: InstallContext = { appDir, license, strapiVersion, logger, dependencies };\n const installSpecs =\n requestedPackages.length > 0\n ? await resolveNamedPackages(requestedPackages, context)\n : await selectPlugins(context);\n\n if (installSpecs.length === 0) {\n logger.info('Nothing to install.');\n return;\n }\n\n await registryAccess.apply();\n\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n logger.info(`Running ${command} ${args.join(' ')}`);\n\n const installedPackages = await Promise.all(\n installSpecs.map(async (installSpec) => {\n const { packageName } = parsePackageArgument(installSpec);\n const previousVersion = await readAppDependencyVersion(appDir, packageName);\n\n return { packageName, replacesInstalledVersion: previousVersion !== undefined };\n })\n );\n\n await dependencies.installPackages({ appDir, packageManager, installSpecs });\n\n await printSetupLinks({ appDir, installedPackages, logger });\n};\n\n/**\n * The exit code for an error, after reporting it in one line. The package manager prints its own\n * output when an install fails, so only its exit code is kept then.\n */\nexport const reportInstallError = (error: unknown, logger: Logger): number => {\n if (error instanceof PackageManagerError) {\n return error.exitCode;\n }\n\n if (error instanceof PromptCancelledError) {\n return 130;\n }\n\n if (error instanceof EnterpriseInstallError) {\n logger.error(error.message);\n return 1;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`strapi enterprise install failed: ${message}`);\n return 1;\n};\n\nexport const action = async (\n packageArguments: string[],\n { logger }: { logger: Logger }\n): Promise<void> => {\n const appDir = process.cwd();\n\n try {\n // Makes STRAPI_LICENSE from the app's `.env` available, as `strapi build` does.\n await loadEnv(appDir);\n\n await runInstall({\n appDir,\n packageArguments,\n logger,\n dependencies: {\n isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n env: process.env,\n homeDir: os.homedir(),\n fetchImplementation: fetch,\n promptForLicense,\n promptForPlugins,\n installPackages,\n },\n });\n } catch (error) {\n process.exit(reportInstallError(error, logger));\n }\n};\n"],"names":["describeNoStableRelease","packageName","describeStrapiMismatch","requiredStrapiRange","strapiVersion","ENTERPRISE_PACKAGE_NAME","RegExp","ENTERPRISE_SCOPE","MAX_PACKAGE_NAME_LENGTH","isValidPackageName","length","test","parsePackageArgument","packageArgument","scopedArgument","startsWith","versionSeparatorIndex","indexOf","slice","requestedVersion","undefined","EnterpriseInstallError","resolveNamedPackages","requestedPackages","appDir","license","logger","dependencies","installSpecs","lookup","fetchPackument","fetchImplementation","installedVersion","readAppDependencyVersion","status","resolvedVersion","resolveRequestedVersion","packument","info","unsupportedStrapiRange","findUnsupportedStrapiRange","warn","push","resolvePluginStatus","state","newerVersionNote","isPrerelease","targetVersion","isMajorUpgrade","selectPlugins","discoveredPlugins","discoverEnterprisePlugins","rows","map","entry","buildPluginRow","isAnyPluginLicensed","some","filter","row","forEach","isSelectable","visibleRows","orderVisibleRows","every","promptForPlugins","warnWhenCompatibilityIsUnknown","STRAPI_PACKAGE_NAME","canCheckStrapiCompatibility","runInstall","packageArguments","isInteractive","packageManager","detectPackageManager","source","licenseSource","resolveLicense","env","prompt","promptForLicense","registryAccess","prepareRegistryAccess","homeDir","readInstalledVersion","context","apply","command","args","buildInstallCommand","join","installedPackages","Promise","all","installSpec","previousVersion","replacesInstalledVersion","installPackages","printSetupLinks","reportInstallError","error","PackageManagerError","exitCode","PromptCancelledError","message","Error","String","action","process","cwd","loadEnv","Boolean","stdin","isTTY","stdout","os","homedir","fetch","exit"],"mappings":"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"}
|
|
@@ -149,7 +149,6 @@ const runInstall = async ({ appDir, packageArguments, logger, dependencies })=>{
|
|
|
149
149
|
isInteractive: dependencies.isInteractive,
|
|
150
150
|
logger,
|
|
151
151
|
env: dependencies.env,
|
|
152
|
-
now: dependencies.now,
|
|
153
152
|
prompt: dependencies.promptForLicense
|
|
154
153
|
});
|
|
155
154
|
const registryAccess = await prepareRegistryAccess({
|
|
@@ -228,7 +227,6 @@ const action = async (packageArguments, { logger })=>{
|
|
|
228
227
|
isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),
|
|
229
228
|
env: process.env,
|
|
230
229
|
homeDir: os.homedir(),
|
|
231
|
-
now: new Date(),
|
|
232
230
|
fetchImplementation: fetch,
|
|
233
231
|
promptForLicense,
|
|
234
232
|
promptForPlugins,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/action.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { loadEnv } from '../../../../node/core/env';\nimport type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_SCOPE, STRAPI_PACKAGE_NAME } from './constants';\nimport { discoverEnterprisePlugins } from './discovery';\nimport { EnterpriseInstallError, PackageManagerError, PromptCancelledError } from './errors';\nimport { buildInstallCommand, installPackages } from './install-packages';\nimport { promptForLicense, resolveLicense } from './license';\nimport { detectPackageManager } from './package-manager';\nimport { resolvePluginStatus } from './plugin-status';\nimport { prepareRegistryAccess } from './registry-access';\nimport { fetchPackument } from './registry';\nimport { buildPluginRow, isSelectable, orderVisibleRows, promptForPlugins } from './selection';\nimport { printSetupLinks } from './setup-links';\nimport {\n canCheckStrapiCompatibility,\n findUnsupportedStrapiRange,\n isPrerelease,\n readAppDependencyVersion,\n readInstalledVersion,\n resolveRequestedVersion,\n} from './versions';\n\ninterface InstallDependencies {\n isInteractive: boolean;\n env: NodeJS.ProcessEnv;\n homeDir: string;\n now: Date;\n fetchImplementation: typeof fetch;\n promptForLicense: typeof promptForLicense;\n promptForPlugins: typeof promptForPlugins;\n installPackages: typeof installPackages;\n}\n\nconst describeNoStableRelease = (packageName: string) =>\n `${packageName} has no stable release yet. To install a prerelease, name its version: ${packageName}@<version>.`;\n\nconst describeStrapiMismatch = (\n packageName: string,\n requiredStrapiRange: string,\n strapiVersion: string | undefined\n) =>\n `${packageName} requires Strapi ${requiredStrapiRange} and this app uses ${strapiVersion}. Upgrade Strapi first.`;\n\ninterface InstallContext {\n appDir: string;\n license: string;\n strapiVersion?: string;\n logger: Logger;\n dependencies: InstallDependencies;\n}\n\nconst ENTERPRISE_PACKAGE_NAME = new RegExp(`^${ENTERPRISE_SCOPE}/[a-z0-9-][a-z0-9._-]*$`);\nconst MAX_PACKAGE_NAME_LENGTH = 214;\n\nconst isValidPackageName = (packageName: string) =>\n packageName.length <= MAX_PACKAGE_NAME_LENGTH && ENTERPRISE_PACKAGE_NAME.test(packageName);\n\ninterface RequestedPackage {\n packageName: string;\n /** A version or a tag, when the argument names one. */\n requestedVersion?: string;\n}\n\nexport const parsePackageArgument = (packageArgument: string): RequestedPackage => {\n const scopedArgument = packageArgument.startsWith('@')\n ? packageArgument\n : `${ENTERPRISE_SCOPE}/${packageArgument}`;\n const versionSeparatorIndex = scopedArgument.indexOf('@', 1);\n const packageName =\n versionSeparatorIndex === -1 ? scopedArgument : scopedArgument.slice(0, versionSeparatorIndex);\n const requestedVersion =\n versionSeparatorIndex === -1 ? undefined : scopedArgument.slice(versionSeparatorIndex + 1);\n\n if (!packageName.startsWith(`${ENTERPRISE_SCOPE}/`)) {\n throw new EnterpriseInstallError(\n `${packageArgument} is not an Enterprise package. Enterprise packages start with ${ENTERPRISE_SCOPE}/.`\n );\n }\n\n if (!isValidPackageName(packageName)) {\n throw new EnterpriseInstallError(`${packageArgument} is not a valid package name.`);\n }\n\n return { packageName, requestedVersion: requestedVersion || undefined };\n};\n\nconst resolveNamedPackages = async (\n requestedPackages: RequestedPackage[],\n { appDir, license, strapiVersion, logger, dependencies }: InstallContext\n): Promise<string[]> => {\n const installSpecs: string[] = [];\n\n for (const { packageName, requestedVersion } of requestedPackages) {\n const lookup = await fetchPackument({\n packageName,\n license,\n fetchImplementation: dependencies.fetchImplementation,\n });\n const installedVersion = await readAppDependencyVersion(appDir, packageName);\n\n if (requestedVersion && lookup.status === 'available') {\n const resolvedVersion = resolveRequestedVersion(\n lookup.packument,\n requestedVersion,\n strapiVersion\n );\n\n if (!resolvedVersion) {\n throw new EnterpriseInstallError(\n `${packageName} has no version or tag ${requestedVersion}.`\n );\n }\n\n if (resolvedVersion === installedVersion) {\n logger.info(`${packageName} ${resolvedVersion} is already installed.`);\n continue;\n }\n\n const unsupportedStrapiRange = findUnsupportedStrapiRange(\n lookup.packument,\n resolvedVersion,\n strapiVersion\n );\n\n if (unsupportedStrapiRange) {\n logger.warn(\n `${packageName} ${resolvedVersion} requires Strapi ${unsupportedStrapiRange} and this app uses ${strapiVersion}. Strapi may not start until you upgrade it.`\n );\n }\n\n installSpecs.push(`${packageName}@${resolvedVersion}`);\n continue;\n }\n\n const status = resolvePluginStatus({ lookup, installedVersion, strapiVersion });\n\n switch (status.state) {\n case 'not-licensed':\n throw new EnterpriseInstallError(\n `Your license does not include ${packageName}, or it does not exist. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'not-found':\n throw new EnterpriseInstallError(\n `No Enterprise package named ${packageName}. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'no-stable-release':\n throw new EnterpriseInstallError(describeNoStableRelease(packageName));\n case 'no-compatible-version':\n throw new EnterpriseInstallError(\n describeStrapiMismatch(packageName, status.requiredStrapiRange, strapiVersion)\n );\n default:\n break;\n }\n\n if (status.newerVersionNote) {\n logger.info(`${packageName}: ${status.newerVersionNote}`);\n }\n\n if (status.state === 'installed') {\n logger.info(`${packageName} ${installedVersion} is already installed and up to date.`);\n continue;\n }\n\n if (installedVersion && isPrerelease(installedVersion)) {\n logger.info(\n `${packageName}: replacing the installed prerelease ${installedVersion} with the stable release ${status.targetVersion}.`\n );\n }\n\n if (status.state === 'upgrade' && status.isMajorUpgrade) {\n logger.warn(\n `${packageName}: upgrading from ${installedVersion} to ${status.targetVersion}, a major upgrade that may include breaking changes.`\n );\n }\n\n installSpecs.push(`${packageName}@${status.targetVersion}`);\n }\n\n return installSpecs;\n};\n\nconst selectPlugins = async ({\n appDir,\n license,\n strapiVersion,\n logger,\n dependencies,\n}: InstallContext): Promise<string[]> => {\n const discoveredPlugins = await discoverEnterprisePlugins({\n appDir,\n license,\n logger,\n fetchImplementation: dependencies.fetchImplementation,\n });\n\n const rows = discoveredPlugins.map(({ entry, lookup, installedVersion }) =>\n buildPluginRow({ entry, lookup, installedVersion, strapiVersion })\n );\n const isAnyPluginLicensed = discoveredPlugins.some(({ lookup }) => lookup.status === 'available');\n\n rows\n .filter((row) => row.state === 'not-licensed')\n .forEach((row) =>\n logger.warn(`${row.entry.packageName} is installed but is not included in your license.`)\n );\n\n if (!isAnyPluginLicensed && !rows.some((row) => row.state === 'not-licensed')) {\n throw new EnterpriseInstallError('Your license does not include any Enterprise plugins.');\n }\n\n if (!rows.some(isSelectable)) {\n const visibleRows = orderVisibleRows(rows);\n\n // Says why each plugin cannot be installed, rather than calling them all up to date.\n visibleRows.forEach((row) => {\n const { packageName } = row.entry;\n\n if (row.state === 'installed' && row.newerVersionNote) {\n logger.info(`${packageName}: ${row.newerVersionNote}`);\n } else if (row.state === 'no-stable-release') {\n logger.info(describeNoStableRelease(packageName));\n } else if (row.state === 'no-compatible-version') {\n logger.info(describeStrapiMismatch(packageName, row.requiredStrapiRange, strapiVersion));\n }\n });\n\n if (visibleRows.every((row) => row.state === 'installed' || row.state === 'not-licensed')) {\n logger.info('The Enterprise plugins in your license are installed and up to date.');\n }\n\n return [];\n }\n\n return dependencies.promptForPlugins(rows);\n};\n\nconst warnWhenCompatibilityIsUnknown = (strapiVersion: string | undefined, logger: Logger) => {\n if (strapiVersion === undefined) {\n logger.warn(\n `Could not find ${STRAPI_PACKAGE_NAME} in node_modules, so plugin compatibility is not checked. Install the app's dependencies first.`\n );\n } else if (!canCheckStrapiCompatibility(strapiVersion)) {\n logger.warn(\n `This app uses Strapi ${strapiVersion}, a prerelease, so plugin compatibility is not checked.`\n );\n }\n};\n\nexport const runInstall = async ({\n appDir,\n packageArguments,\n logger,\n dependencies,\n}: {\n appDir: string;\n packageArguments: string[];\n logger: Logger;\n dependencies: InstallDependencies;\n}): Promise<void> => {\n // The checks that need no license come first, so a mistake there writes nothing, not even the\n // license.txt a pasted license is saved to.\n const requestedPackages = packageArguments.map(parsePackageArgument);\n\n if (requestedPackages.length === 0 && !dependencies.isInteractive) {\n throw new EnterpriseInstallError(\n 'Pass package names, or run the command in an interactive terminal.'\n );\n }\n\n const packageManager = await detectPackageManager(appDir);\n\n const { license, source: licenseSource } = await resolveLicense({\n appDir,\n isInteractive: dependencies.isInteractive,\n logger,\n env: dependencies.env,\n now: dependencies.now,\n prompt: dependencies.promptForLicense,\n });\n\n const registryAccess = await prepareRegistryAccess({\n appDir,\n packageManager,\n license,\n licenseSource,\n logger,\n env: dependencies.env,\n homeDir: dependencies.homeDir,\n });\n\n const strapiVersion = await readInstalledVersion(appDir, STRAPI_PACKAGE_NAME);\n warnWhenCompatibilityIsUnknown(strapiVersion, logger);\n\n const context: InstallContext = { appDir, license, strapiVersion, logger, dependencies };\n const installSpecs =\n requestedPackages.length > 0\n ? await resolveNamedPackages(requestedPackages, context)\n : await selectPlugins(context);\n\n if (installSpecs.length === 0) {\n logger.info('Nothing to install.');\n return;\n }\n\n await registryAccess.apply();\n\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n logger.info(`Running ${command} ${args.join(' ')}`);\n\n const installedPackages = await Promise.all(\n installSpecs.map(async (installSpec) => {\n const { packageName } = parsePackageArgument(installSpec);\n const previousVersion = await readAppDependencyVersion(appDir, packageName);\n\n return { packageName, replacesInstalledVersion: previousVersion !== undefined };\n })\n );\n\n await dependencies.installPackages({ appDir, packageManager, installSpecs });\n\n await printSetupLinks({ appDir, installedPackages, logger });\n};\n\n/**\n * The exit code for an error, after reporting it in one line. The package manager prints its own\n * output when an install fails, so only its exit code is kept then.\n */\nexport const reportInstallError = (error: unknown, logger: Logger): number => {\n if (error instanceof PackageManagerError) {\n return error.exitCode;\n }\n\n if (error instanceof PromptCancelledError) {\n return 130;\n }\n\n if (error instanceof EnterpriseInstallError) {\n logger.error(error.message);\n return 1;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`strapi enterprise install failed: ${message}`);\n return 1;\n};\n\nexport const action = async (\n packageArguments: string[],\n { logger }: { logger: Logger }\n): Promise<void> => {\n const appDir = process.cwd();\n\n try {\n // Makes STRAPI_LICENSE from the app's `.env` available, as `strapi build` does.\n await loadEnv(appDir);\n\n await runInstall({\n appDir,\n packageArguments,\n logger,\n dependencies: {\n isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n env: process.env,\n homeDir: os.homedir(),\n now: new Date(),\n fetchImplementation: fetch,\n promptForLicense,\n promptForPlugins,\n installPackages,\n },\n });\n } catch (error) {\n process.exit(reportInstallError(error, logger));\n }\n};\n"],"names":["describeNoStableRelease","packageName","describeStrapiMismatch","requiredStrapiRange","strapiVersion","ENTERPRISE_PACKAGE_NAME","RegExp","ENTERPRISE_SCOPE","MAX_PACKAGE_NAME_LENGTH","isValidPackageName","length","test","parsePackageArgument","packageArgument","scopedArgument","startsWith","versionSeparatorIndex","indexOf","slice","requestedVersion","undefined","EnterpriseInstallError","resolveNamedPackages","requestedPackages","appDir","license","logger","dependencies","installSpecs","lookup","fetchPackument","fetchImplementation","installedVersion","readAppDependencyVersion","status","resolvedVersion","resolveRequestedVersion","packument","info","unsupportedStrapiRange","findUnsupportedStrapiRange","warn","push","resolvePluginStatus","state","newerVersionNote","isPrerelease","targetVersion","isMajorUpgrade","selectPlugins","discoveredPlugins","discoverEnterprisePlugins","rows","map","entry","buildPluginRow","isAnyPluginLicensed","some","filter","row","forEach","isSelectable","visibleRows","orderVisibleRows","every","promptForPlugins","warnWhenCompatibilityIsUnknown","STRAPI_PACKAGE_NAME","canCheckStrapiCompatibility","runInstall","packageArguments","isInteractive","packageManager","detectPackageManager","source","licenseSource","resolveLicense","env","now","prompt","promptForLicense","registryAccess","prepareRegistryAccess","homeDir","readInstalledVersion","context","apply","command","args","buildInstallCommand","join","installedPackages","Promise","all","installSpec","previousVersion","replacesInstalledVersion","installPackages","printSetupLinks","reportInstallError","error","PackageManagerError","exitCode","PromptCancelledError","message","Error","String","action","process","cwd","loadEnv","Boolean","stdin","isTTY","stdout","os","homedir","Date","fetch","exit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"action.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/action.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { loadEnv } from '../../../../node/core/env';\nimport type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_SCOPE, STRAPI_PACKAGE_NAME } from './constants';\nimport { discoverEnterprisePlugins } from './discovery';\nimport { EnterpriseInstallError, PackageManagerError, PromptCancelledError } from './errors';\nimport { buildInstallCommand, installPackages } from './install-packages';\nimport { promptForLicense, resolveLicense } from './license';\nimport { detectPackageManager } from './package-manager';\nimport { resolvePluginStatus } from './plugin-status';\nimport { prepareRegistryAccess } from './registry-access';\nimport { fetchPackument } from './registry';\nimport { buildPluginRow, isSelectable, orderVisibleRows, promptForPlugins } from './selection';\nimport { printSetupLinks } from './setup-links';\nimport {\n canCheckStrapiCompatibility,\n findUnsupportedStrapiRange,\n isPrerelease,\n readAppDependencyVersion,\n readInstalledVersion,\n resolveRequestedVersion,\n} from './versions';\n\ninterface InstallDependencies {\n isInteractive: boolean;\n env: NodeJS.ProcessEnv;\n homeDir: string;\n fetchImplementation: typeof fetch;\n promptForLicense: typeof promptForLicense;\n promptForPlugins: typeof promptForPlugins;\n installPackages: typeof installPackages;\n}\n\nconst describeNoStableRelease = (packageName: string) =>\n `${packageName} has no stable release yet. To install a prerelease, name its version: ${packageName}@<version>.`;\n\nconst describeStrapiMismatch = (\n packageName: string,\n requiredStrapiRange: string,\n strapiVersion: string | undefined\n) =>\n `${packageName} requires Strapi ${requiredStrapiRange} and this app uses ${strapiVersion}. Upgrade Strapi first.`;\n\ninterface InstallContext {\n appDir: string;\n license: string;\n strapiVersion?: string;\n logger: Logger;\n dependencies: InstallDependencies;\n}\n\nconst ENTERPRISE_PACKAGE_NAME = new RegExp(`^${ENTERPRISE_SCOPE}/[a-z0-9-][a-z0-9._-]*$`);\nconst MAX_PACKAGE_NAME_LENGTH = 214;\n\nconst isValidPackageName = (packageName: string) =>\n packageName.length <= MAX_PACKAGE_NAME_LENGTH && ENTERPRISE_PACKAGE_NAME.test(packageName);\n\ninterface RequestedPackage {\n packageName: string;\n /** A version or a tag, when the argument names one. */\n requestedVersion?: string;\n}\n\nexport const parsePackageArgument = (packageArgument: string): RequestedPackage => {\n const scopedArgument = packageArgument.startsWith('@')\n ? packageArgument\n : `${ENTERPRISE_SCOPE}/${packageArgument}`;\n const versionSeparatorIndex = scopedArgument.indexOf('@', 1);\n const packageName =\n versionSeparatorIndex === -1 ? scopedArgument : scopedArgument.slice(0, versionSeparatorIndex);\n const requestedVersion =\n versionSeparatorIndex === -1 ? undefined : scopedArgument.slice(versionSeparatorIndex + 1);\n\n if (!packageName.startsWith(`${ENTERPRISE_SCOPE}/`)) {\n throw new EnterpriseInstallError(\n `${packageArgument} is not an Enterprise package. Enterprise packages start with ${ENTERPRISE_SCOPE}/.`\n );\n }\n\n if (!isValidPackageName(packageName)) {\n throw new EnterpriseInstallError(`${packageArgument} is not a valid package name.`);\n }\n\n return { packageName, requestedVersion: requestedVersion || undefined };\n};\n\nconst resolveNamedPackages = async (\n requestedPackages: RequestedPackage[],\n { appDir, license, strapiVersion, logger, dependencies }: InstallContext\n): Promise<string[]> => {\n const installSpecs: string[] = [];\n\n for (const { packageName, requestedVersion } of requestedPackages) {\n const lookup = await fetchPackument({\n packageName,\n license,\n fetchImplementation: dependencies.fetchImplementation,\n });\n const installedVersion = await readAppDependencyVersion(appDir, packageName);\n\n if (requestedVersion && lookup.status === 'available') {\n const resolvedVersion = resolveRequestedVersion(\n lookup.packument,\n requestedVersion,\n strapiVersion\n );\n\n if (!resolvedVersion) {\n throw new EnterpriseInstallError(\n `${packageName} has no version or tag ${requestedVersion}.`\n );\n }\n\n if (resolvedVersion === installedVersion) {\n logger.info(`${packageName} ${resolvedVersion} is already installed.`);\n continue;\n }\n\n const unsupportedStrapiRange = findUnsupportedStrapiRange(\n lookup.packument,\n resolvedVersion,\n strapiVersion\n );\n\n if (unsupportedStrapiRange) {\n logger.warn(\n `${packageName} ${resolvedVersion} requires Strapi ${unsupportedStrapiRange} and this app uses ${strapiVersion}. Strapi may not start until you upgrade it.`\n );\n }\n\n installSpecs.push(`${packageName}@${resolvedVersion}`);\n continue;\n }\n\n const status = resolvePluginStatus({ lookup, installedVersion, strapiVersion });\n\n switch (status.state) {\n case 'not-licensed':\n throw new EnterpriseInstallError(\n `Your license does not include ${packageName}, or it does not exist. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'not-found':\n throw new EnterpriseInstallError(\n `No Enterprise package named ${packageName}. Run strapi enterprise install without a name to see the plugins you can install.`\n );\n case 'no-stable-release':\n throw new EnterpriseInstallError(describeNoStableRelease(packageName));\n case 'no-compatible-version':\n throw new EnterpriseInstallError(\n describeStrapiMismatch(packageName, status.requiredStrapiRange, strapiVersion)\n );\n default:\n break;\n }\n\n if (status.newerVersionNote) {\n logger.info(`${packageName}: ${status.newerVersionNote}`);\n }\n\n if (status.state === 'installed') {\n logger.info(`${packageName} ${installedVersion} is already installed and up to date.`);\n continue;\n }\n\n if (installedVersion && isPrerelease(installedVersion)) {\n logger.info(\n `${packageName}: replacing the installed prerelease ${installedVersion} with the stable release ${status.targetVersion}.`\n );\n }\n\n if (status.state === 'upgrade' && status.isMajorUpgrade) {\n logger.warn(\n `${packageName}: upgrading from ${installedVersion} to ${status.targetVersion}, a major upgrade that may include breaking changes.`\n );\n }\n\n installSpecs.push(`${packageName}@${status.targetVersion}`);\n }\n\n return installSpecs;\n};\n\nconst selectPlugins = async ({\n appDir,\n license,\n strapiVersion,\n logger,\n dependencies,\n}: InstallContext): Promise<string[]> => {\n const discoveredPlugins = await discoverEnterprisePlugins({\n appDir,\n license,\n logger,\n fetchImplementation: dependencies.fetchImplementation,\n });\n\n const rows = discoveredPlugins.map(({ entry, lookup, installedVersion }) =>\n buildPluginRow({ entry, lookup, installedVersion, strapiVersion })\n );\n const isAnyPluginLicensed = discoveredPlugins.some(({ lookup }) => lookup.status === 'available');\n\n rows\n .filter((row) => row.state === 'not-licensed')\n .forEach((row) =>\n logger.warn(`${row.entry.packageName} is installed but is not included in your license.`)\n );\n\n if (!isAnyPluginLicensed && !rows.some((row) => row.state === 'not-licensed')) {\n throw new EnterpriseInstallError('Your license does not include any Enterprise plugins.');\n }\n\n if (!rows.some(isSelectable)) {\n const visibleRows = orderVisibleRows(rows);\n\n // Says why each plugin cannot be installed, rather than calling them all up to date.\n visibleRows.forEach((row) => {\n const { packageName } = row.entry;\n\n if (row.state === 'installed' && row.newerVersionNote) {\n logger.info(`${packageName}: ${row.newerVersionNote}`);\n } else if (row.state === 'no-stable-release') {\n logger.info(describeNoStableRelease(packageName));\n } else if (row.state === 'no-compatible-version') {\n logger.info(describeStrapiMismatch(packageName, row.requiredStrapiRange, strapiVersion));\n }\n });\n\n if (visibleRows.every((row) => row.state === 'installed' || row.state === 'not-licensed')) {\n logger.info('The Enterprise plugins in your license are installed and up to date.');\n }\n\n return [];\n }\n\n return dependencies.promptForPlugins(rows);\n};\n\nconst warnWhenCompatibilityIsUnknown = (strapiVersion: string | undefined, logger: Logger) => {\n if (strapiVersion === undefined) {\n logger.warn(\n `Could not find ${STRAPI_PACKAGE_NAME} in node_modules, so plugin compatibility is not checked. Install the app's dependencies first.`\n );\n } else if (!canCheckStrapiCompatibility(strapiVersion)) {\n logger.warn(\n `This app uses Strapi ${strapiVersion}, a prerelease, so plugin compatibility is not checked.`\n );\n }\n};\n\nexport const runInstall = async ({\n appDir,\n packageArguments,\n logger,\n dependencies,\n}: {\n appDir: string;\n packageArguments: string[];\n logger: Logger;\n dependencies: InstallDependencies;\n}): Promise<void> => {\n // The checks that need no license come first, so a mistake there writes nothing, not even the\n // license.txt a pasted license is saved to.\n const requestedPackages = packageArguments.map(parsePackageArgument);\n\n if (requestedPackages.length === 0 && !dependencies.isInteractive) {\n throw new EnterpriseInstallError(\n 'Pass package names, or run the command in an interactive terminal.'\n );\n }\n\n const packageManager = await detectPackageManager(appDir);\n\n const { license, source: licenseSource } = await resolveLicense({\n appDir,\n isInteractive: dependencies.isInteractive,\n logger,\n env: dependencies.env,\n prompt: dependencies.promptForLicense,\n });\n\n const registryAccess = await prepareRegistryAccess({\n appDir,\n packageManager,\n license,\n licenseSource,\n logger,\n env: dependencies.env,\n homeDir: dependencies.homeDir,\n });\n\n const strapiVersion = await readInstalledVersion(appDir, STRAPI_PACKAGE_NAME);\n warnWhenCompatibilityIsUnknown(strapiVersion, logger);\n\n const context: InstallContext = { appDir, license, strapiVersion, logger, dependencies };\n const installSpecs =\n requestedPackages.length > 0\n ? await resolveNamedPackages(requestedPackages, context)\n : await selectPlugins(context);\n\n if (installSpecs.length === 0) {\n logger.info('Nothing to install.');\n return;\n }\n\n await registryAccess.apply();\n\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n logger.info(`Running ${command} ${args.join(' ')}`);\n\n const installedPackages = await Promise.all(\n installSpecs.map(async (installSpec) => {\n const { packageName } = parsePackageArgument(installSpec);\n const previousVersion = await readAppDependencyVersion(appDir, packageName);\n\n return { packageName, replacesInstalledVersion: previousVersion !== undefined };\n })\n );\n\n await dependencies.installPackages({ appDir, packageManager, installSpecs });\n\n await printSetupLinks({ appDir, installedPackages, logger });\n};\n\n/**\n * The exit code for an error, after reporting it in one line. The package manager prints its own\n * output when an install fails, so only its exit code is kept then.\n */\nexport const reportInstallError = (error: unknown, logger: Logger): number => {\n if (error instanceof PackageManagerError) {\n return error.exitCode;\n }\n\n if (error instanceof PromptCancelledError) {\n return 130;\n }\n\n if (error instanceof EnterpriseInstallError) {\n logger.error(error.message);\n return 1;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`strapi enterprise install failed: ${message}`);\n return 1;\n};\n\nexport const action = async (\n packageArguments: string[],\n { logger }: { logger: Logger }\n): Promise<void> => {\n const appDir = process.cwd();\n\n try {\n // Makes STRAPI_LICENSE from the app's `.env` available, as `strapi build` does.\n await loadEnv(appDir);\n\n await runInstall({\n appDir,\n packageArguments,\n logger,\n dependencies: {\n isInteractive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n env: process.env,\n homeDir: os.homedir(),\n fetchImplementation: fetch,\n promptForLicense,\n promptForPlugins,\n installPackages,\n },\n });\n } catch (error) {\n process.exit(reportInstallError(error, logger));\n }\n};\n"],"names":["describeNoStableRelease","packageName","describeStrapiMismatch","requiredStrapiRange","strapiVersion","ENTERPRISE_PACKAGE_NAME","RegExp","ENTERPRISE_SCOPE","MAX_PACKAGE_NAME_LENGTH","isValidPackageName","length","test","parsePackageArgument","packageArgument","scopedArgument","startsWith","versionSeparatorIndex","indexOf","slice","requestedVersion","undefined","EnterpriseInstallError","resolveNamedPackages","requestedPackages","appDir","license","logger","dependencies","installSpecs","lookup","fetchPackument","fetchImplementation","installedVersion","readAppDependencyVersion","status","resolvedVersion","resolveRequestedVersion","packument","info","unsupportedStrapiRange","findUnsupportedStrapiRange","warn","push","resolvePluginStatus","state","newerVersionNote","isPrerelease","targetVersion","isMajorUpgrade","selectPlugins","discoveredPlugins","discoverEnterprisePlugins","rows","map","entry","buildPluginRow","isAnyPluginLicensed","some","filter","row","forEach","isSelectable","visibleRows","orderVisibleRows","every","promptForPlugins","warnWhenCompatibilityIsUnknown","STRAPI_PACKAGE_NAME","canCheckStrapiCompatibility","runInstall","packageArguments","isInteractive","packageManager","detectPackageManager","source","licenseSource","resolveLicense","env","prompt","promptForLicense","registryAccess","prepareRegistryAccess","homeDir","readInstalledVersion","context","apply","command","args","buildInstallCommand","join","installedPackages","Promise","all","installSpec","previousVersion","replacesInstalledVersion","installPackages","printSetupLinks","reportInstallError","error","PackageManagerError","exitCode","PromptCancelledError","message","Error","String","action","process","cwd","loadEnv","Boolean","stdin","isTTY","stdout","os","homedir","fetch","exit"],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ const readLicenseFile = async (appDir)=>{
|
|
|
29
29
|
throw error;
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
|
-
const
|
|
32
|
+
const assertLicenseFormat = (license)=>{
|
|
33
33
|
const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\n');
|
|
34
34
|
if (!signature || !base64Content) {
|
|
35
35
|
throw new Error('Invalid license.');
|
|
@@ -38,7 +38,6 @@ const readLicenseInfo = (license)=>{
|
|
|
38
38
|
if (typeof licenseInfo !== 'object' || licenseInfo === null) {
|
|
39
39
|
throw new Error('Invalid license.');
|
|
40
40
|
}
|
|
41
|
-
return licenseInfo;
|
|
42
41
|
};
|
|
43
42
|
const readEnvFileLicense = async (appDir, env)=>{
|
|
44
43
|
const envFilePath = env.ENV_PATH ? path__default.default.resolve(appDir, env.ENV_PATH) : path__default.default.join(appDir, '.env');
|
|
@@ -70,17 +69,12 @@ const findLicense = async ({ appDir, env })=>{
|
|
|
70
69
|
}
|
|
71
70
|
return undefined;
|
|
72
71
|
};
|
|
73
|
-
const validateLicense = (license
|
|
74
|
-
let licenseInfo;
|
|
72
|
+
const validateLicense = (license)=>{
|
|
75
73
|
try {
|
|
76
|
-
|
|
74
|
+
assertLicenseFormat(license);
|
|
77
75
|
} catch {
|
|
78
76
|
throw new errors.EnterpriseInstallError(`This Strapi license is not valid. Check that you copied all of it, or find it at ${constants.BILLING_URL}`);
|
|
79
77
|
}
|
|
80
|
-
const expiresAt = licenseInfo.expireAt === undefined ? undefined : new Date(licenseInfo.expireAt);
|
|
81
|
-
if (expiresAt && !Number.isNaN(expiresAt.getTime()) && expiresAt.getTime() < now.getTime()) {
|
|
82
|
-
throw new errors.EnterpriseInstallError(`This Strapi license expired on ${expiresAt.toISOString().slice(0, 10)}. Renew it at ${constants.BILLING_URL}`);
|
|
83
|
-
}
|
|
84
78
|
};
|
|
85
79
|
const promptForLicense = async ()=>{
|
|
86
80
|
const inquirer = await getInquirer.getInquirer();
|
|
@@ -112,13 +106,13 @@ const saveLicenseFile = async (appDir, license, logger)=>{
|
|
|
112
106
|
await fse__default.default.chmod(licenseFilePath, 0o600);
|
|
113
107
|
await ensureLicenseFileIsIgnored(appDir, logger);
|
|
114
108
|
};
|
|
115
|
-
const resolveLicense = async ({ appDir, isInteractive, logger, env,
|
|
109
|
+
const resolveLicense = async ({ appDir, isInteractive, logger, env, prompt })=>{
|
|
116
110
|
const foundLicense = await findLicense({
|
|
117
111
|
appDir,
|
|
118
112
|
env
|
|
119
113
|
});
|
|
120
114
|
if (foundLicense) {
|
|
121
|
-
validateLicense(foundLicense.license
|
|
115
|
+
validateLicense(foundLicense.license);
|
|
122
116
|
logger.info(`Using the Strapi license from ${LICENSE_SOURCE_LABELS[foundLicense.source]}.`);
|
|
123
117
|
return foundLicense;
|
|
124
118
|
}
|
|
@@ -127,7 +121,7 @@ const resolveLicense = async ({ appDir, isInteractive, logger, env, now, prompt
|
|
|
127
121
|
}
|
|
128
122
|
logger.info(`No Strapi license found. You can find yours at ${constants.BILLING_URL}`);
|
|
129
123
|
const pastedLicense = await prompt();
|
|
130
|
-
validateLicense(pastedLicense
|
|
124
|
+
validateLicense(pastedLicense);
|
|
131
125
|
await saveLicenseFile(appDir, pastedLicense, logger);
|
|
132
126
|
logger.success(`Saved the license to ${constants.LICENSE_FILE_NAME}.`);
|
|
133
127
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sources":["../../../../../../src/cli/commands/enterprise/install/license.ts"],"sourcesContent":["import path from 'node:path';\nimport fse from 'fs-extra';\nimport dotenv from 'dotenv';\n\nimport { getInquirer } from '../../../utils/get-inquirer';\nimport type { Logger } from '../../../utils/logger';\nimport { BILLING_URL, LICENSE_FILE_NAME } from './constants';\nimport { EnterpriseInstallError } from './errors';\n\nexport type LicenseSource = 'environment' | 'env-file' | 'license-file';\n\nexport interface FoundLicense {\n license: string;\n source: LicenseSource;\n}\n\nexport interface ResolvedLicense {\n license: string;\n /** `prompt` when the user pasted it, which also saved it to license.txt. */\n source: LicenseSource | 'prompt';\n}\n\nconst LICENSE_SOURCE_LABELS: Record<LicenseSource, string> = {\n environment: 'the STRAPI_LICENSE environment variable',\n 'env-file': 'STRAPI_LICENSE in .env',\n 'license-file': LICENSE_FILE_NAME,\n};\n\nconst cleanLicense = (value: string | undefined): string | undefined => value?.trim() || undefined;\n\nconst readLicenseFile = async (appDir: string): Promise<string | undefined> => {\n try {\n return await fse.readFile(path.join(appDir, LICENSE_FILE_NAME), 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return undefined;\n }\n\n throw error;\n }\n};\n\ninterface LicenseInfo {\n expireAt?: string | number;\n}\n\nconst readLicenseInfo = (license: string): LicenseInfo => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: unknown = JSON.parse(Buffer.from(base64Content, 'base64').toString());\n\n if (typeof licenseInfo !== 'object' || licenseInfo === null) {\n throw new Error('Invalid license.');\n }\n\n return licenseInfo as LicenseInfo;\n};\n\nconst readEnvFileLicense = async (\n appDir: string,\n env: NodeJS.ProcessEnv\n): Promise<string | undefined> => {\n const envFilePath = env.ENV_PATH ? path.resolve(appDir, env.ENV_PATH) : path.join(appDir, '.env');\n\n if (!(await fse.pathExists(envFilePath))) {\n return undefined;\n }\n\n return cleanLicense(dotenv.parse(await fse.readFile(envFilePath)).STRAPI_LICENSE);\n};\n\nexport const findLicense = async ({\n appDir,\n env,\n}: {\n appDir: string;\n env: NodeJS.ProcessEnv;\n}): Promise<FoundLicense | undefined> => {\n const licenseFromEnvironment = cleanLicense(env.STRAPI_LICENSE);\n if (licenseFromEnvironment) {\n const isFromEnvFile = (await readEnvFileLicense(appDir, env)) === licenseFromEnvironment;\n\n return { license: licenseFromEnvironment, source: isFromEnvFile ? 'env-file' : 'environment' };\n }\n\n let licenseFromLicenseFile: string | undefined;\n\n try {\n licenseFromLicenseFile = cleanLicense(await readLicenseFile(appDir));\n } catch {\n throw new EnterpriseInstallError(\n `Could not read ${LICENSE_FILE_NAME}. Check its permissions, or set STRAPI_LICENSE instead.`\n );\n }\n\n if (licenseFromLicenseFile) {\n return { license: licenseFromLicenseFile, source: 'license-file' };\n }\n\n return undefined;\n};\n\nexport const validateLicense = (license: string, now: Date): void => {\n let licenseInfo: LicenseInfo;\n\n try {\n licenseInfo = readLicenseInfo(license);\n } catch {\n throw new EnterpriseInstallError(\n `This Strapi license is not valid. Check that you copied all of it, or find it at ${BILLING_URL}`\n );\n }\n\n const expiresAt = licenseInfo.expireAt === undefined ? undefined : new Date(licenseInfo.expireAt);\n\n if (expiresAt && !Number.isNaN(expiresAt.getTime()) && expiresAt.getTime() < now.getTime()) {\n throw new EnterpriseInstallError(\n `This Strapi license expired on ${expiresAt.toISOString().slice(0, 10)}. Renew it at ${BILLING_URL}`\n );\n }\n};\n\nexport const promptForLicense = async (): Promise<string> => {\n const inquirer = await getInquirer();\n const { license } = await inquirer.prompt<{ license: string }>([\n {\n type: 'password',\n name: 'license',\n message: 'Strapi license?',\n validate: (value: string) => value.trim().length > 0 || 'The license cannot be empty.',\n },\n ]);\n\n return license.trim();\n};\n\nconst isLicenseFileIgnored = (gitignoreContent: string): boolean =>\n gitignoreContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .some((line) => line === LICENSE_FILE_NAME || line === `/${LICENSE_FILE_NAME}`);\n\nconst ensureLicenseFileIsIgnored = async (appDir: string, logger: Logger): Promise<void> => {\n const gitignorePath = path.join(appDir, '.gitignore');\n const gitignoreContent = (await fse.pathExists(gitignorePath))\n ? await fse.readFile(gitignorePath, 'utf8')\n : '';\n\n if (isLicenseFileIgnored(gitignoreContent)) {\n return;\n }\n\n const separator = gitignoreContent.length > 0 && !gitignoreContent.endsWith('\\n') ? '\\n' : '';\n await fse.writeFile(gitignorePath, `${gitignoreContent}${separator}${LICENSE_FILE_NAME}\\n`);\n logger.info(`Added ${LICENSE_FILE_NAME} to .gitignore so the license is not committed.`);\n};\n\nexport const saveLicenseFile = async (\n appDir: string,\n license: string,\n logger: Logger\n): Promise<void> => {\n const licenseFilePath = path.join(appDir, LICENSE_FILE_NAME);\n\n await fse.writeFile(licenseFilePath, `${license}\\n`);\n // Also restricts a license.txt that already existed, empty, with wider permissions.\n await fse.chmod(licenseFilePath, 0o600);\n await ensureLicenseFileIsIgnored(appDir, logger);\n};\n\nexport const resolveLicense = async ({\n appDir,\n isInteractive,\n logger,\n env,\n now,\n prompt,\n}: {\n appDir: string;\n isInteractive: boolean;\n logger: Logger;\n env: NodeJS.ProcessEnv;\n now: Date;\n prompt: () => Promise<string>;\n}): Promise<ResolvedLicense> => {\n const foundLicense = await findLicense({ appDir, env });\n\n if (foundLicense) {\n validateLicense(foundLicense.license, now);\n logger.info(`Using the Strapi license from ${LICENSE_SOURCE_LABELS[foundLicense.source]}.`);\n\n return foundLicense;\n }\n\n if (!isInteractive) {\n throw new EnterpriseInstallError(\n 'No Strapi license found. Set STRAPI_LICENSE, or run the command in a terminal to paste it.'\n );\n }\n\n logger.info(`No Strapi license found. You can find yours at ${BILLING_URL}`);\n\n const pastedLicense = await prompt();\n validateLicense(pastedLicense, now);\n await saveLicenseFile(appDir, pastedLicense, logger);\n logger.success(`Saved the license to ${LICENSE_FILE_NAME}.`);\n\n return { license: pastedLicense, source: 'prompt' };\n};\n"],"names":["LICENSE_SOURCE_LABELS","environment","LICENSE_FILE_NAME","cleanLicense","value","trim","undefined","readLicenseFile","appDir","fse","readFile","path","join","error","code","readLicenseInfo","license","signature","base64Content","Buffer","from","toString","split","Error","licenseInfo","JSON","parse","readEnvFileLicense","env","envFilePath","ENV_PATH","resolve","pathExists","dotenv","STRAPI_LICENSE","findLicense","licenseFromEnvironment","isFromEnvFile","source","licenseFromLicenseFile","EnterpriseInstallError","validateLicense","now","BILLING_URL","expiresAt","expireAt","Date","Number","isNaN","getTime","toISOString","slice","promptForLicense","inquirer","getInquirer","prompt","type","name","message","validate","length","isLicenseFileIgnored","gitignoreContent","map","line","some","ensureLicenseFileIsIgnored","logger","gitignorePath","separator","endsWith","writeFile","info","saveLicenseFile","licenseFilePath","chmod","resolveLicense","isInteractive","foundLicense","pastedLicense","success"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"license.js","sources":["../../../../../../src/cli/commands/enterprise/install/license.ts"],"sourcesContent":["import path from 'node:path';\nimport fse from 'fs-extra';\nimport dotenv from 'dotenv';\n\nimport { getInquirer } from '../../../utils/get-inquirer';\nimport type { Logger } from '../../../utils/logger';\nimport { BILLING_URL, LICENSE_FILE_NAME } from './constants';\nimport { EnterpriseInstallError } from './errors';\n\nexport type LicenseSource = 'environment' | 'env-file' | 'license-file';\n\nexport interface FoundLicense {\n license: string;\n source: LicenseSource;\n}\n\nexport interface ResolvedLicense {\n license: string;\n /** `prompt` when the user pasted it, which also saved it to license.txt. */\n source: LicenseSource | 'prompt';\n}\n\nconst LICENSE_SOURCE_LABELS: Record<LicenseSource, string> = {\n environment: 'the STRAPI_LICENSE environment variable',\n 'env-file': 'STRAPI_LICENSE in .env',\n 'license-file': LICENSE_FILE_NAME,\n};\n\nconst cleanLicense = (value: string | undefined): string | undefined => value?.trim() || undefined;\n\nconst readLicenseFile = async (appDir: string): Promise<string | undefined> => {\n try {\n return await fse.readFile(path.join(appDir, LICENSE_FILE_NAME), 'utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException)?.code === 'ENOENT') {\n return undefined;\n }\n\n throw error;\n }\n};\n\nconst assertLicenseFormat = (license: string): void => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: unknown = JSON.parse(Buffer.from(base64Content, 'base64').toString());\n\n if (typeof licenseInfo !== 'object' || licenseInfo === null) {\n throw new Error('Invalid license.');\n }\n};\n\nconst readEnvFileLicense = async (\n appDir: string,\n env: NodeJS.ProcessEnv\n): Promise<string | undefined> => {\n const envFilePath = env.ENV_PATH ? path.resolve(appDir, env.ENV_PATH) : path.join(appDir, '.env');\n\n if (!(await fse.pathExists(envFilePath))) {\n return undefined;\n }\n\n return cleanLicense(dotenv.parse(await fse.readFile(envFilePath)).STRAPI_LICENSE);\n};\n\nexport const findLicense = async ({\n appDir,\n env,\n}: {\n appDir: string;\n env: NodeJS.ProcessEnv;\n}): Promise<FoundLicense | undefined> => {\n const licenseFromEnvironment = cleanLicense(env.STRAPI_LICENSE);\n if (licenseFromEnvironment) {\n const isFromEnvFile = (await readEnvFileLicense(appDir, env)) === licenseFromEnvironment;\n\n return { license: licenseFromEnvironment, source: isFromEnvFile ? 'env-file' : 'environment' };\n }\n\n let licenseFromLicenseFile: string | undefined;\n\n try {\n licenseFromLicenseFile = cleanLicense(await readLicenseFile(appDir));\n } catch {\n throw new EnterpriseInstallError(\n `Could not read ${LICENSE_FILE_NAME}. Check its permissions, or set STRAPI_LICENSE instead.`\n );\n }\n\n if (licenseFromLicenseFile) {\n return { license: licenseFromLicenseFile, source: 'license-file' };\n }\n\n return undefined;\n};\n\nexport const validateLicense = (license: string): void => {\n try {\n assertLicenseFormat(license);\n } catch {\n throw new EnterpriseInstallError(\n `This Strapi license is not valid. Check that you copied all of it, or find it at ${BILLING_URL}`\n );\n }\n};\n\nexport const promptForLicense = async (): Promise<string> => {\n const inquirer = await getInquirer();\n const { license } = await inquirer.prompt<{ license: string }>([\n {\n type: 'password',\n name: 'license',\n message: 'Strapi license?',\n validate: (value: string) => value.trim().length > 0 || 'The license cannot be empty.',\n },\n ]);\n\n return license.trim();\n};\n\nconst isLicenseFileIgnored = (gitignoreContent: string): boolean =>\n gitignoreContent\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .some((line) => line === LICENSE_FILE_NAME || line === `/${LICENSE_FILE_NAME}`);\n\nconst ensureLicenseFileIsIgnored = async (appDir: string, logger: Logger): Promise<void> => {\n const gitignorePath = path.join(appDir, '.gitignore');\n const gitignoreContent = (await fse.pathExists(gitignorePath))\n ? await fse.readFile(gitignorePath, 'utf8')\n : '';\n\n if (isLicenseFileIgnored(gitignoreContent)) {\n return;\n }\n\n const separator = gitignoreContent.length > 0 && !gitignoreContent.endsWith('\\n') ? '\\n' : '';\n await fse.writeFile(gitignorePath, `${gitignoreContent}${separator}${LICENSE_FILE_NAME}\\n`);\n logger.info(`Added ${LICENSE_FILE_NAME} to .gitignore so the license is not committed.`);\n};\n\nexport const saveLicenseFile = async (\n appDir: string,\n license: string,\n logger: Logger\n): Promise<void> => {\n const licenseFilePath = path.join(appDir, LICENSE_FILE_NAME);\n\n await fse.writeFile(licenseFilePath, `${license}\\n`);\n // Also restricts a license.txt that already existed, empty, with wider permissions.\n await fse.chmod(licenseFilePath, 0o600);\n await ensureLicenseFileIsIgnored(appDir, logger);\n};\n\nexport const resolveLicense = async ({\n appDir,\n isInteractive,\n logger,\n env,\n prompt,\n}: {\n appDir: string;\n isInteractive: boolean;\n logger: Logger;\n env: NodeJS.ProcessEnv;\n prompt: () => Promise<string>;\n}): Promise<ResolvedLicense> => {\n const foundLicense = await findLicense({ appDir, env });\n\n if (foundLicense) {\n validateLicense(foundLicense.license);\n logger.info(`Using the Strapi license from ${LICENSE_SOURCE_LABELS[foundLicense.source]}.`);\n\n return foundLicense;\n }\n\n if (!isInteractive) {\n throw new EnterpriseInstallError(\n 'No Strapi license found. Set STRAPI_LICENSE, or run the command in a terminal to paste it.'\n );\n }\n\n logger.info(`No Strapi license found. You can find yours at ${BILLING_URL}`);\n\n const pastedLicense = await prompt();\n validateLicense(pastedLicense);\n await saveLicenseFile(appDir, pastedLicense, logger);\n logger.success(`Saved the license to ${LICENSE_FILE_NAME}.`);\n\n return { license: pastedLicense, source: 'prompt' };\n};\n"],"names":["LICENSE_SOURCE_LABELS","environment","LICENSE_FILE_NAME","cleanLicense","value","trim","undefined","readLicenseFile","appDir","fse","readFile","path","join","error","code","assertLicenseFormat","license","signature","base64Content","Buffer","from","toString","split","Error","licenseInfo","JSON","parse","readEnvFileLicense","env","envFilePath","ENV_PATH","resolve","pathExists","dotenv","STRAPI_LICENSE","findLicense","licenseFromEnvironment","isFromEnvFile","source","licenseFromLicenseFile","EnterpriseInstallError","validateLicense","BILLING_URL","promptForLicense","inquirer","getInquirer","prompt","type","name","message","validate","length","isLicenseFileIgnored","gitignoreContent","map","line","some","ensureLicenseFileIsIgnored","logger","gitignorePath","separator","endsWith","writeFile","info","saveLicenseFile","licenseFilePath","chmod","resolveLicense","isInteractive","foundLicense","pastedLicense","success"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ const readLicenseFile = async (appDir)=>{
|
|
|
21
21
|
throw error;
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
const
|
|
24
|
+
const assertLicenseFormat = (license)=>{
|
|
25
25
|
const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\n');
|
|
26
26
|
if (!signature || !base64Content) {
|
|
27
27
|
throw new Error('Invalid license.');
|
|
@@ -30,7 +30,6 @@ const readLicenseInfo = (license)=>{
|
|
|
30
30
|
if (typeof licenseInfo !== 'object' || licenseInfo === null) {
|
|
31
31
|
throw new Error('Invalid license.');
|
|
32
32
|
}
|
|
33
|
-
return licenseInfo;
|
|
34
33
|
};
|
|
35
34
|
const readEnvFileLicense = async (appDir, env)=>{
|
|
36
35
|
const envFilePath = env.ENV_PATH ? path.resolve(appDir, env.ENV_PATH) : path.join(appDir, '.env');
|
|
@@ -62,17 +61,12 @@ const findLicense = async ({ appDir, env })=>{
|
|
|
62
61
|
}
|
|
63
62
|
return undefined;
|
|
64
63
|
};
|
|
65
|
-
const validateLicense = (license
|
|
66
|
-
let licenseInfo;
|
|
64
|
+
const validateLicense = (license)=>{
|
|
67
65
|
try {
|
|
68
|
-
|
|
66
|
+
assertLicenseFormat(license);
|
|
69
67
|
} catch {
|
|
70
68
|
throw new EnterpriseInstallError(`This Strapi license is not valid. Check that you copied all of it, or find it at ${BILLING_URL}`);
|
|
71
69
|
}
|
|
72
|
-
const expiresAt = licenseInfo.expireAt === undefined ? undefined : new Date(licenseInfo.expireAt);
|
|
73
|
-
if (expiresAt && !Number.isNaN(expiresAt.getTime()) && expiresAt.getTime() < now.getTime()) {
|
|
74
|
-
throw new EnterpriseInstallError(`This Strapi license expired on ${expiresAt.toISOString().slice(0, 10)}. Renew it at ${BILLING_URL}`);
|
|
75
|
-
}
|
|
76
70
|
};
|
|
77
71
|
const promptForLicense = async ()=>{
|
|
78
72
|
const inquirer = await getInquirer();
|
|
@@ -104,13 +98,13 @@ const saveLicenseFile = async (appDir, license, logger)=>{
|
|
|
104
98
|
await fse.chmod(licenseFilePath, 0o600);
|
|
105
99
|
await ensureLicenseFileIsIgnored(appDir, logger);
|
|
106
100
|
};
|
|
107
|
-
const resolveLicense = async ({ appDir, isInteractive, logger, env,
|
|
101
|
+
const resolveLicense = async ({ appDir, isInteractive, logger, env, prompt })=>{
|
|
108
102
|
const foundLicense = await findLicense({
|
|
109
103
|
appDir,
|
|
110
104
|
env
|
|
111
105
|
});
|
|
112
106
|
if (foundLicense) {
|
|
113
|
-
validateLicense(foundLicense.license
|
|
107
|
+
validateLicense(foundLicense.license);
|
|
114
108
|
logger.info(`Using the Strapi license from ${LICENSE_SOURCE_LABELS[foundLicense.source]}.`);
|
|
115
109
|
return foundLicense;
|
|
116
110
|
}
|
|
@@ -119,7 +113,7 @@ const resolveLicense = async ({ appDir, isInteractive, logger, env, now, prompt
|
|
|
119
113
|
}
|
|
120
114
|
logger.info(`No Strapi license found. You can find yours at ${BILLING_URL}`);
|
|
121
115
|
const pastedLicense = await prompt();
|
|
122
|
-
validateLicense(pastedLicense
|
|
116
|
+
validateLicense(pastedLicense);
|
|
123
117
|
await saveLicenseFile(appDir, pastedLicense, logger);
|
|
124
118
|
logger.success(`Saved the license to ${LICENSE_FILE_NAME}.`);
|
|
125
119
|
return {
|