77 asyncFlatten ,
88 bareImportRE ,
99 combineSourcemaps ,
10+ extractHostnamesFromCerts ,
1011 extractHostnamesFromSubjectAltName ,
1112 flattenId ,
1213 generateCodeFrame ,
@@ -910,6 +911,60 @@ describe('getServerUrlByHost', () => {
910911 }
911912} )
912913
914+ describe ( 'extractHostnamesFromCerts' , ( ) => {
915+ // Test certificate containing domains: 'localhost', 'foo.localhost', 'vite.vite.localhost',
916+ const createWorkingCert = `-----BEGIN CERTIFICATE-----
917+ MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
918+ BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
919+ EzARBgNVBAcTCkJsYWNrc2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRl
920+ c3QwHhcNMjUwMTMwMDQxNTI1WhcNMjUwMzAxMDQxNTI1WjBpMRQwEgYDVQQDEwtl
921+ eGFtcGxlLm9yZzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYD
922+ VQQHEwpCbGFja3NidXJnMQ0wCwYDVQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MIIB
923+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNPlCqTmUZ7/F7GyFWDopqZ6
924+ w19Y7/98B10JEeFGTAQIj/RP2UgZNcTABQDUvtkF7y+bOeoVJW7Zz8ozQYhRaDp8
925+ CN2gXMcYeTUku/pKLXyCzHHVrOPAXTeU7sMRgLvPCrrJtx5OjvndW+O/PhohPRi3
926+ iEpPvpM8gi7MVRGhnWVSx0/Ynx5c0+/vqyBTzrM2OX7Ufg8Nv7LaTXpCAnmIQp+f
927+ Sqq7HZ7t6Y7laS4RApityvlnFHZ4f2cEibAKv/vXLED7bgAlGb8R1viPRdMtAPuI
928+ MYvHBgGFjyX1fmq6Mz3aqlAscJILtbQlwty1oYyaENE0lq8+nZXQ+t6I+CIVLQID
929+ AQABo4GZMIGWMAsGA1UdDwQEAwIC9DAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYB
930+ BQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDCDBUBgNVHREETTBLgglsb2NhbGhvc3SC
931+ DWZvby5sb2NhbGhvc3SCECoudml0ZS5sb2NhbGhvc3SCBVs6OjFdhwR/AAABhxD+
932+ gAAAAAAAAAAAAAAAAAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi302qLCgxWsUalgc2
933+ olFxVKob1xCciS8yUVX6HX0vza0WJ7oGW6qZsBbQtfgDwB/dHv7rwsfpjRWvFhmq
934+ gEUrewa1h0TIC+PPTYYz4M0LOwcLIWZLZr4am1eI7YP9NDgRdhfAfM4hw20vjf2a
935+ kYLKyRTC5+3/ly5opMq+CGLQ8/gnFxhP3ho8JYrRnqLeh3KCTGen3kmbAhD4IOJ9
936+ lxMwFPTTWLFFjxbXjXmt5cEiL2mpcq13VCF2HmheCen37CyYIkrwK9IfLhBd5QQh
937+ WEIBLwjKCAscrtyayXWp6zUTmgvb8PQf//3Mh2DiEngAi3WI/nL+8Y0RkwbvxBar
938+ X2JN
939+ -----END CERTIFICATE-----
940+ ` . trim ( ) as any
941+
942+ test ( 'should extract hostnames from certificate' , ( ) => {
943+ const httpsOptions = { cert : [ createWorkingCert ] } as any
944+ const result = extractHostnamesFromCerts ( httpsOptions . cert )
945+
946+ expect ( result ) . toStrictEqual ( [
947+ 'localhost' ,
948+ 'foo.localhost' ,
949+ 'vite.vite.localhost' ,
950+ ] )
951+ } )
952+
953+ test ( 'should extract hostnames from multiple certificates' , ( ) => {
954+ const httpsOptions = { cert : [ createWorkingCert , createWorkingCert ] } as any
955+ const result = extractHostnamesFromCerts ( httpsOptions . cert )
956+
957+ expect ( result ) . toStrictEqual ( [
958+ 'localhost' ,
959+ 'foo.localhost' ,
960+ 'vite.vite.localhost' ,
961+ 'localhost' ,
962+ 'foo.localhost' ,
963+ 'vite.vite.localhost' ,
964+ ] )
965+ } )
966+ } )
967+
913968describe ( 'resolveServerUrls' , ( ) => {
914969 const createMockServer = (
915970 family : 'IPv4' | 'IPv6' = 'IPv4' ,
@@ -925,7 +980,7 @@ describe('resolveServerUrls', () => {
925980 config : { rawBase : '/' } as any ,
926981 } )
927982
928- // Test certificate containing domains: localhost, foo.localhost, * .vite.localhost
983+ // Test certificate containing domains: ' localhost', ' foo.localhost', 'vite .vite.localhost',
929984 const createWorkingCert = `-----BEGIN CERTIFICATE-----
930985MIID7zCCAtegAwIBAgIJS9D2rIN7tA8mMA0GCSqGSIb3DQEBCwUAMGkxFDASBgNV
931986BAMTC2V4YW1wbGUub3JnMQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWEx
0 commit comments