@@ -220,12 +220,75 @@ internal static async Task<UniversalPackageMetadata> ReadManifestAsync(Stream me
220
220
return JsonConvert . DeserializeObject < UniversalPackageMetadata > ( text ) ;
221
221
}
222
222
223
+ internal static string ValidateManifest ( UniversalPackageMetadata info )
224
+ {
225
+ if ( info . Group != null )
226
+ {
227
+ if ( info . Group . Length > 250 )
228
+ {
229
+ return "group must be between 0 and 250 characters long." ;
230
+ }
231
+
232
+ var invalid = info . Group . Where ( c => ( c < '0' || c > '9' ) && ( c < 'a' || c > 'z' ) && ( c < 'A' || c > 'Z' ) && c != '-' && c != '.' && c != '/' && c != '_' ) . Distinct ( ) . ToArray ( ) ;
233
+ if ( invalid . Length == 1 )
234
+ {
235
+ return "group contains invalid character: '" + invalid [ 0 ] + "'" ;
236
+ }
237
+ else if ( invalid . Length > 1 )
238
+ {
239
+ return "group contains invalid characters: '" + string . Join ( "', '" , invalid ) + "'" ;
240
+ }
241
+
242
+ if ( info . Group . StartsWith ( "/" ) || info . Group . EndsWith ( "/" ) )
243
+ {
244
+ return "group must not start or end with a slash." ;
245
+ }
246
+ }
247
+
248
+ {
249
+ if ( string . IsNullOrEmpty ( info . Name ) )
250
+ {
251
+ return "missing name." ;
252
+ }
253
+ if ( info . Name . Length > 50 )
254
+ {
255
+ return "name must be between 1 and 50 characters long." ;
256
+ }
257
+
258
+ var invalid = info . Name . Where ( c => ( c < '0' || c > '9' ) && ( c < 'a' || c > 'z' ) && ( c < 'A' || c > 'Z' ) && c != '-' && c != '.' && c != '_' ) . Distinct ( ) . ToArray ( ) ;
259
+ if ( invalid . Length == 1 )
260
+ {
261
+ return "name contains invalid character: '" + invalid [ 0 ] + "'" ;
262
+ }
263
+ else if ( invalid . Length > 1 )
264
+ {
265
+ return "name contains invalid characters: '" + string . Join ( "', '" , invalid ) + "'" ;
266
+ }
267
+ }
268
+
269
+ if ( info . Version == null )
270
+ {
271
+ return "missing or invalid version." ;
272
+ }
273
+
274
+ if ( info . Title != null && info . Title . Length > 50 )
275
+ {
276
+ return "title must be between 0 and 50 characters long." ;
277
+ }
278
+
279
+ return null ;
280
+ }
281
+
223
282
internal static void PrintManifest ( UniversalPackageMetadata info )
224
283
{
225
284
if ( ! string . IsNullOrEmpty ( info . Group ) )
226
- Console . WriteLine ( $ "Package: { info . Group } :{ info . Name } ") ;
285
+ {
286
+ Console . WriteLine ( $ "Package: { info . Group } /{ info . Name } ") ;
287
+ }
227
288
else
289
+ {
228
290
Console . WriteLine ( $ "Package: { info . Name } ") ;
291
+ }
229
292
230
293
Console . WriteLine ( $ "Version: { info . Version } ") ;
231
294
}
0 commit comments