mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
fix(publish): warn about missing license file (#24677)
Part of https://github.com/denoland/deno/issues/24676 , but just a warning for now.
This commit is contained in:
parent
92abdb7669
commit
6960637b5c
52 changed files with 123 additions and 2 deletions
|
@ -119,6 +119,10 @@ pub enum PublishDiagnostic {
|
||||||
range: SourceRange,
|
range: SourceRange,
|
||||||
},
|
},
|
||||||
SyntaxError(ParseDiagnostic),
|
SyntaxError(ParseDiagnostic),
|
||||||
|
MissingLicense {
|
||||||
|
/// This only exists because diagnostics require a location.
|
||||||
|
expected_path: PathBuf,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PublishDiagnostic {
|
impl PublishDiagnostic {
|
||||||
|
@ -168,6 +172,8 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
MissingConstraint { .. } => DiagnosticLevel::Error,
|
MissingConstraint { .. } => DiagnosticLevel::Error,
|
||||||
BannedTripleSlashDirectives { .. } => DiagnosticLevel::Error,
|
BannedTripleSlashDirectives { .. } => DiagnosticLevel::Error,
|
||||||
SyntaxError { .. } => DiagnosticLevel::Error,
|
SyntaxError { .. } => DiagnosticLevel::Error,
|
||||||
|
// todo(#24676): make this an error in Deno 1.46
|
||||||
|
MissingLicense { .. } => DiagnosticLevel::Warning,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +193,7 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
Cow::Borrowed("banned-triple-slash-directives")
|
Cow::Borrowed("banned-triple-slash-directives")
|
||||||
}
|
}
|
||||||
SyntaxError { .. } => Cow::Borrowed("syntax-error"),
|
SyntaxError { .. } => Cow::Borrowed("syntax-error"),
|
||||||
|
MissingLicense { .. } => Cow::Borrowed("missing-license"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,6 +215,7 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
MissingConstraint { specifier, .. } => Cow::Owned(format!("specifier '{}' is missing a version constraint", specifier)),
|
MissingConstraint { specifier, .. } => Cow::Owned(format!("specifier '{}' is missing a version constraint", specifier)),
|
||||||
BannedTripleSlashDirectives { .. } => Cow::Borrowed("triple slash directives that modify globals are not allowed"),
|
BannedTripleSlashDirectives { .. } => Cow::Borrowed("triple slash directives that modify globals are not allowed"),
|
||||||
SyntaxError(diagnostic) => diagnostic.message(),
|
SyntaxError(diagnostic) => diagnostic.message(),
|
||||||
|
MissingLicense { .. } => Cow::Borrowed("missing license file"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,6 +283,9 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
text_info: Cow::Borrowed(text_info),
|
text_info: Cow::Borrowed(text_info),
|
||||||
},
|
},
|
||||||
SyntaxError(diagnostic) => diagnostic.location(),
|
SyntaxError(diagnostic) => diagnostic.location(),
|
||||||
|
MissingLicense { expected_path } => DiagnosticLocation::Path {
|
||||||
|
path: expected_path.clone(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,6 +366,7 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
}],
|
}],
|
||||||
}),
|
}),
|
||||||
SyntaxError(diagnostic) => diagnostic.snippet(),
|
SyntaxError(diagnostic) => diagnostic.snippet(),
|
||||||
|
MissingLicense { .. } => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,6 +400,9 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
Cow::Borrowed("remove the triple slash directive"),
|
Cow::Borrowed("remove the triple slash directive"),
|
||||||
),
|
),
|
||||||
SyntaxError(diagnostic) => diagnostic.hint(),
|
SyntaxError(diagnostic) => diagnostic.hint(),
|
||||||
|
MissingLicense { .. } => Some(
|
||||||
|
Cow::Borrowed("add a LICENSE file to the package and ensure it is not ignored from being published"),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,7 +439,8 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
| UnsupportedJsxTsx { .. }
|
| UnsupportedJsxTsx { .. }
|
||||||
| ExcludedModule { .. }
|
| ExcludedModule { .. }
|
||||||
| MissingConstraint { .. }
|
| MissingConstraint { .. }
|
||||||
| BannedTripleSlashDirectives { .. } => None,
|
| BannedTripleSlashDirectives { .. }
|
||||||
|
| MissingLicense { .. } => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,6 +490,7 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
Cow::Borrowed("or set their 'lib' compiler option appropriately"),
|
Cow::Borrowed("or set their 'lib' compiler option appropriately"),
|
||||||
]),
|
]),
|
||||||
SyntaxError(diagnostic) => diagnostic.info(),
|
SyntaxError(diagnostic) => diagnostic.info(),
|
||||||
|
MissingLicense { .. } => Cow::Borrowed(&[]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,6 +524,9 @@ impl Diagnostic for PublishDiagnostic {
|
||||||
"https://jsr.io/go/banned-triple-slash-directives",
|
"https://jsr.io/go/banned-triple-slash-directives",
|
||||||
)),
|
)),
|
||||||
SyntaxError(diagnostic) => diagnostic.docs_url(),
|
SyntaxError(diagnostic) => diagnostic.docs_url(),
|
||||||
|
MissingLicense { .. } => {
|
||||||
|
Some(Cow::Borrowed("https://jsr.io/go/missing-license"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -462,6 +462,13 @@ impl PublishPreparer {
|
||||||
&publish_paths,
|
&publish_paths,
|
||||||
&diagnostics_collector,
|
&diagnostics_collector,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if !has_license_file(publish_paths.iter().map(|p| &p.specifier)) {
|
||||||
|
diagnostics_collector.push(PublishDiagnostic::MissingLicense {
|
||||||
|
expected_path: root_dir.join("LICENSE"),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
tar::create_gzipped_tarball(
|
tar::create_gzipped_tarball(
|
||||||
&publish_paths,
|
&publish_paths,
|
||||||
LazyGraphSourceParser::new(&source_cache, &graph),
|
LazyGraphSourceParser::new(&source_cache, &graph),
|
||||||
|
@ -1187,6 +1194,36 @@ async fn check_if_git_repo_dirty(cwd: &Path) -> Option<String> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn has_license_file<'a>(
|
||||||
|
mut specifiers: impl Iterator<Item = &'a ModuleSpecifier>,
|
||||||
|
) -> bool {
|
||||||
|
let allowed_license_files = {
|
||||||
|
let files = HashSet::from([
|
||||||
|
"license",
|
||||||
|
"license.md",
|
||||||
|
"license.txt",
|
||||||
|
"licence",
|
||||||
|
"licence.md",
|
||||||
|
"licence.txt",
|
||||||
|
]);
|
||||||
|
if cfg!(debug_assertions) {
|
||||||
|
for file in &files {
|
||||||
|
assert_eq!(*file, file.to_lowercase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
files
|
||||||
|
};
|
||||||
|
specifiers.any(|specifier| {
|
||||||
|
specifier
|
||||||
|
.path()
|
||||||
|
.rsplit_once('/')
|
||||||
|
.map(|(_, file)| {
|
||||||
|
allowed_license_files.contains(file.to_lowercase().as_str())
|
||||||
|
})
|
||||||
|
.unwrap_or(false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(clippy::print_stderr)]
|
#[allow(clippy::print_stderr)]
|
||||||
fn ring_bell() {
|
fn ring_bell() {
|
||||||
// ASCII code for the bell character.
|
// ASCII code for the bell character.
|
||||||
|
@ -1195,6 +1232,10 @@ fn ring_bell() {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use deno_ast::ModuleSpecifier;
|
||||||
|
|
||||||
|
use crate::tools::registry::has_license_file;
|
||||||
|
|
||||||
use super::tar::PublishableTarball;
|
use super::tar::PublishableTarball;
|
||||||
use super::tar::PublishableTarballFile;
|
use super::tar::PublishableTarballFile;
|
||||||
use super::verify_version_manifest;
|
use super::verify_version_manifest;
|
||||||
|
@ -1296,4 +1337,31 @@ mod tests {
|
||||||
|
|
||||||
assert!(verify_version_manifest(meta_bytes, &package).is_err());
|
assert!(verify_version_manifest(meta_bytes, &package).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_has_license_files() {
|
||||||
|
fn has_license_file_str(expected: &[&str]) -> bool {
|
||||||
|
let specifiers = expected
|
||||||
|
.iter()
|
||||||
|
.map(|s| ModuleSpecifier::parse(s).unwrap())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
has_license_file(specifiers.iter())
|
||||||
|
}
|
||||||
|
|
||||||
|
assert!(has_license_file_str(&["file:///LICENSE"]));
|
||||||
|
assert!(has_license_file_str(&["file:///license"]));
|
||||||
|
assert!(has_license_file_str(&["file:///LICENSE.txt"]));
|
||||||
|
assert!(has_license_file_str(&["file:///LICENSE.md"]));
|
||||||
|
assert!(has_license_file_str(&["file:///LICENCE"]));
|
||||||
|
assert!(has_license_file_str(&["file:///LICENCE.txt"]));
|
||||||
|
assert!(has_license_file_str(&["file:///LICENCE.md"]));
|
||||||
|
assert!(has_license_file_str(&[
|
||||||
|
"file:///other",
|
||||||
|
"file:///test/LICENCE.md"
|
||||||
|
]),);
|
||||||
|
assert!(!has_license_file_str(&[
|
||||||
|
"file:///other",
|
||||||
|
"file:///test/tLICENSE"
|
||||||
|
]),);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,6 +398,7 @@ fn allow_dirty() {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
temp_dir.join("main.ts").write("");
|
temp_dir.join("main.ts").write("");
|
||||||
|
temp_dir.join("LICENSE").write("");
|
||||||
|
|
||||||
let cmd = Command::new("git")
|
let cmd = Command::new("git")
|
||||||
.arg("init")
|
.arg("init")
|
||||||
|
@ -418,6 +419,7 @@ Checking for slow types in the public API...
|
||||||
|
|
||||||
Uncommitted changes:
|
Uncommitted changes:
|
||||||
|
|
||||||
|
?? LICENSE
|
||||||
?? deno.json
|
?? deno.json
|
||||||
?? main.ts
|
?? main.ts
|
||||||
|
|
||||||
|
|
0
tests/specs/jsr/excluded_export_module/LICENSE
Normal file
0
tests/specs/jsr/excluded_export_module/LICENSE
Normal file
0
tests/specs/jsr/no_unused_params/LICENSE
Normal file
0
tests/specs/jsr/no_unused_params/LICENSE
Normal file
|
@ -2,6 +2,7 @@ Check file:///[WILDLINE]/main.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Check file:///[WILDLINE]/main.ts
|
Check file:///[WILDLINE]/main.ts
|
||||||
Simulating publish of @scope/package@0.0.0 with files:
|
Simulating publish of @scope/package@0.0.0 with files:
|
||||||
|
file:///[WILDLINE]/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/__test__.jsonc ([WILDLINE])
|
file:///[WILDLINE]/__test__.jsonc ([WILDLINE])
|
||||||
file:///[WILDLINE]/deno.json ([WILDLINE])
|
file:///[WILDLINE]/deno.json ([WILDLINE])
|
||||||
file:///[WILDLINE]/main.out ([WILDLINE])
|
file:///[WILDLINE]/main.out ([WILDLINE])
|
||||||
|
|
0
tests/specs/publish/allow_slow_types/LICENSE
Normal file
0
tests/specs/publish/allow_slow_types/LICENSE
Normal file
0
tests/specs/publish/bare_node_builtins/LICENSE
Normal file
0
tests/specs/publish/bare_node_builtins/LICENSE
Normal file
|
@ -6,6 +6,7 @@ Check file:///[WILDLINE]/mod.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Check file:///[WILDLINE]/mod.ts
|
Check file:///[WILDLINE]/mod.ts
|
||||||
Simulating publish of @foo/bar@1.0.0 with files:
|
Simulating publish of @foo/bar@1.0.0 with files:
|
||||||
|
file:///[WILDLINE]/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/deno.json (87B)
|
file:///[WILDLINE]/deno.json (87B)
|
||||||
file:///[WILDLINE]/mod.ts (121B)
|
file:///[WILDLINE]/mod.ts (121B)
|
||||||
Warning Aborting due to --dry-run
|
Warning Aborting due to --dry-run
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Simulating publish of @foo/bar@1.0.0 with files:
|
Simulating publish of @foo/bar@1.0.0 with files:
|
||||||
|
file:///[WILDLINE]/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/deno.json (87B)
|
file:///[WILDLINE]/deno.json (87B)
|
||||||
file:///[WILDLINE]/mod.ts (121B)
|
file:///[WILDLINE]/mod.ts (121B)
|
||||||
Warning Aborting due to --dry-run
|
Warning Aborting due to --dry-run
|
||||||
|
|
0
tests/specs/publish/byonm_dep/LICENSE
Normal file
0
tests/specs/publish/byonm_dep/LICENSE
Normal file
|
@ -5,7 +5,7 @@
|
||||||
"publish": {
|
"publish": {
|
||||||
// this was previously causing issues because it would cause
|
// this was previously causing issues because it would cause
|
||||||
// external modules in the node_modules directory to be ignored
|
// external modules in the node_modules directory to be ignored
|
||||||
"include": ["mod.ts"]
|
"include": ["LICENSE", "mod.ts"]
|
||||||
},
|
},
|
||||||
"unstable": ["byonm", "sloppy-imports"]
|
"unstable": ["byonm", "sloppy-imports"]
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ Check file:///[WILDLINE]/mod.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Check file:///[WILDLINE]/mod.ts
|
Check file:///[WILDLINE]/mod.ts
|
||||||
Simulating publish of @scope/package@0.0.0 with files:
|
Simulating publish of @scope/package@0.0.0 with files:
|
||||||
|
file:///[WILDLINE]/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/deno.jsonc ([WILDLINE])
|
file:///[WILDLINE]/deno.jsonc ([WILDLINE])
|
||||||
file:///[WILDLINE]/mod.ts ([WILDLINE])
|
file:///[WILDLINE]/mod.ts ([WILDLINE])
|
||||||
Warning Aborting due to --dry-run
|
Warning Aborting due to --dry-run
|
||||||
|
|
0
tests/specs/publish/byonm_with_package_json/LICENSE
Normal file
0
tests/specs/publish/byonm_with_package_json/LICENSE
Normal file
0
tests/specs/publish/config_file_jsonc/LICENSE
Normal file
0
tests/specs/publish/config_file_jsonc/LICENSE
Normal file
0
tests/specs/publish/config_flag/successful/LICENSE
Normal file
0
tests/specs/publish/config_flag/successful/LICENSE
Normal file
0
tests/specs/publish/dry_run/LICENSE
Normal file
0
tests/specs/publish/dry_run/LICENSE
Normal file
0
tests/specs/publish/dry_run_gitignored/LICENSE
Normal file
0
tests/specs/publish/dry_run_gitignored/LICENSE
Normal file
0
tests/specs/publish/excluded_deno_jsonc/LICENSE
Normal file
0
tests/specs/publish/excluded_deno_jsonc/LICENSE
Normal file
|
@ -1,6 +1,7 @@
|
||||||
Check file:///[WILDLINE]mod.ts
|
Check file:///[WILDLINE]mod.ts
|
||||||
Checking for slow types in the public API...
|
Checking for slow types in the public API...
|
||||||
Simulating publish of @scope/pkg@1.0.0 with files:
|
Simulating publish of @scope/pkg@1.0.0 with files:
|
||||||
|
file:///[WILDLINE]/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/deno.jsonc (74B)
|
file:///[WILDLINE]/deno.jsonc (74B)
|
||||||
file:///[WILDLINE]/mod.ts (22B)
|
file:///[WILDLINE]/mod.ts (22B)
|
||||||
Warning Aborting due to --dry-run
|
Warning Aborting due to --dry-run
|
||||||
|
|
0
tests/specs/publish/has_slow_types/LICENSE
Normal file
0
tests/specs/publish/has_slow_types/LICENSE
Normal file
0
tests/specs/publish/invalid_import/LICENSE
Normal file
0
tests/specs/publish/invalid_import/LICENSE
Normal file
0
tests/specs/publish/invalid_path/LICENSE
Normal file
0
tests/specs/publish/invalid_path/LICENSE
Normal file
0
tests/specs/publish/javascript_decl_file/LICENSE
Normal file
0
tests/specs/publish/javascript_decl_file/LICENSE
Normal file
0
tests/specs/publish/javascript_missing_decl_file/LICENSE
Normal file
0
tests/specs/publish/javascript_missing_decl_file/LICENSE
Normal file
0
tests/specs/publish/jsr_jsonc/LICENSE
Normal file
0
tests/specs/publish/jsr_jsonc/LICENSE
Normal file
0
tests/specs/publish/missing_constraint/LICENSE
Normal file
0
tests/specs/publish/missing_constraint/LICENSE
Normal file
4
tests/specs/publish/missing_license/__test__.jsonc
Normal file
4
tests/specs/publish/missing_license/__test__.jsonc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"args": "publish --token 'sadfasdf'",
|
||||||
|
"output": "mod.out"
|
||||||
|
}
|
5
tests/specs/publish/missing_license/deno.json
Normal file
5
tests/specs/publish/missing_license/deno.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"name": "@scope/pkg",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"exports": "./mod.ts"
|
||||||
|
}
|
12
tests/specs/publish/missing_license/mod.out
Normal file
12
tests/specs/publish/missing_license/mod.out
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Check file:///[WILDLINE]/missing_license/mod.ts
|
||||||
|
Checking for slow types in the public API...
|
||||||
|
Check file:///[WILDLINE]/missing_license/mod.ts
|
||||||
|
warning[missing-license]: missing license file
|
||||||
|
--> [WILDLINE]LICENSE
|
||||||
|
= hint: add a LICENSE file to the package and ensure it is not ignored from being published
|
||||||
|
|
||||||
|
docs: https://jsr.io/go/missing-license
|
||||||
|
|
||||||
|
Publishing @scope/pkg@1.0.0 ...
|
||||||
|
Successfully published @scope/pkg@1.0.0
|
||||||
|
Visit http://127.0.0.1:4250/@scope/pkg@1.0.0 for details
|
3
tests/specs/publish/missing_license/mod.ts
Normal file
3
tests/specs/publish/missing_license/mod.ts
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
export function add(a: number, b: number): number {
|
||||||
|
return a + b;
|
||||||
|
}
|
0
tests/specs/publish/no_check/LICENSE
Normal file
0
tests/specs/publish/no_check/LICENSE
Normal file
0
tests/specs/publish/no_token/LICENSE
Normal file
0
tests/specs/publish/no_token/LICENSE
Normal file
0
tests/specs/publish/node_specifier/LICENSE
Normal file
0
tests/specs/publish/node_specifier/LICENSE
Normal file
0
tests/specs/publish/npm_workspace/add/LICENSE
Normal file
0
tests/specs/publish/npm_workspace/add/LICENSE
Normal file
|
@ -6,10 +6,12 @@ Check file:///[WILDLINE]/npm_workspace/add/index.ts
|
||||||
Check file:///[WILDLINE]/npm_workspace/subtract/index.ts
|
Check file:///[WILDLINE]/npm_workspace/subtract/index.ts
|
||||||
[UNORDERED_START]
|
[UNORDERED_START]
|
||||||
Simulating publish of @scope/add@1.0.0 with files:
|
Simulating publish of @scope/add@1.0.0 with files:
|
||||||
|
file:///[WILDLINE]/npm_workspace/add/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/add/index.ts ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/add/index.ts ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/add/jsr.json ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/add/jsr.json ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/add/package.json ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/add/package.json ([WILDLINE])
|
||||||
Simulating publish of @scope/subtract@1.0.0 with files:
|
Simulating publish of @scope/subtract@1.0.0 with files:
|
||||||
|
file:///[WILDLINE]/npm_workspace/subtract/LICENSE ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/subtract/index.ts ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/subtract/index.ts ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/subtract/jsr.json ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/subtract/jsr.json ([WILDLINE])
|
||||||
file:///[WILDLINE]/npm_workspace/subtract/package.json ([WILDLINE])
|
file:///[WILDLINE]/npm_workspace/subtract/package.json ([WILDLINE])
|
||||||
|
|
0
tests/specs/publish/npm_workspace/subtract/LICENSE
Normal file
0
tests/specs/publish/npm_workspace/subtract/LICENSE
Normal file
0
tests/specs/publish/package_json/LICENSE
Normal file
0
tests/specs/publish/package_json/LICENSE
Normal file
0
tests/specs/publish/prefer_fast_check_graph/LICENSE
Normal file
0
tests/specs/publish/prefer_fast_check_graph/LICENSE
Normal file
0
tests/specs/publish/sloppy_imports/LICENSE
Normal file
0
tests/specs/publish/sloppy_imports/LICENSE
Normal file
0
tests/specs/publish/successful/LICENSE
Normal file
0
tests/specs/publish/successful/LICENSE
Normal file
0
tests/specs/publish/symlink/LICENSE
Normal file
0
tests/specs/publish/symlink/LICENSE
Normal file
0
tests/specs/publish/unanalyzable_dynamic_import/LICENSE
Normal file
0
tests/specs/publish/unanalyzable_dynamic_import/LICENSE
Normal file
0
tests/specs/publish/unsupported_jsx_tsx/LICENSE
Normal file
0
tests/specs/publish/unsupported_jsx_tsx/LICENSE
Normal file
0
tests/specs/publish/workspace/bar/LICENSE
Normal file
0
tests/specs/publish/workspace/bar/LICENSE
Normal file
0
tests/specs/publish/workspace/foo/LICENSE
Normal file
0
tests/specs/publish/workspace/foo/LICENSE
Normal file
0
tests/testdata/publish/successful/LICENSE
vendored
Normal file
0
tests/testdata/publish/successful/LICENSE
vendored
Normal file
Loading…
Reference in a new issue