@strapi/strapi 5.56.0 → 5.57.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/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/content-types/rename-field.d.ts +13 -0
- package/dist/cli/commands/content-types/rename-field.d.ts.map +1 -0
- package/dist/cli/commands/develop.d.ts.map +1 -1
- package/dist/cli/commands/enterprise/index.d.ts +7 -0
- package/dist/cli/commands/enterprise/index.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/action.d.ts +36 -0
- package/dist/cli/commands/enterprise/install/action.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts +14 -0
- package/dist/cli/commands/enterprise/install/checklist-prompt.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts +7 -0
- package/dist/cli/commands/enterprise/install/constants.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts +3 -0
- package/dist/cli/commands/enterprise/install/directories.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts +29 -0
- package/dist/cli/commands/enterprise/install/discovery.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/errors.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts +11 -0
- package/dist/cli/commands/enterprise/install/install-packages.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/license.d.ts +27 -0
- package/dist/cli/commands/enterprise/install/license.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts +17 -0
- package/dist/cli/commands/enterprise/install/package-manager.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts +44 -0
- package/dist/cli/commands/enterprise/install/plugin-status.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts +55 -0
- package/dist/cli/commands/enterprise/install/registry-access.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts +54 -0
- package/dist/cli/commands/enterprise/install/registry.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts +62 -0
- package/dist/cli/commands/enterprise/install/selection.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts +16 -0
- package/dist/cli/commands/enterprise/install/setup-links.d.ts.map +1 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts +42 -0
- package/dist/cli/commands/enterprise/install/versions.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/utils/commander.d.ts.map +1 -1
- package/dist/cli/utils/helpers.d.ts +1 -1
- package/dist/cli/utils/helpers.d.ts.map +1 -1
- package/dist/node/vite/config.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/build.js +4 -2
- package/dist/src/cli/commands/build.js.map +1 -1
- package/dist/src/cli/commands/build.mjs +4 -2
- package/dist/src/cli/commands/build.mjs.map +1 -1
- package/dist/src/cli/commands/content-types/rename-field.js +63 -0
- package/dist/src/cli/commands/content-types/rename-field.js.map +1 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs +54 -0
- package/dist/src/cli/commands/content-types/rename-field.mjs.map +1 -0
- package/dist/src/cli/commands/develop.js +4 -2
- package/dist/src/cli/commands/develop.js.map +1 -1
- package/dist/src/cli/commands/develop.mjs +4 -2
- package/dist/src/cli/commands/develop.mjs.map +1 -1
- package/dist/src/cli/commands/enterprise/index.js +17 -0
- package/dist/src/cli/commands/enterprise/index.js.map +1 -0
- package/dist/src/cli/commands/enterprise/index.mjs +15 -0
- package/dist/src/cli/commands/enterprise/index.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.js +253 -0
- package/dist/src/cli/commands/enterprise/install/action.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs +244 -0
- package/dist/src/cli/commands/enterprise/install/action.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js +117 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs +110 -0
- package/dist/src/cli/commands/enterprise/install/checklist-prompt.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.js +16 -0
- package/dist/src/cli/commands/enterprise/install/constants.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs +9 -0
- package/dist/src/cli/commands/enterprise/install/constants.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.js +23 -0
- package/dist/src/cli/commands/enterprise/install/directories.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs +17 -0
- package/dist/src/cli/commands/enterprise/install/directories.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js +109 -0
- package/dist/src/cli/commands/enterprise/install/discovery.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs +104 -0
- package/dist/src/cli/commands/enterprise/install/discovery.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.js +26 -0
- package/dist/src/cli/commands/enterprise/install/errors.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs +22 -0
- package/dist/src/cli/commands/enterprise/install/errors.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js +39 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs +32 -0
- package/dist/src/cli/commands/enterprise/install/install-packages.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.js +144 -0
- package/dist/src/cli/commands/enterprise/install/license.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs +132 -0
- package/dist/src/cli/commands/enterprise/install/license.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js +72 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs +62 -0
- package/dist/src/cli/commands/enterprise/install/package-manager.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js +47 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs +45 -0
- package/dist/src/cli/commands/enterprise/install/plugin-status.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js +293 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs +277 -0
- package/dist/src/cli/commands/enterprise/install/registry-access.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.js +98 -0
- package/dist/src/cli/commands/enterprise/install/registry.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs +95 -0
- package/dist/src/cli/commands/enterprise/install/registry.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.js +148 -0
- package/dist/src/cli/commands/enterprise/install/selection.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs +141 -0
- package/dist/src/cli/commands/enterprise/install/selection.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js +34 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs +31 -0
- package/dist/src/cli/commands/enterprise/install/setup-links.mjs.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.js +127 -0
- package/dist/src/cli/commands/enterprise/install/versions.js.map +1 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs +107 -0
- package/dist/src/cli/commands/enterprise/install/versions.mjs.map +1 -0
- package/dist/src/cli/commands/export/action.js +4 -4
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/export/action.mjs +2 -2
- package/dist/src/cli/commands/export/action.mjs.map +1 -1
- package/dist/src/cli/commands/import/action.js +2 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/action.mjs +1 -1
- package/dist/src/cli/commands/import/action.mjs.map +1 -1
- package/dist/src/cli/commands/index.js +4 -0
- package/dist/src/cli/commands/index.js.map +1 -1
- package/dist/src/cli/commands/index.mjs +24 -20
- package/dist/src/cli/commands/index.mjs.map +1 -1
- package/dist/src/cli/commands/routes/list.js +2 -2
- package/dist/src/cli/commands/routes/list.js.map +1 -1
- package/dist/src/cli/commands/routes/list.mjs +1 -1
- package/dist/src/cli/commands/routes/list.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +2 -2
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.mjs +1 -1
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
- package/dist/src/cli/utils/commander.js +1 -2
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/commander.mjs +1 -2
- package/dist/src/cli/utils/commander.mjs.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +2 -2
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.mjs +2 -2
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
- package/dist/src/cli/utils/helpers.js +6 -6
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/helpers.mjs +4 -4
- package/dist/src/cli/utils/helpers.mjs.map +1 -1
- package/dist/src/node/vite/config.js +0 -1
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +0 -1
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/package.json +23 -23
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ENTERPRISE_SCOPE = '@strapi-enterprise';
|
|
4
|
+
const ENTERPRISE_REGISTRY_URL = 'https://packages.strapi.io/';
|
|
5
|
+
const BILLING_URL = 'https://billing.strapi.io/';
|
|
6
|
+
const ENTERPRISE_PLUGINS_DOCS_URL = 'https://docs.strapi.io/';
|
|
7
|
+
const LICENSE_FILE_NAME = 'license.txt';
|
|
8
|
+
const STRAPI_PACKAGE_NAME = '@strapi/strapi';
|
|
9
|
+
|
|
10
|
+
exports.BILLING_URL = BILLING_URL;
|
|
11
|
+
exports.ENTERPRISE_PLUGINS_DOCS_URL = ENTERPRISE_PLUGINS_DOCS_URL;
|
|
12
|
+
exports.ENTERPRISE_REGISTRY_URL = ENTERPRISE_REGISTRY_URL;
|
|
13
|
+
exports.ENTERPRISE_SCOPE = ENTERPRISE_SCOPE;
|
|
14
|
+
exports.LICENSE_FILE_NAME = LICENSE_FILE_NAME;
|
|
15
|
+
exports.STRAPI_PACKAGE_NAME = STRAPI_PACKAGE_NAME;
|
|
16
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../../src/cli/commands/enterprise/install/constants.ts"],"sourcesContent":["export const ENTERPRISE_SCOPE = '@strapi-enterprise';\n\nexport const ENTERPRISE_REGISTRY_URL = 'https://packages.strapi.io/';\n\nexport const BILLING_URL = 'https://billing.strapi.io/';\n\nexport const ENTERPRISE_PLUGINS_DOCS_URL = 'https://docs.strapi.io/';\n\nexport const LICENSE_FILE_NAME = 'license.txt';\n\nexport const STRAPI_PACKAGE_NAME = '@strapi/strapi';\n"],"names":["ENTERPRISE_SCOPE","ENTERPRISE_REGISTRY_URL","BILLING_URL","ENTERPRISE_PLUGINS_DOCS_URL","LICENSE_FILE_NAME","STRAPI_PACKAGE_NAME"],"mappings":";;AAAO,MAAMA,mBAAmB;AAEzB,MAAMC,0BAA0B;AAEhC,MAAMC,cAAc;AAEpB,MAAMC,8BAA8B;AAEpC,MAAMC,oBAAoB;AAE1B,MAAMC,sBAAsB;;;;;;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const ENTERPRISE_SCOPE = '@strapi-enterprise';
|
|
2
|
+
const ENTERPRISE_REGISTRY_URL = 'https://packages.strapi.io/';
|
|
3
|
+
const BILLING_URL = 'https://billing.strapi.io/';
|
|
4
|
+
const ENTERPRISE_PLUGINS_DOCS_URL = 'https://docs.strapi.io/';
|
|
5
|
+
const LICENSE_FILE_NAME = 'license.txt';
|
|
6
|
+
const STRAPI_PACKAGE_NAME = '@strapi/strapi';
|
|
7
|
+
|
|
8
|
+
export { BILLING_URL, ENTERPRISE_PLUGINS_DOCS_URL, ENTERPRISE_REGISTRY_URL, ENTERPRISE_SCOPE, LICENSE_FILE_NAME, STRAPI_PACKAGE_NAME };
|
|
9
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/constants.ts"],"sourcesContent":["export const ENTERPRISE_SCOPE = '@strapi-enterprise';\n\nexport const ENTERPRISE_REGISTRY_URL = 'https://packages.strapi.io/';\n\nexport const BILLING_URL = 'https://billing.strapi.io/';\n\nexport const ENTERPRISE_PLUGINS_DOCS_URL = 'https://docs.strapi.io/';\n\nexport const LICENSE_FILE_NAME = 'license.txt';\n\nexport const STRAPI_PACKAGE_NAME = '@strapi/strapi';\n"],"names":["ENTERPRISE_SCOPE","ENTERPRISE_REGISTRY_URL","BILLING_URL","ENTERPRISE_PLUGINS_DOCS_URL","LICENSE_FILE_NAME","STRAPI_PACKAGE_NAME"],"mappings":"AAAO,MAAMA,mBAAmB;AAEzB,MAAMC,0BAA0B;AAEhC,MAAMC,cAAc;AAEpB,MAAMC,8BAA8B;AAEpC,MAAMC,oBAAoB;AAE1B,MAAMC,sBAAsB;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
8
|
+
|
|
9
|
+
/** The app folder and each of its parents, up to the root of the file system. */ const listAncestorDirectories = (appDir)=>{
|
|
10
|
+
let directory = path__default.default.resolve(appDir);
|
|
11
|
+
const directories = [
|
|
12
|
+
directory
|
|
13
|
+
];
|
|
14
|
+
// `path.dirname` of the root is the root itself, which ends the walk.
|
|
15
|
+
while(path__default.default.dirname(directory) !== directory){
|
|
16
|
+
directory = path__default.default.dirname(directory);
|
|
17
|
+
directories.push(directory);
|
|
18
|
+
}
|
|
19
|
+
return directories;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.listAncestorDirectories = listAncestorDirectories;
|
|
23
|
+
//# sourceMappingURL=directories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directories.js","sources":["../../../../../../src/cli/commands/enterprise/install/directories.ts"],"sourcesContent":["import path from 'node:path';\n\n/** The app folder and each of its parents, up to the root of the file system. */\nexport const listAncestorDirectories = (appDir: string): string[] => {\n let directory = path.resolve(appDir);\n const directories = [directory];\n\n // `path.dirname` of the root is the root itself, which ends the walk.\n while (path.dirname(directory) !== directory) {\n directory = path.dirname(directory);\n directories.push(directory);\n }\n\n return directories;\n};\n"],"names":["listAncestorDirectories","appDir","directory","path","resolve","directories","dirname","push"],"mappings":";;;;;;;;AAEA,kFACO,MAAMA,uBAAAA,GAA0B,CAACC,MAAAA,GAAAA;IACtC,IAAIC,SAAAA,GAAYC,qBAAAA,CAAKC,OAAO,CAACH,MAAAA,CAAAA;AAC7B,IAAA,MAAMI,WAAAA,GAAc;AAACH,QAAAA;AAAU,KAAA;;AAG/B,IAAA,MAAOC,qBAAAA,CAAKG,OAAO,CAACJ,SAAAA,CAAAA,KAAeA,SAAAA,CAAW;QAC5CA,SAAAA,GAAYC,qBAAAA,CAAKG,OAAO,CAACJ,SAAAA,CAAAA;AACzBG,QAAAA,WAAAA,CAAYE,IAAI,CAACL,SAAAA,CAAAA;AACnB,IAAA;IAEA,OAAOG,WAAAA;AACT;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
|
|
3
|
+
/** The app folder and each of its parents, up to the root of the file system. */ const listAncestorDirectories = (appDir)=>{
|
|
4
|
+
let directory = path.resolve(appDir);
|
|
5
|
+
const directories = [
|
|
6
|
+
directory
|
|
7
|
+
];
|
|
8
|
+
// `path.dirname` of the root is the root itself, which ends the walk.
|
|
9
|
+
while(path.dirname(directory) !== directory){
|
|
10
|
+
directory = path.dirname(directory);
|
|
11
|
+
directories.push(directory);
|
|
12
|
+
}
|
|
13
|
+
return directories;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { listAncestorDirectories };
|
|
17
|
+
//# sourceMappingURL=directories.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directories.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/directories.ts"],"sourcesContent":["import path from 'node:path';\n\n/** The app folder and each of its parents, up to the root of the file system. */\nexport const listAncestorDirectories = (appDir: string): string[] => {\n let directory = path.resolve(appDir);\n const directories = [directory];\n\n // `path.dirname` of the root is the root itself, which ends the walk.\n while (path.dirname(directory) !== directory) {\n directory = path.dirname(directory);\n directories.push(directory);\n }\n\n return directories;\n};\n"],"names":["listAncestorDirectories","appDir","directory","path","resolve","directories","dirname","push"],"mappings":";;AAEA,kFACO,MAAMA,uBAAAA,GAA0B,CAACC,MAAAA,GAAAA;IACtC,IAAIC,SAAAA,GAAYC,IAAAA,CAAKC,OAAO,CAACH,MAAAA,CAAAA;AAC7B,IAAA,MAAMI,WAAAA,GAAc;AAACH,QAAAA;AAAU,KAAA;;AAG/B,IAAA,MAAOC,IAAAA,CAAKG,OAAO,CAACJ,SAAAA,CAAAA,KAAeA,SAAAA,CAAW;QAC5CA,SAAAA,GAAYC,IAAAA,CAAKG,OAAO,CAACJ,SAAAA,CAAAA;AACzBG,QAAAA,WAAAA,CAAYE,IAAI,CAACL,SAAAA,CAAAA;AACnB,IAAA;IAEA,OAAOG,WAAAA;AACT;;;;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('./constants.js');
|
|
4
|
+
var errors = require('./errors.js');
|
|
5
|
+
var registry = require('./registry.js');
|
|
6
|
+
var versions = require('./versions.js');
|
|
7
|
+
|
|
8
|
+
const isEnterprisePackage = (packageName)=>packageName.startsWith(`${constants.ENTERPRISE_SCOPE}/`);
|
|
9
|
+
const declaresStrapiKind = (strapiKind)=>typeof strapiKind === 'string' && strapiKind.length > 0;
|
|
10
|
+
/**
|
|
11
|
+
* Enterprise plugins the app depends on: listed in its own `package.json`, and installed. Libraries
|
|
12
|
+
* the plugins depend on are left out, as are copies hoisted for another app of the same monorepo.
|
|
13
|
+
*/ const listInstalledEnterprisePlugins = async (appDir)=>{
|
|
14
|
+
const installedPluginNames = [];
|
|
15
|
+
for (const packageName of (await versions.readAppDependencyNames(appDir))){
|
|
16
|
+
if (!isEnterprisePackage(packageName)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const packageJson = await versions.readInstalledPackageJson(appDir, packageName);
|
|
20
|
+
if (declaresStrapiKind(packageJson?.strapi?.kind)) {
|
|
21
|
+
installedPluginNames.push(packageName);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return installedPluginNames;
|
|
25
|
+
};
|
|
26
|
+
const findLatestManifest = (packument)=>{
|
|
27
|
+
const latestVersion = packument['dist-tags']?.latest;
|
|
28
|
+
return latestVersion ? packument.versions?.[latestVersion] : undefined;
|
|
29
|
+
};
|
|
30
|
+
const describeEnterprisePlugin = (packageName, lookup)=>{
|
|
31
|
+
if (lookup.status !== 'available') {
|
|
32
|
+
return {
|
|
33
|
+
packageName,
|
|
34
|
+
displayName: packageName,
|
|
35
|
+
summary: ''
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const latestManifest = findLatestManifest(lookup.packument);
|
|
39
|
+
const strapiMetadata = latestManifest?.strapi;
|
|
40
|
+
if (!strapiMetadata || !declaresStrapiKind(strapiMetadata.kind)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
packageName,
|
|
45
|
+
displayName: strapiMetadata.displayName ?? packageName,
|
|
46
|
+
summary: strapiMetadata.description ?? latestManifest?.description ?? '',
|
|
47
|
+
kind: strapiMetadata.kind
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
const discoverEnterprisePlugins = async ({ appDir, license, logger, fetchImplementation })=>{
|
|
51
|
+
const [searchResult, installedPluginNames] = await Promise.all([
|
|
52
|
+
registry.searchPackageNames({
|
|
53
|
+
text: constants.ENTERPRISE_SCOPE,
|
|
54
|
+
license,
|
|
55
|
+
fetchImplementation
|
|
56
|
+
}),
|
|
57
|
+
listInstalledEnterprisePlugins(appDir)
|
|
58
|
+
]);
|
|
59
|
+
if (searchResult.status === 'license-rejected') {
|
|
60
|
+
throw new errors.EnterpriseInstallError(searchResult.message);
|
|
61
|
+
}
|
|
62
|
+
if (searchResult.status === 'unavailable') {
|
|
63
|
+
const registryHost = new URL(constants.ENTERPRISE_REGISTRY_URL).host;
|
|
64
|
+
if (installedPluginNames.length === 0) {
|
|
65
|
+
throw new errors.EnterpriseInstallError(`Could not search ${registryHost}. Try again later, or name the plugin to install.`);
|
|
66
|
+
}
|
|
67
|
+
logger.warn(`Could not search ${registryHost}, so only the installed Enterprise plugins are listed.`);
|
|
68
|
+
}
|
|
69
|
+
const candidatePackageNames = [
|
|
70
|
+
...new Set([
|
|
71
|
+
...searchResult.status === 'available' ? searchResult.packageNames : [],
|
|
72
|
+
...installedPluginNames
|
|
73
|
+
])
|
|
74
|
+
].filter(isEnterprisePackage);
|
|
75
|
+
const lookupFailures = [];
|
|
76
|
+
const discoveredPlugins = await Promise.all(candidatePackageNames.map(async (packageName)=>{
|
|
77
|
+
const [lookup, installedVersion] = await Promise.all([
|
|
78
|
+
registry.fetchPackument({
|
|
79
|
+
packageName,
|
|
80
|
+
license,
|
|
81
|
+
fetchImplementation
|
|
82
|
+
}),
|
|
83
|
+
versions.readAppDependencyVersion(appDir, packageName)
|
|
84
|
+
]);
|
|
85
|
+
if (lookup.status === 'unavailable') {
|
|
86
|
+
// One package the registry fails to describe should not hide the others.
|
|
87
|
+
lookupFailures.push(lookup.message);
|
|
88
|
+
logger.warn(`${packageName} is left out of the list: ${lookup.message}`);
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const entry = describeEnterprisePlugin(packageName, lookup);
|
|
92
|
+
return entry ? {
|
|
93
|
+
entry,
|
|
94
|
+
lookup,
|
|
95
|
+
installedVersion
|
|
96
|
+
} : undefined;
|
|
97
|
+
}));
|
|
98
|
+
// When every lookup fails, the registry itself is the problem, not the license.
|
|
99
|
+
if (candidatePackageNames.length > 0 && lookupFailures.length === candidatePackageNames.length) {
|
|
100
|
+
throw new errors.EnterpriseInstallError(lookupFailures[0]);
|
|
101
|
+
}
|
|
102
|
+
return discoveredPlugins.filter((discoveredPlugin)=>discoveredPlugin !== undefined);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
exports.declaresStrapiKind = declaresStrapiKind;
|
|
106
|
+
exports.describeEnterprisePlugin = describeEnterprisePlugin;
|
|
107
|
+
exports.discoverEnterprisePlugins = discoverEnterprisePlugins;
|
|
108
|
+
exports.listInstalledEnterprisePlugins = listInstalledEnterprisePlugins;
|
|
109
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sources":["../../../../../../src/cli/commands/enterprise/install/discovery.ts"],"sourcesContent":["import type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_REGISTRY_URL, ENTERPRISE_SCOPE } from './constants';\nimport { EnterpriseInstallError } from './errors';\nimport {\n fetchPackument,\n searchPackageNames,\n type Packument,\n type PackumentLookup,\n} from './registry';\nimport {\n readAppDependencyNames,\n readAppDependencyVersion,\n readInstalledPackageJson,\n} from './versions';\n\nexport interface EnterprisePluginEntry {\n packageName: string;\n displayName: string;\n summary: string;\n kind?: string;\n}\n\nexport interface DiscoveredPlugin {\n entry: EnterprisePluginEntry;\n lookup: Exclude<PackumentLookup, { status: 'unavailable' }>;\n installedVersion?: string;\n}\n\nconst isEnterprisePackage = (packageName: string) => packageName.startsWith(`${ENTERPRISE_SCOPE}/`);\n\nexport const declaresStrapiKind = (strapiKind: unknown): strapiKind is string =>\n typeof strapiKind === 'string' && strapiKind.length > 0;\n\n/**\n * Enterprise plugins the app depends on: listed in its own `package.json`, and installed. Libraries\n * the plugins depend on are left out, as are copies hoisted for another app of the same monorepo.\n */\nexport const listInstalledEnterprisePlugins = async (appDir: string): Promise<string[]> => {\n const installedPluginNames: string[] = [];\n\n for (const packageName of await readAppDependencyNames(appDir)) {\n if (!isEnterprisePackage(packageName)) {\n continue;\n }\n\n const packageJson = await readInstalledPackageJson(appDir, packageName);\n\n if (declaresStrapiKind(packageJson?.strapi?.kind)) {\n installedPluginNames.push(packageName);\n }\n }\n\n return installedPluginNames;\n};\n\nconst findLatestManifest = (packument: Packument) => {\n const latestVersion = packument['dist-tags']?.latest;\n\n return latestVersion ? packument.versions?.[latestVersion] : undefined;\n};\n\nexport const describeEnterprisePlugin = (\n packageName: string,\n lookup: PackumentLookup\n): EnterprisePluginEntry | undefined => {\n if (lookup.status !== 'available') {\n return {\n packageName,\n displayName: packageName,\n summary: '',\n };\n }\n\n const latestManifest = findLatestManifest(lookup.packument);\n const strapiMetadata = latestManifest?.strapi;\n\n if (!strapiMetadata || !declaresStrapiKind(strapiMetadata.kind)) {\n return undefined;\n }\n\n return {\n packageName,\n displayName: strapiMetadata.displayName ?? packageName,\n summary: strapiMetadata.description ?? latestManifest?.description ?? '',\n kind: strapiMetadata.kind,\n };\n};\n\nexport const discoverEnterprisePlugins = async ({\n appDir,\n license,\n logger,\n fetchImplementation,\n}: {\n appDir: string;\n license: string;\n logger: Logger;\n fetchImplementation: typeof fetch;\n}): Promise<DiscoveredPlugin[]> => {\n const [searchResult, installedPluginNames] = await Promise.all([\n searchPackageNames({ text: ENTERPRISE_SCOPE, license, fetchImplementation }),\n listInstalledEnterprisePlugins(appDir),\n ]);\n\n if (searchResult.status === 'license-rejected') {\n throw new EnterpriseInstallError(searchResult.message);\n }\n\n if (searchResult.status === 'unavailable') {\n const registryHost = new URL(ENTERPRISE_REGISTRY_URL).host;\n\n if (installedPluginNames.length === 0) {\n throw new EnterpriseInstallError(\n `Could not search ${registryHost}. Try again later, or name the plugin to install.`\n );\n }\n\n logger.warn(\n `Could not search ${registryHost}, so only the installed Enterprise plugins are listed.`\n );\n }\n\n const candidatePackageNames = [\n ...new Set([\n ...(searchResult.status === 'available' ? searchResult.packageNames : []),\n ...installedPluginNames,\n ]),\n ].filter(isEnterprisePackage);\n\n const lookupFailures: string[] = [];\n\n const discoveredPlugins = await Promise.all(\n candidatePackageNames.map(async (packageName): Promise<DiscoveredPlugin | undefined> => {\n const [lookup, installedVersion] = await Promise.all([\n fetchPackument({ packageName, license, fetchImplementation }),\n readAppDependencyVersion(appDir, packageName),\n ]);\n\n if (lookup.status === 'unavailable') {\n // One package the registry fails to describe should not hide the others.\n lookupFailures.push(lookup.message);\n logger.warn(`${packageName} is left out of the list: ${lookup.message}`);\n\n return undefined;\n }\n\n const entry = describeEnterprisePlugin(packageName, lookup);\n\n return entry ? { entry, lookup, installedVersion } : undefined;\n })\n );\n\n // When every lookup fails, the registry itself is the problem, not the license.\n if (candidatePackageNames.length > 0 && lookupFailures.length === candidatePackageNames.length) {\n throw new EnterpriseInstallError(lookupFailures[0]);\n }\n\n return discoveredPlugins.filter(\n (discoveredPlugin): discoveredPlugin is DiscoveredPlugin => discoveredPlugin !== undefined\n );\n};\n"],"names":["isEnterprisePackage","packageName","startsWith","ENTERPRISE_SCOPE","declaresStrapiKind","strapiKind","length","listInstalledEnterprisePlugins","appDir","installedPluginNames","readAppDependencyNames","packageJson","readInstalledPackageJson","strapi","kind","push","findLatestManifest","packument","latestVersion","latest","versions","undefined","describeEnterprisePlugin","lookup","status","displayName","summary","latestManifest","strapiMetadata","description","discoverEnterprisePlugins","license","logger","fetchImplementation","searchResult","Promise","all","searchPackageNames","text","EnterpriseInstallError","message","registryHost","URL","ENTERPRISE_REGISTRY_URL","host","warn","candidatePackageNames","Set","packageNames","filter","lookupFailures","discoveredPlugins","map","installedVersion","fetchPackument","readAppDependencyVersion","entry","discoveredPlugin"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ENTERPRISE_REGISTRY_URL, ENTERPRISE_SCOPE } from './constants.mjs';
|
|
2
|
+
import { EnterpriseInstallError } from './errors.mjs';
|
|
3
|
+
import { searchPackageNames, fetchPackument } from './registry.mjs';
|
|
4
|
+
import { readAppDependencyVersion, readAppDependencyNames, readInstalledPackageJson } from './versions.mjs';
|
|
5
|
+
|
|
6
|
+
const isEnterprisePackage = (packageName)=>packageName.startsWith(`${ENTERPRISE_SCOPE}/`);
|
|
7
|
+
const declaresStrapiKind = (strapiKind)=>typeof strapiKind === 'string' && strapiKind.length > 0;
|
|
8
|
+
/**
|
|
9
|
+
* Enterprise plugins the app depends on: listed in its own `package.json`, and installed. Libraries
|
|
10
|
+
* the plugins depend on are left out, as are copies hoisted for another app of the same monorepo.
|
|
11
|
+
*/ const listInstalledEnterprisePlugins = async (appDir)=>{
|
|
12
|
+
const installedPluginNames = [];
|
|
13
|
+
for (const packageName of (await readAppDependencyNames(appDir))){
|
|
14
|
+
if (!isEnterprisePackage(packageName)) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const packageJson = await readInstalledPackageJson(appDir, packageName);
|
|
18
|
+
if (declaresStrapiKind(packageJson?.strapi?.kind)) {
|
|
19
|
+
installedPluginNames.push(packageName);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return installedPluginNames;
|
|
23
|
+
};
|
|
24
|
+
const findLatestManifest = (packument)=>{
|
|
25
|
+
const latestVersion = packument['dist-tags']?.latest;
|
|
26
|
+
return latestVersion ? packument.versions?.[latestVersion] : undefined;
|
|
27
|
+
};
|
|
28
|
+
const describeEnterprisePlugin = (packageName, lookup)=>{
|
|
29
|
+
if (lookup.status !== 'available') {
|
|
30
|
+
return {
|
|
31
|
+
packageName,
|
|
32
|
+
displayName: packageName,
|
|
33
|
+
summary: ''
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const latestManifest = findLatestManifest(lookup.packument);
|
|
37
|
+
const strapiMetadata = latestManifest?.strapi;
|
|
38
|
+
if (!strapiMetadata || !declaresStrapiKind(strapiMetadata.kind)) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
packageName,
|
|
43
|
+
displayName: strapiMetadata.displayName ?? packageName,
|
|
44
|
+
summary: strapiMetadata.description ?? latestManifest?.description ?? '',
|
|
45
|
+
kind: strapiMetadata.kind
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
const discoverEnterprisePlugins = async ({ appDir, license, logger, fetchImplementation })=>{
|
|
49
|
+
const [searchResult, installedPluginNames] = await Promise.all([
|
|
50
|
+
searchPackageNames({
|
|
51
|
+
text: ENTERPRISE_SCOPE,
|
|
52
|
+
license,
|
|
53
|
+
fetchImplementation
|
|
54
|
+
}),
|
|
55
|
+
listInstalledEnterprisePlugins(appDir)
|
|
56
|
+
]);
|
|
57
|
+
if (searchResult.status === 'license-rejected') {
|
|
58
|
+
throw new EnterpriseInstallError(searchResult.message);
|
|
59
|
+
}
|
|
60
|
+
if (searchResult.status === 'unavailable') {
|
|
61
|
+
const registryHost = new URL(ENTERPRISE_REGISTRY_URL).host;
|
|
62
|
+
if (installedPluginNames.length === 0) {
|
|
63
|
+
throw new EnterpriseInstallError(`Could not search ${registryHost}. Try again later, or name the plugin to install.`);
|
|
64
|
+
}
|
|
65
|
+
logger.warn(`Could not search ${registryHost}, so only the installed Enterprise plugins are listed.`);
|
|
66
|
+
}
|
|
67
|
+
const candidatePackageNames = [
|
|
68
|
+
...new Set([
|
|
69
|
+
...searchResult.status === 'available' ? searchResult.packageNames : [],
|
|
70
|
+
...installedPluginNames
|
|
71
|
+
])
|
|
72
|
+
].filter(isEnterprisePackage);
|
|
73
|
+
const lookupFailures = [];
|
|
74
|
+
const discoveredPlugins = await Promise.all(candidatePackageNames.map(async (packageName)=>{
|
|
75
|
+
const [lookup, installedVersion] = await Promise.all([
|
|
76
|
+
fetchPackument({
|
|
77
|
+
packageName,
|
|
78
|
+
license,
|
|
79
|
+
fetchImplementation
|
|
80
|
+
}),
|
|
81
|
+
readAppDependencyVersion(appDir, packageName)
|
|
82
|
+
]);
|
|
83
|
+
if (lookup.status === 'unavailable') {
|
|
84
|
+
// One package the registry fails to describe should not hide the others.
|
|
85
|
+
lookupFailures.push(lookup.message);
|
|
86
|
+
logger.warn(`${packageName} is left out of the list: ${lookup.message}`);
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const entry = describeEnterprisePlugin(packageName, lookup);
|
|
90
|
+
return entry ? {
|
|
91
|
+
entry,
|
|
92
|
+
lookup,
|
|
93
|
+
installedVersion
|
|
94
|
+
} : undefined;
|
|
95
|
+
}));
|
|
96
|
+
// When every lookup fails, the registry itself is the problem, not the license.
|
|
97
|
+
if (candidatePackageNames.length > 0 && lookupFailures.length === candidatePackageNames.length) {
|
|
98
|
+
throw new EnterpriseInstallError(lookupFailures[0]);
|
|
99
|
+
}
|
|
100
|
+
return discoveredPlugins.filter((discoveredPlugin)=>discoveredPlugin !== undefined);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export { declaresStrapiKind, describeEnterprisePlugin, discoverEnterprisePlugins, listInstalledEnterprisePlugins };
|
|
104
|
+
//# sourceMappingURL=discovery.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/discovery.ts"],"sourcesContent":["import type { Logger } from '../../../utils/logger';\nimport { ENTERPRISE_REGISTRY_URL, ENTERPRISE_SCOPE } from './constants';\nimport { EnterpriseInstallError } from './errors';\nimport {\n fetchPackument,\n searchPackageNames,\n type Packument,\n type PackumentLookup,\n} from './registry';\nimport {\n readAppDependencyNames,\n readAppDependencyVersion,\n readInstalledPackageJson,\n} from './versions';\n\nexport interface EnterprisePluginEntry {\n packageName: string;\n displayName: string;\n summary: string;\n kind?: string;\n}\n\nexport interface DiscoveredPlugin {\n entry: EnterprisePluginEntry;\n lookup: Exclude<PackumentLookup, { status: 'unavailable' }>;\n installedVersion?: string;\n}\n\nconst isEnterprisePackage = (packageName: string) => packageName.startsWith(`${ENTERPRISE_SCOPE}/`);\n\nexport const declaresStrapiKind = (strapiKind: unknown): strapiKind is string =>\n typeof strapiKind === 'string' && strapiKind.length > 0;\n\n/**\n * Enterprise plugins the app depends on: listed in its own `package.json`, and installed. Libraries\n * the plugins depend on are left out, as are copies hoisted for another app of the same monorepo.\n */\nexport const listInstalledEnterprisePlugins = async (appDir: string): Promise<string[]> => {\n const installedPluginNames: string[] = [];\n\n for (const packageName of await readAppDependencyNames(appDir)) {\n if (!isEnterprisePackage(packageName)) {\n continue;\n }\n\n const packageJson = await readInstalledPackageJson(appDir, packageName);\n\n if (declaresStrapiKind(packageJson?.strapi?.kind)) {\n installedPluginNames.push(packageName);\n }\n }\n\n return installedPluginNames;\n};\n\nconst findLatestManifest = (packument: Packument) => {\n const latestVersion = packument['dist-tags']?.latest;\n\n return latestVersion ? packument.versions?.[latestVersion] : undefined;\n};\n\nexport const describeEnterprisePlugin = (\n packageName: string,\n lookup: PackumentLookup\n): EnterprisePluginEntry | undefined => {\n if (lookup.status !== 'available') {\n return {\n packageName,\n displayName: packageName,\n summary: '',\n };\n }\n\n const latestManifest = findLatestManifest(lookup.packument);\n const strapiMetadata = latestManifest?.strapi;\n\n if (!strapiMetadata || !declaresStrapiKind(strapiMetadata.kind)) {\n return undefined;\n }\n\n return {\n packageName,\n displayName: strapiMetadata.displayName ?? packageName,\n summary: strapiMetadata.description ?? latestManifest?.description ?? '',\n kind: strapiMetadata.kind,\n };\n};\n\nexport const discoverEnterprisePlugins = async ({\n appDir,\n license,\n logger,\n fetchImplementation,\n}: {\n appDir: string;\n license: string;\n logger: Logger;\n fetchImplementation: typeof fetch;\n}): Promise<DiscoveredPlugin[]> => {\n const [searchResult, installedPluginNames] = await Promise.all([\n searchPackageNames({ text: ENTERPRISE_SCOPE, license, fetchImplementation }),\n listInstalledEnterprisePlugins(appDir),\n ]);\n\n if (searchResult.status === 'license-rejected') {\n throw new EnterpriseInstallError(searchResult.message);\n }\n\n if (searchResult.status === 'unavailable') {\n const registryHost = new URL(ENTERPRISE_REGISTRY_URL).host;\n\n if (installedPluginNames.length === 0) {\n throw new EnterpriseInstallError(\n `Could not search ${registryHost}. Try again later, or name the plugin to install.`\n );\n }\n\n logger.warn(\n `Could not search ${registryHost}, so only the installed Enterprise plugins are listed.`\n );\n }\n\n const candidatePackageNames = [\n ...new Set([\n ...(searchResult.status === 'available' ? searchResult.packageNames : []),\n ...installedPluginNames,\n ]),\n ].filter(isEnterprisePackage);\n\n const lookupFailures: string[] = [];\n\n const discoveredPlugins = await Promise.all(\n candidatePackageNames.map(async (packageName): Promise<DiscoveredPlugin | undefined> => {\n const [lookup, installedVersion] = await Promise.all([\n fetchPackument({ packageName, license, fetchImplementation }),\n readAppDependencyVersion(appDir, packageName),\n ]);\n\n if (lookup.status === 'unavailable') {\n // One package the registry fails to describe should not hide the others.\n lookupFailures.push(lookup.message);\n logger.warn(`${packageName} is left out of the list: ${lookup.message}`);\n\n return undefined;\n }\n\n const entry = describeEnterprisePlugin(packageName, lookup);\n\n return entry ? { entry, lookup, installedVersion } : undefined;\n })\n );\n\n // When every lookup fails, the registry itself is the problem, not the license.\n if (candidatePackageNames.length > 0 && lookupFailures.length === candidatePackageNames.length) {\n throw new EnterpriseInstallError(lookupFailures[0]);\n }\n\n return discoveredPlugins.filter(\n (discoveredPlugin): discoveredPlugin is DiscoveredPlugin => discoveredPlugin !== undefined\n );\n};\n"],"names":["isEnterprisePackage","packageName","startsWith","ENTERPRISE_SCOPE","declaresStrapiKind","strapiKind","length","listInstalledEnterprisePlugins","appDir","installedPluginNames","readAppDependencyNames","packageJson","readInstalledPackageJson","strapi","kind","push","findLatestManifest","packument","latestVersion","latest","versions","undefined","describeEnterprisePlugin","lookup","status","displayName","summary","latestManifest","strapiMetadata","description","discoverEnterprisePlugins","license","logger","fetchImplementation","searchResult","Promise","all","searchPackageNames","text","EnterpriseInstallError","message","registryHost","URL","ENTERPRISE_REGISTRY_URL","host","warn","candidatePackageNames","Set","packageNames","filter","lookupFailures","discoveredPlugins","map","installedVersion","fetchPackument","readAppDependencyVersion","entry","discoveredPlugin"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class EnterpriseInstallError extends Error {
|
|
4
|
+
constructor(message){
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'EnterpriseInstallError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
class PromptCancelledError extends Error {
|
|
10
|
+
constructor(){
|
|
11
|
+
super('The prompt was cancelled.');
|
|
12
|
+
this.name = 'PromptCancelledError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
class PackageManagerError extends Error {
|
|
16
|
+
constructor(exitCode){
|
|
17
|
+
super(`The package manager exited with code ${exitCode}.`);
|
|
18
|
+
this.name = 'PackageManagerError';
|
|
19
|
+
this.exitCode = exitCode;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
exports.EnterpriseInstallError = EnterpriseInstallError;
|
|
24
|
+
exports.PackageManagerError = PackageManagerError;
|
|
25
|
+
exports.PromptCancelledError = PromptCancelledError;
|
|
26
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sources":["../../../../../../src/cli/commands/enterprise/install/errors.ts"],"sourcesContent":["export class EnterpriseInstallError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'EnterpriseInstallError';\n }\n}\n\nexport class PromptCancelledError extends Error {\n constructor() {\n super('The prompt was cancelled.');\n this.name = 'PromptCancelledError';\n }\n}\n\nexport class PackageManagerError extends Error {\n readonly exitCode: number;\n\n constructor(exitCode: number) {\n super(`The package manager exited with code ${exitCode}.`);\n this.name = 'PackageManagerError';\n this.exitCode = exitCode;\n }\n}\n"],"names":["EnterpriseInstallError","Error","message","name","PromptCancelledError","PackageManagerError","exitCode"],"mappings":";;AAAO,MAAMA,sBAAAA,SAA+BC,KAAAA,CAAAA;AAC1C,IAAA,WAAA,CAAYC,OAAe,CAAE;AAC3B,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,wBAAA;AACd,IAAA;AACF;AAEO,MAAMC,oBAAAA,SAA6BH,KAAAA,CAAAA;IACxC,WAAA,EAAc;AACZ,QAAA,KAAK,CAAC,2BAAA,CAAA;QACN,IAAI,CAACE,IAAI,GAAG,sBAAA;AACd,IAAA;AACF;AAEO,MAAME,mBAAAA,SAA4BJ,KAAAA,CAAAA;AAGvC,IAAA,WAAA,CAAYK,QAAgB,CAAE;AAC5B,QAAA,KAAK,CAAC,CAAC,qCAAqC,EAAEA,QAAAA,CAAS,CAAC,CAAC,CAAA;QACzD,IAAI,CAACH,IAAI,GAAG,qBAAA;QACZ,IAAI,CAACG,QAAQ,GAAGA,QAAAA;AAClB,IAAA;AACF;;;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
class EnterpriseInstallError extends Error {
|
|
2
|
+
constructor(message){
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'EnterpriseInstallError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
class PromptCancelledError extends Error {
|
|
8
|
+
constructor(){
|
|
9
|
+
super('The prompt was cancelled.');
|
|
10
|
+
this.name = 'PromptCancelledError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
class PackageManagerError extends Error {
|
|
14
|
+
constructor(exitCode){
|
|
15
|
+
super(`The package manager exited with code ${exitCode}.`);
|
|
16
|
+
this.name = 'PackageManagerError';
|
|
17
|
+
this.exitCode = exitCode;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { EnterpriseInstallError, PackageManagerError, PromptCancelledError };
|
|
22
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/errors.ts"],"sourcesContent":["export class EnterpriseInstallError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'EnterpriseInstallError';\n }\n}\n\nexport class PromptCancelledError extends Error {\n constructor() {\n super('The prompt was cancelled.');\n this.name = 'PromptCancelledError';\n }\n}\n\nexport class PackageManagerError extends Error {\n readonly exitCode: number;\n\n constructor(exitCode: number) {\n super(`The package manager exited with code ${exitCode}.`);\n this.name = 'PackageManagerError';\n this.exitCode = exitCode;\n }\n}\n"],"names":["EnterpriseInstallError","Error","message","name","PromptCancelledError","PackageManagerError","exitCode"],"mappings":"AAAO,MAAMA,sBAAAA,SAA+BC,KAAAA,CAAAA;AAC1C,IAAA,WAAA,CAAYC,OAAe,CAAE;AAC3B,QAAA,KAAK,CAACA,OAAAA,CAAAA;QACN,IAAI,CAACC,IAAI,GAAG,wBAAA;AACd,IAAA;AACF;AAEO,MAAMC,oBAAAA,SAA6BH,KAAAA,CAAAA;IACxC,WAAA,EAAc;AACZ,QAAA,KAAK,CAAC,2BAAA,CAAA;QACN,IAAI,CAACE,IAAI,GAAG,sBAAA;AACd,IAAA;AACF;AAEO,MAAME,mBAAAA,SAA4BJ,KAAAA,CAAAA;AAGvC,IAAA,WAAA,CAAYK,QAAgB,CAAE;AAC5B,QAAA,KAAK,CAAC,CAAC,qCAAqC,EAAEA,QAAAA,CAAS,CAAC,CAAC,CAAA;QACzD,IAAI,CAACH,IAAI,GAAG,qBAAA;QACZ,IAAI,CAACG,QAAQ,GAAGA,QAAAA;AAClB,IAAA;AACF;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var execa = require('execa');
|
|
4
|
+
var errors = require('./errors.js');
|
|
5
|
+
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var execa__default = /*#__PURE__*/_interopDefault(execa);
|
|
9
|
+
|
|
10
|
+
const buildInstallCommand = (packageManager, installSpecs)=>({
|
|
11
|
+
command: packageManager.name,
|
|
12
|
+
args: packageManager.name === 'npm' ? [
|
|
13
|
+
'install',
|
|
14
|
+
'--save-exact',
|
|
15
|
+
...installSpecs
|
|
16
|
+
] : [
|
|
17
|
+
'add',
|
|
18
|
+
...installSpecs
|
|
19
|
+
]
|
|
20
|
+
});
|
|
21
|
+
const installPackages = async ({ appDir, packageManager, installSpecs })=>{
|
|
22
|
+
const { command, args } = buildInstallCommand(packageManager, installSpecs);
|
|
23
|
+
try {
|
|
24
|
+
await execa__default.default(command, args, {
|
|
25
|
+
cwd: appDir,
|
|
26
|
+
stdio: 'inherit'
|
|
27
|
+
});
|
|
28
|
+
} catch (error) {
|
|
29
|
+
const { code, exitCode } = error ?? {};
|
|
30
|
+
if (code === 'ENOENT') {
|
|
31
|
+
throw new errors.EnterpriseInstallError(`Could not run ${command}. Check that it is installed.`);
|
|
32
|
+
}
|
|
33
|
+
throw new errors.PackageManagerError(typeof exitCode === 'number' && exitCode !== 0 ? exitCode : 1);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
exports.buildInstallCommand = buildInstallCommand;
|
|
38
|
+
exports.installPackages = installPackages;
|
|
39
|
+
//# sourceMappingURL=install-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-packages.js","sources":["../../../../../../src/cli/commands/enterprise/install/install-packages.ts"],"sourcesContent":["import execa from 'execa';\n\nimport { EnterpriseInstallError, PackageManagerError } from './errors';\nimport type { DetectedPackageManager } from './package-manager';\n\nexport const buildInstallCommand = (\n packageManager: DetectedPackageManager,\n installSpecs: string[]\n): { command: string; args: string[] } => ({\n command: packageManager.name,\n args:\n packageManager.name === 'npm'\n ? ['install', '--save-exact', ...installSpecs]\n : ['add', ...installSpecs],\n});\n\nexport const installPackages = async ({\n appDir,\n packageManager,\n installSpecs,\n}: {\n appDir: string;\n packageManager: DetectedPackageManager;\n installSpecs: string[];\n}): Promise<void> => {\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n\n try {\n await execa(command, args, { cwd: appDir, stdio: 'inherit' });\n } catch (error) {\n const { code, exitCode } = (error ?? {}) as { code?: string; exitCode?: number };\n\n if (code === 'ENOENT') {\n throw new EnterpriseInstallError(`Could not run ${command}. Check that it is installed.`);\n }\n\n throw new PackageManagerError(typeof exitCode === 'number' && exitCode !== 0 ? exitCode : 1);\n }\n};\n"],"names":["buildInstallCommand","packageManager","installSpecs","command","name","args","installPackages","appDir","execa","cwd","stdio","error","code","exitCode","EnterpriseInstallError","PackageManagerError"],"mappings":";;;;;;;;;AAKO,MAAMA,mBAAAA,GAAsB,CACjCC,cAAAA,EACAC,gBACyC;AACzCC,QAAAA,OAAAA,EAASF,eAAeG,IAAI;QAC5BC,IAAAA,EACEJ,cAAAA,CAAeG,IAAI,KAAK,KAAA,GACpB;AAAC,YAAA,SAAA;AAAW,YAAA,cAAA;AAAmBF,YAAAA,GAAAA;SAAa,GAC5C;AAAC,YAAA,KAAA;AAAUA,YAAAA,GAAAA;AAAa;AAChC,KAAA;AAEO,MAAMI,kBAAkB,OAAO,EACpCC,MAAM,EACNN,cAAc,EACdC,YAAY,EAKb,GAAA;AACC,IAAA,MAAM,EAAEC,OAAO,EAAEE,IAAI,EAAE,GAAGL,oBAAoBC,cAAAA,EAAgBC,YAAAA,CAAAA;IAE9D,IAAI;QACF,MAAMM,sBAAAA,CAAML,SAASE,IAAAA,EAAM;YAAEI,GAAAA,EAAKF,MAAAA;YAAQG,KAAAA,EAAO;AAAU,SAAA,CAAA;AAC7D,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACd,QAAA,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAIF,SAAS,EAAC;AAEtC,QAAA,IAAIC,SAAS,QAAA,EAAU;AACrB,YAAA,MAAM,IAAIE,6BAAAA,CAAuB,CAAC,cAAc,EAAEX,OAAAA,CAAQ,6BAA6B,CAAC,CAAA;AAC1F,QAAA;AAEA,QAAA,MAAM,IAAIY,0BAAAA,CAAoB,OAAOF,aAAa,QAAA,IAAYA,QAAAA,KAAa,IAAIA,QAAAA,GAAW,CAAA,CAAA;AAC5F,IAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import execa from 'execa';
|
|
2
|
+
import { EnterpriseInstallError, PackageManagerError } from './errors.mjs';
|
|
3
|
+
|
|
4
|
+
const buildInstallCommand = (packageManager, installSpecs)=>({
|
|
5
|
+
command: packageManager.name,
|
|
6
|
+
args: packageManager.name === 'npm' ? [
|
|
7
|
+
'install',
|
|
8
|
+
'--save-exact',
|
|
9
|
+
...installSpecs
|
|
10
|
+
] : [
|
|
11
|
+
'add',
|
|
12
|
+
...installSpecs
|
|
13
|
+
]
|
|
14
|
+
});
|
|
15
|
+
const installPackages = async ({ appDir, packageManager, installSpecs })=>{
|
|
16
|
+
const { command, args } = buildInstallCommand(packageManager, installSpecs);
|
|
17
|
+
try {
|
|
18
|
+
await execa(command, args, {
|
|
19
|
+
cwd: appDir,
|
|
20
|
+
stdio: 'inherit'
|
|
21
|
+
});
|
|
22
|
+
} catch (error) {
|
|
23
|
+
const { code, exitCode } = error ?? {};
|
|
24
|
+
if (code === 'ENOENT') {
|
|
25
|
+
throw new EnterpriseInstallError(`Could not run ${command}. Check that it is installed.`);
|
|
26
|
+
}
|
|
27
|
+
throw new PackageManagerError(typeof exitCode === 'number' && exitCode !== 0 ? exitCode : 1);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { buildInstallCommand, installPackages };
|
|
32
|
+
//# sourceMappingURL=install-packages.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-packages.mjs","sources":["../../../../../../src/cli/commands/enterprise/install/install-packages.ts"],"sourcesContent":["import execa from 'execa';\n\nimport { EnterpriseInstallError, PackageManagerError } from './errors';\nimport type { DetectedPackageManager } from './package-manager';\n\nexport const buildInstallCommand = (\n packageManager: DetectedPackageManager,\n installSpecs: string[]\n): { command: string; args: string[] } => ({\n command: packageManager.name,\n args:\n packageManager.name === 'npm'\n ? ['install', '--save-exact', ...installSpecs]\n : ['add', ...installSpecs],\n});\n\nexport const installPackages = async ({\n appDir,\n packageManager,\n installSpecs,\n}: {\n appDir: string;\n packageManager: DetectedPackageManager;\n installSpecs: string[];\n}): Promise<void> => {\n const { command, args } = buildInstallCommand(packageManager, installSpecs);\n\n try {\n await execa(command, args, { cwd: appDir, stdio: 'inherit' });\n } catch (error) {\n const { code, exitCode } = (error ?? {}) as { code?: string; exitCode?: number };\n\n if (code === 'ENOENT') {\n throw new EnterpriseInstallError(`Could not run ${command}. Check that it is installed.`);\n }\n\n throw new PackageManagerError(typeof exitCode === 'number' && exitCode !== 0 ? exitCode : 1);\n }\n};\n"],"names":["buildInstallCommand","packageManager","installSpecs","command","name","args","installPackages","appDir","execa","cwd","stdio","error","code","exitCode","EnterpriseInstallError","PackageManagerError"],"mappings":";;;AAKO,MAAMA,mBAAAA,GAAsB,CACjCC,cAAAA,EACAC,gBACyC;AACzCC,QAAAA,OAAAA,EAASF,eAAeG,IAAI;QAC5BC,IAAAA,EACEJ,cAAAA,CAAeG,IAAI,KAAK,KAAA,GACpB;AAAC,YAAA,SAAA;AAAW,YAAA,cAAA;AAAmBF,YAAAA,GAAAA;SAAa,GAC5C;AAAC,YAAA,KAAA;AAAUA,YAAAA,GAAAA;AAAa;AAChC,KAAA;AAEO,MAAMI,kBAAkB,OAAO,EACpCC,MAAM,EACNN,cAAc,EACdC,YAAY,EAKb,GAAA;AACC,IAAA,MAAM,EAAEC,OAAO,EAAEE,IAAI,EAAE,GAAGL,oBAAoBC,cAAAA,EAAgBC,YAAAA,CAAAA;IAE9D,IAAI;QACF,MAAMM,KAAAA,CAAML,SAASE,IAAAA,EAAM;YAAEI,GAAAA,EAAKF,MAAAA;YAAQG,KAAAA,EAAO;AAAU,SAAA,CAAA;AAC7D,IAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACd,QAAA,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAIF,SAAS,EAAC;AAEtC,QAAA,IAAIC,SAAS,QAAA,EAAU;AACrB,YAAA,MAAM,IAAIE,sBAAAA,CAAuB,CAAC,cAAc,EAAEX,OAAAA,CAAQ,6BAA6B,CAAC,CAAA;AAC1F,QAAA;AAEA,QAAA,MAAM,IAAIY,mBAAAA,CAAoB,OAAOF,aAAa,QAAA,IAAYA,QAAAA,KAAa,IAAIA,QAAAA,GAAW,CAAA,CAAA;AAC5F,IAAA;AACF;;;;"}
|