@@ -12,6 +12,7 @@ use std::sync::Arc;
12
12
use base64:: prelude:: BASE64_STANDARD ;
13
13
use base64:: Engine ;
14
14
use deno_ast:: ModuleSpecifier ;
15
+ use deno_config:: deno_json:: ConfigFile ;
15
16
use deno_config:: workspace:: JsrPackageConfig ;
16
17
use deno_config:: workspace:: PackageJsonDepResolution ;
17
18
use deno_config:: workspace:: Workspace ;
@@ -95,8 +96,9 @@ pub async fn publish(
95
96
match cli_options. start_dir . maybe_deno_json ( ) {
96
97
Some ( deno_json) => {
97
98
debug_assert ! ( !deno_json. is_package( ) ) ;
99
+ error_missing_exports_field ( deno_json) ?;
98
100
bail ! (
99
- "Missing 'name', 'version' and 'exports' field in '{}'." ,
101
+ "Missing 'name' or 'exports' field in '{}'." ,
100
102
deno_json. specifier
101
103
) ;
102
104
}
@@ -416,9 +418,6 @@ impl PublishPreparer {
416
418
graph : Arc < deno_graph:: ModuleGraph > ,
417
419
diagnostics_collector : & PublishDiagnosticsCollector ,
418
420
) -> Result < Rc < PreparedPublishPackage > , AnyError > {
419
- static SUGGESTED_ENTRYPOINTS : [ & str ; 4 ] =
420
- [ "mod.ts" , "mod.js" , "index.ts" , "index.js" ] ;
421
-
422
421
let deno_json = & package. config_file ;
423
422
let config_path = deno_json. specifier . to_file_path ( ) . unwrap ( ) ;
424
423
let root_dir = config_path. parent ( ) . unwrap ( ) . to_path_buf ( ) ;
@@ -428,34 +427,6 @@ impl PublishPreparer {
428
427
deno_json. specifier
429
428
)
430
429
} ) ?;
431
- if deno_json. json . exports . is_none ( ) {
432
- let mut suggested_entrypoint = None ;
433
-
434
- for entrypoint in SUGGESTED_ENTRYPOINTS {
435
- if root_dir. join ( entrypoint) . exists ( ) {
436
- suggested_entrypoint = Some ( entrypoint) ;
437
- break ;
438
- }
439
- }
440
-
441
- let exports_content = format ! (
442
- r#"{{
443
- "name": "{}",
444
- "version": "{}",
445
- "exports": "{}"
446
- }}"# ,
447
- package. name,
448
- version,
449
- suggested_entrypoint. unwrap_or( "<path_to_entrypoint>" )
450
- ) ;
451
-
452
- bail ! (
453
- "You did not specify an entrypoint to \" {}\" package in {}. Add `exports` mapping in the configuration file, eg:\n {}" ,
454
- package. name,
455
- deno_json. specifier,
456
- exports_content
457
- ) ;
458
- }
459
430
let Some ( name_no_at) = package. name . strip_prefix ( '@' ) else {
460
431
bail ! ( "Invalid package name, use '@<scope_name>/<package_name> format" ) ;
461
432
} ;
@@ -1287,6 +1258,36 @@ fn has_license_file<'a>(
1287
1258
} )
1288
1259
}
1289
1260
1261
+ fn error_missing_exports_field ( deno_json : & ConfigFile ) -> Result < ( ) , AnyError > {
1262
+ static SUGGESTED_ENTRYPOINTS : [ & str ; 4 ] =
1263
+ [ "mod.ts" , "mod.js" , "index.ts" , "index.js" ] ;
1264
+ let mut suggested_entrypoint = None ;
1265
+
1266
+ for entrypoint in SUGGESTED_ENTRYPOINTS {
1267
+ if deno_json. dir_path ( ) . join ( entrypoint) . exists ( ) {
1268
+ suggested_entrypoint = Some ( entrypoint) ;
1269
+ break ;
1270
+ }
1271
+ }
1272
+
1273
+ let exports_content = format ! (
1274
+ r#"{{
1275
+ "name": "{}",
1276
+ "version": "{}",
1277
+ "exports": "{}"
1278
+ }}"# ,
1279
+ deno_json. json. name. as_deref( ) . unwrap_or( "@scope/name" ) ,
1280
+ deno_json. json. name. as_deref( ) . unwrap_or( "0.0.0" ) ,
1281
+ suggested_entrypoint. unwrap_or( "<path_to_entrypoint>" )
1282
+ ) ;
1283
+
1284
+ bail ! (
1285
+ "You did not specify an entrypoint in {}. Add `exports` mapping in the configuration file, eg:\n {}" ,
1286
+ deno_json. specifier,
1287
+ exports_content
1288
+ ) ;
1289
+ }
1290
+
1290
1291
#[ allow( clippy:: print_stderr) ]
1291
1292
fn ring_bell ( ) {
1292
1293
// ASCII code for the bell character.
0 commit comments