@@ -99,6 +99,75 @@ describe("validatePackageJson", () => {
9999 it ( "works with old-version packages" , ( ) => {
100100 expect ( Array . isArray ( validatePackageJson ( "hapi" , { ...pkgJson , version : "16.6.9999" } , [ ] ) ) ) . toBeFalsy ( ) ;
101101 } ) ;
102+ it ( "requires dependency versions to be valid semver ranges, dist-tags, or 'workspace:.'" , ( ) => {
103+ expect (
104+ validatePackageJson (
105+ "hapi" ,
106+ { ...pkgJson , dependencies : { ...( pkgJson . dependencies as object ) , joi : "not a range" } } ,
107+ [ ] ,
108+ ) ,
109+ ) . toEqual ( [
110+ `hapi's package.json has bad "dependencies": version for joi ("not a range") must be a valid semver range, dist-tag, or "workspace:.".` ,
111+ ] ) ;
112+ } ) ;
113+ it . each ( [
114+ [ "file:./local.tgz" ] ,
115+ [ "./local.tgz" ] ,
116+ [ "local.tgz" ] ,
117+ [ "foo.tar.gz" ] ,
118+ [ "git+https://example.com/x.git" ] ,
119+ [ "git+ssh://[email protected] :x/y.git" ] , 120+ 121+ [ "https://example.com/x.tgz" ] ,
122+ [ "http://example.com/x.tgz" ] ,
123+ [ "user/repo" ] ,
124+ [ "user/repo#branch" ] ,
125+ [ "npm:other@^1" ] ,
126+ [ "~/local" ] ,
127+ [ "../local" ] ,
128+ ] ) ( "rejects non-registry dependency spec %p" , ( bad ) => {
129+ const result = validatePackageJson (
130+ "hapi" ,
131+ { ...pkgJson , dependencies : { ...( pkgJson . dependencies as object ) , joi : bad } } ,
132+ [ ] ,
133+ ) ;
134+ expect ( Array . isArray ( result ) ) . toBe ( true ) ;
135+ expect ( result as string [ ] ) . toContainEqual (
136+ `hapi's package.json has bad "dependencies": version for joi (${ JSON . stringify (
137+ bad ,
138+ ) } ) must be a valid semver range, dist-tag, or "workspace:.".`,
139+ ) ;
140+ } ) ;
141+ it . each ( [ [ "latest" ] , [ "next" ] , [ "beta" ] , [ "rc" ] , [ "canary" ] , [ "experimental" ] , [ "nightly" ] ] ) (
142+ "allows dist-tag %p as a dependency version" ,
143+ ( tag ) => {
144+ expect (
145+ Array . isArray (
146+ validatePackageJson (
147+ "hapi" ,
148+ { ...pkgJson , dependencies : { ...( pkgJson . dependencies as object ) , joi : tag } } ,
149+ [ ] ,
150+ ) ,
151+ ) ,
152+ ) . toBeFalsy ( ) ;
153+ } ,
154+ ) ;
155+ it ( "allows 'workspace:.' as a dependency version" , ( ) => {
156+ expect (
157+ Array . isArray (
158+ validatePackageJson (
159+ "hapi" ,
160+ { ...pkgJson , dependencies : { ...( pkgJson . dependencies as object ) , joi : "workspace:." } } ,
161+ [ ] ,
162+ ) ,
163+ ) ,
164+ ) . toBeFalsy ( ) ;
165+ } ) ;
166+ it ( "requires dependency versions to be strings" , ( ) => {
167+ expect ( validatePackageJson ( "hapi" , { ...pkgJson , peerDependencies : { foo : 5 } } , [ ] ) ) . toEqual ( [
168+ `hapi's package.json has bad "peerDependencies": version for foo should be a string.` ,
169+ ] ) ;
170+ } ) ;
102171} ) ;
103172
104173describe ( "makeTypesVersionsForPackageJson" , ( ) => {
0 commit comments