Improve plugin package.json error message
This commit is contained in:
parent
8d5e65349d
commit
9157d5981f
|
@ -84,17 +84,65 @@ function isThemeNameValid (name: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function isPackageJSONValid (packageJSON: PluginPackageJson, pluginType: PluginType) {
|
function isPackageJSONValid (packageJSON: PluginPackageJson, pluginType: PluginType) {
|
||||||
return isNpmPluginNameValid(packageJSON.name) &&
|
let result = true
|
||||||
isPluginDescriptionValid(packageJSON.description) &&
|
const badFields: string[] = []
|
||||||
isPluginEngineValid(packageJSON.engine) &&
|
|
||||||
isPluginHomepage(packageJSON.homepage) &&
|
if (!isNpmPluginNameValid(packageJSON.name)) {
|
||||||
exists(packageJSON.author) &&
|
result = false
|
||||||
isPluginBugs(packageJSON.bugs) &&
|
badFields.push('name')
|
||||||
(pluginType === PluginType.THEME || isSafePath(packageJSON.library)) &&
|
}
|
||||||
areStaticDirectoriesValid(packageJSON.staticDirs) &&
|
|
||||||
areCSSPathsValid(packageJSON.css) &&
|
if (!isPluginDescriptionValid(packageJSON.description)) {
|
||||||
areClientScriptsValid(packageJSON.clientScripts) &&
|
result = false
|
||||||
areTranslationPathsValid(packageJSON.translations)
|
badFields.push('description')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPluginEngineValid(packageJSON.engine)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('engine')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPluginHomepage(packageJSON.homepage)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('homepage')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exists(packageJSON.author)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('author')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPluginBugs(packageJSON.bugs)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('bugs')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pluginType === PluginType.PLUGIN && !isSafePath(packageJSON.library)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('library')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areStaticDirectoriesValid(packageJSON.staticDirs)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('staticDirs')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areCSSPathsValid(packageJSON.css)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('css')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areClientScriptsValid(packageJSON.clientScripts)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('clientScripts')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!areTranslationPathsValid(packageJSON.translations)) {
|
||||||
|
result = false
|
||||||
|
badFields.push('translations')
|
||||||
|
}
|
||||||
|
|
||||||
|
return { result, badFields }
|
||||||
}
|
}
|
||||||
|
|
||||||
function isLibraryCodeValid (library: any) {
|
function isLibraryCodeValid (library: any) {
|
||||||
|
|
|
@ -222,9 +222,8 @@ export class PluginManager implements ServerHook {
|
||||||
const pluginName = PluginModel.normalizePluginName(npmName)
|
const pluginName = PluginModel.normalizePluginName(npmName)
|
||||||
|
|
||||||
const packageJSON = await this.getPackageJSON(pluginName, pluginType)
|
const packageJSON = await this.getPackageJSON(pluginName, pluginType)
|
||||||
if (!isPackageJSONValid(packageJSON, pluginType)) {
|
|
||||||
throw new Error('PackageJSON is invalid.')
|
this.sanitizeAndCheckPackageJSONOrThrow(packageJSON, pluginType);
|
||||||
}
|
|
||||||
|
|
||||||
[ plugin ] = await PluginModel.upsert({
|
[ plugin ] = await PluginModel.upsert({
|
||||||
name: pluginName,
|
name: pluginName,
|
||||||
|
@ -301,9 +300,7 @@ export class PluginManager implements ServerHook {
|
||||||
const packageJSON = await this.getPackageJSON(plugin.name, plugin.type)
|
const packageJSON = await this.getPackageJSON(plugin.name, plugin.type)
|
||||||
const pluginPath = this.getPluginPath(plugin.name, plugin.type)
|
const pluginPath = this.getPluginPath(plugin.name, plugin.type)
|
||||||
|
|
||||||
if (!isPackageJSONValid(packageJSON, plugin.type)) {
|
this.sanitizeAndCheckPackageJSONOrThrow(packageJSON, plugin.type)
|
||||||
throw new Error('Package.JSON is invalid.')
|
|
||||||
}
|
|
||||||
|
|
||||||
let library: PluginLibrary
|
let library: PluginLibrary
|
||||||
if (plugin.type === PluginType.PLUGIN) {
|
if (plugin.type === PluginType.PLUGIN) {
|
||||||
|
@ -598,6 +595,21 @@ export class PluginManager implements ServerHook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private sanitizeAndCheckPackageJSONOrThrow (packageJSON: PluginPackageJson, pluginType: PluginType) {
|
||||||
|
if (!packageJSON.staticDirs) packageJSON.staticDirs = {}
|
||||||
|
if (!packageJSON.css) packageJSON.css = []
|
||||||
|
if (!packageJSON.clientScripts) packageJSON.clientScripts = []
|
||||||
|
if (!packageJSON.translations) packageJSON.translations = {}
|
||||||
|
|
||||||
|
const { result: packageJSONValid, badFields } = isPackageJSONValid(packageJSON, pluginType)
|
||||||
|
if (!packageJSONValid) {
|
||||||
|
const formattedFields = badFields.map(f => `"${f}"`)
|
||||||
|
.join(', ')
|
||||||
|
|
||||||
|
throw new Error(`PackageJSON is invalid (invalid fields: ${formattedFields}).`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static get Instance () {
|
static get Instance () {
|
||||||
return this.instance || (this.instance = new this())
|
return this.instance || (this.instance = new this())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue