"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . validatePackageName = validatePackageName ;
exports . default = void 0 ;
function _assert ( ) {
const data = _interopRequireDefault ( require ( "assert" ) ) ;
_assert = function ( ) {
return data ;
} ;
return data ;
}
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
// Reasoning behind this validation:
// https://github.com/parcel-bundler/parcel/issues/3397#issuecomment-521353931
function validatePackageName ( pkg , pluginType , key ) {
// $FlowFixMe
if ( ! pkg ) {
return ;
}
( 0 , _assert ( ) . default ) ( typeof pkg === 'string' , ` " ${ key } " must be a string ` ) ;
if ( pkg . startsWith ( '@parcel' ) ) {
( 0 , _assert ( ) . default ) ( pkg . replace ( /^@parcel\// , '' ) . startsWith ( ` ${ pluginType } - ` ) , ` Official parcel ${ pluginType } packages must be named according to "@parcel/ ${ pluginType } -{name}" ` ) ;
} else if ( pkg . startsWith ( '@' ) ) {
let [ scope , name ] = pkg . split ( '/' ) ;
( 0 , _assert ( ) . default ) ( name . startsWith ( ` parcel- ${ pluginType } - ` ) || name === ` parcel- ${ pluginType } ` , ` Scoped parcel ${ pluginType } packages must be named according to " ${ scope } /parcel- ${ pluginType } [-{name}]" ` ) ;
} else {
( 0 , _assert ( ) . default ) ( pkg . startsWith ( ` parcel- ${ pluginType } - ` ) , ` Parcel ${ pluginType } packages must be named according to "parcel- ${ pluginType } -{name}" ` ) ;
}
}
const validatePluginName = ( pluginType , key ) => {
return val => {
// allow plugin spread...
if ( val === '...' ) return ;
try {
validatePackageName ( val , pluginType , key ) ;
} catch ( e ) {
return e . message ;
}
} ;
} ;
const validateExtends = val => {
// allow relative paths...
if ( val . startsWith ( '.' ) ) return ;
try {
validatePackageName ( val , 'config' , 'extends' ) ;
} catch ( e ) {
return e . message ;
}
} ;
const pipelineSchema = ( pluginType , key ) => {
return {
type : 'array' ,
items : {
type : 'string' ,
_ _validate : validatePluginName ( pluginType , key )
}
} ;
} ;
const mapPipelineSchema = ( pluginType , key ) => {
return {
type : 'object' ,
properties : { } ,
additionalProperties : pipelineSchema ( pluginType , key )
} ;
} ;
const mapStringSchema = ( pluginType , key ) => {
return {
type : 'object' ,
properties : { } ,
additionalProperties : {
type : 'string' ,
_ _validate : validatePluginName ( pluginType , key )
}
} ;
} ;
var _default = {
type : 'object' ,
properties : {
extends : {
oneOf : [ {
type : 'string' ,
_ _validate : validateExtends
} , {
type : 'array' ,
items : {
type : 'string' ,
_ _validate : validateExtends
}
} ]
} ,
bundler : {
type : 'string' ,
_ _validate : validatePluginName ( 'bundler' , 'bundler' )
} ,
resolvers : pipelineSchema ( 'resolver' , 'resolvers' ) ,
transformers : mapPipelineSchema ( 'transformer' , 'transformers' ) ,
validators : mapPipelineSchema ( 'validator' , 'validators' ) ,
namers : pipelineSchema ( 'namer' , 'namers' ) ,
packagers : mapStringSchema ( 'packager' , 'packagers' ) ,
optimizers : mapPipelineSchema ( 'optimizer' , 'optimizers' ) ,
compressors : mapPipelineSchema ( 'compressor' , 'compressors' ) ,
reporters : pipelineSchema ( 'reporter' , 'reporters' ) ,
runtimes : pipelineSchema ( 'runtime' , 'runtimes' ) ,
filePath : {
type : 'string'
} ,
resolveFrom : {
type : 'string'
}
} ,
additionalProperties : false
} ;
exports . default = _default ;