@@ -19,9 +19,16 @@ import webFrameworks from "../webframeworks/mod.ts";
1919const HANDLE = "john" ;
2020const STARTUP_TIMEOUT = 30000 ; // 30 seconds
2121const CWD = process . cwd ( ) ;
22- const BANNED_WFS : WebFramework [ ] = [ "next" ] ;
23- const BANNED_COMBOS : [ WebFramework , PackageManager ] [ ] = [
24- [ "solidstart" , "deno" ] ,
22+ type LookupCase = [ WebFramework , PackageManager , KvStore , MessageQueue ] ;
23+ type LookupCasePattern = [
24+ WebFramework | "*" ,
25+ PackageManager | "*" ,
26+ KvStore | "*" ,
27+ MessageQueue | "*" ,
28+ ] ;
29+ const BANNED_LOOKUP_CASES : LookupCasePattern [ ] = [
30+ [ "next" , "*" , "*" , "*" ] ,
31+ [ "solidstart" , "deno" , "*" , "*" ] ,
2532] ;
2633
2734/**
@@ -37,7 +44,7 @@ export default async function runServerAndLookupUser(
3744 printErrorMessage `\nNo directories to lookup test.` ;
3845 return ;
3946 }
40- const filtered = filterWebFrameworks ( valid ) ;
47+ const filtered = filterLookupDirs ( valid ) ;
4148
4249 printMessage `\nLookup Test start for ${ String ( filtered . length ) } app(s)!` ;
4350
@@ -52,38 +59,50 @@ export default async function runServerAndLookupUser(
5259 Failed: ${ String ( failCount ) } \n\n` ;
5360}
5461
55- function filterWebFrameworks (
62+ export function parseLookupCase ( dir : string ) : LookupCase {
63+ return dir . split ( sep ) . slice ( - 4 ) as LookupCase ;
64+ }
65+
66+ export function matchesLookupCasePattern (
67+ pattern : LookupCasePattern ,
68+ target : LookupCase ,
69+ ) : boolean {
70+ return pattern . every ( ( value , index ) =>
71+ value === "*" || value === target [ index ]
72+ ) ;
73+ }
74+
75+ export function getBannedLookupFrameworks ( ) : WebFramework [ ] {
76+ return BANNED_LOOKUP_CASES
77+ . filter ( ( [ , pm , kv , mq ] ) => pm === "*" && kv === "*" && mq === "*" )
78+ . map ( ( [ wf ] ) => wf as WebFramework ) ;
79+ }
80+
81+ export function filterLookupDirs (
5682 dirs : string [ ] ,
5783) : string [ ] {
5884 const wfs = new Set < WebFramework > (
59- dirs . map ( ( dir ) => dir . split ( sep ) . slice ( - 4 , - 3 ) [ 0 ] as WebFramework ) ,
85+ dirs . map ( ( dir ) => parseLookupCase ( dir ) [ 0 ] ) ,
6086 ) ;
61- const hasBanned = BANNED_WFS . filter ( ( wf ) => wfs . has ( wf ) ) ;
87+ const hasBanned = getBannedLookupFrameworks ( ) . filter ( ( wf ) => wfs . has ( wf ) ) ;
6288 if ( ! isEmpty ( hasBanned ) ) {
6389 const bannedLabels = hasBanned . map ( ( wf ) => webFrameworks [ wf ] [ "label" ] ) ;
6490 printErrorMessage `\n${
6591 values ( bannedLabels )
6692 } is not supported in lookup test yet.`;
6793 }
68- return dirs . filter ( ( dir ) => {
69- const [ wf , pm ] = dir . split ( sep ) . slice ( - 4 , - 2 ) as [
70- WebFramework ,
71- PackageManager ,
72- ] ;
73- if ( BANNED_WFS . includes ( wf ) ) return false ;
74- if ( BANNED_COMBOS . some ( ( [ bwf , bpm ] ) => bwf === wf && bpm === pm ) ) {
75- return false ;
76- }
77- return true ;
78- } ) ;
94+ return dirs . filter ( ( dir ) =>
95+ ! BANNED_LOOKUP_CASES . some ( ( pattern ) =>
96+ matchesLookupCasePattern ( pattern , parseLookupCase ( dir ) )
97+ )
98+ ) ;
7999}
80100
81101/**
82102 * Run the dev server and test with lookup command.
83103 */
84104async function testApp ( dir : string ) : Promise < boolean > {
85- const [ wf , pm , kv , mq ] = dir . split ( sep ) . slice ( - 4 ) as //
86- [ WebFramework , PackageManager , KvStore , MessageQueue ] ;
105+ const [ wf , pm , kv , mq ] = parseLookupCase ( dir ) ;
87106
88107 printMessage ` Testing ${ values ( [ wf , pm , kv , mq ] ) } ...` ;
89108
@@ -98,7 +117,7 @@ async function testApp(dir: string): Promise<boolean> {
98117 } !`;
99118 if ( ! result ) {
100119 printMessage ` Check out these files for more details:
101- ${ join ( dir , "out.txt" ) } and
120+ ${ join ( dir , "out.txt" ) } and
102121 ${ join ( dir , "err.txt" ) } \n` ;
103122 }
104123 printMessage `\n` ;
0 commit comments