1- import type { Repo , Tab } from "$lib/types" ;
1+ import type { RepoInfo , Category } from "$lib/types" ;
22
3- const repos : Record < Tab , { name : string ; repos : Repo [ ] } > = {
3+ const repos : Record < Category , { name : string ; repos : RepoInfo [ ] } > = {
44 svelte : {
55 name : "Svelte" ,
66 repos : [
77 {
88 repoName : "svelte" ,
9- versionFromTag : tag => tag . substring ( tag . indexOf ( "@" ) + 1 )
9+ metadataFromTag : splitByLastAt
1010 }
1111 ]
1212 } ,
@@ -16,7 +16,7 @@ const repos: Record<Tab, { name: string; repos: Repo[] }> = {
1616 {
1717 repoName : "kit" ,
1818 dataFilter : ( { tag_name } ) => tag_name . includes ( "/kit@" ) ,
19- versionFromTag : tag => tag . substring ( tag . lastIndexOf ( "@" ) + 1 )
19+ metadataFromTag : splitByLastAt
2020 }
2121 ]
2222 } ,
@@ -26,72 +26,111 @@ const repos: Record<Tab, { name: string; repos: Repo[] }> = {
2626 {
2727 repoName : "kit" ,
2828 dataFilter : ( { tag_name } ) => ! tag_name . includes ( "/kit@" ) ,
29- versionFromTag : tag => tag . substring ( tag . lastIndexOf ( "@" ) + 1 )
29+ metadataFromTag : splitByLastAt
3030 } ,
3131 {
3232 repoName : "cli" ,
33- versionFromTag : tag => tag . substring ( tag . lastIndexOf ( "@" ) + 1 )
33+ metadataFromTag : splitByLastAt
3434 } ,
3535 {
3636 repoName : "vite-plugin-svelte" ,
37- versionFromTag : tag => tag . substring ( tag . lastIndexOf ( "@" ) + 1 )
37+ metadataFromTag : splitByLastAt
3838 } ,
3939 {
4040 repoName : "eslint-plugin-svelte" ,
41- versionFromTag : tag =>
42- tag . includes ( "@" ) ? tag . substring ( tag . lastIndexOf ( "@" ) + 1 ) : tag . replace ( / ^ v / , "" )
41+ metadataFromTag ( tag ) {
42+ if ( tag . includes ( "@" ) ) {
43+ return splitByLastAt ( tag ) ;
44+ }
45+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
46+ }
4347 } ,
4448 {
4549 repoName : "eslint-config" ,
46- versionFromTag : tag => tag . replace ( / ^ v / , "" )
50+ metadataFromTag ( tag ) {
51+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
52+ }
4753 } ,
4854 {
4955 repoName : "svelte-eslint-parser" ,
50- versionFromTag : tag => tag . replace ( / ^ v / , "" )
56+ metadataFromTag ( tag ) {
57+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
58+ }
5159 } ,
5260 {
5361 repoName : "language-tools" ,
54- versionFromTag : tag => tag . substring ( tag . lastIndexOf ( "-" ) + 1 )
62+ metadataFromTag : tag => {
63+ const lastIndex = tag . lastIndexOf ( "-" ) ;
64+ return [ tag . substring ( 0 , lastIndex ) , tag . substring ( lastIndex + 1 ) ] ;
65+ }
5566 } ,
5667 {
5768 repoName : "acorn-typescript" ,
58- versionFromTag : tag => tag . replace ( / ^ v / , "" )
69+ metadataFromTag ( tag ) {
70+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
71+ }
5972 } ,
6073 {
6174 repoName : "svelte-devtools" ,
62- versionFromTag : tag => tag . replace ( / ^ v / , "" )
75+ metadataFromTag ( tag ) {
76+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
77+ }
6378 } ,
6479 {
6580 changesMode : "changelog" ,
6681 repoName : "svelte-preprocess" ,
67- versionFromTag : tag => tag . replace ( / ^ v / , "" ) ,
82+ metadataFromTag ( tag ) {
83+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
84+ } ,
6885 changelogContentsReplacer : file => file . replace ( / ^ # \[ / gm, "## [" )
6986 } ,
7087 {
7188 changesMode : "changelog" ,
7289 repoName : "rollup-plugin-svelte" ,
73- versionFromTag : tag => tag . replace ( / ^ v / , "" )
90+ metadataFromTag ( tag ) {
91+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
92+ }
7493 } ,
7594 {
7695 changesMode : "changelog" ,
7796 repoName : "prettier-plugin-svelte" ,
78- versionFromTag : tag => tag . replace ( / ^ v / , "" )
97+ metadataFromTag ( tag ) {
98+ return [ this . repoName , tag . replace ( / ^ v / , "" ) ] ;
99+ }
79100 }
80101 ]
81102 }
82103} ;
83104
105+ /**
106+ * A convenience helper to split a string into two parts
107+ * from its last occurrence of the `@` symbol.
108+ *
109+ * @param s the input string
110+ * @returns an array of length 2 with the two split elements
111+ */
112+ function splitByLastAt ( s : string ) : [ string , string ] {
113+ const lastIndex = s . lastIndexOf ( "@" ) ;
114+ return [ s . substring ( 0 , lastIndex ) , s . substring ( lastIndex + 1 ) ] ;
115+ }
116+
84117type Entries < T > = {
85118 [ K in keyof T ] : [ K , T [ K ] ] ;
86119} [ keyof T ] [ ] ;
87120
88121/**
89- * Returns repositories as entries for ease of use
90- * and iterating .
122+ * Get all repositories as entries for ease of use
123+ * and iteration .
91124 *
92125 * @example
93- * const [id, { name, repos }] = getRepositories() ;
126+ * const [id, { name, repos }] = repositories ;
94127 */
95- export function getRepositories ( ) {
96- return Object . entries ( repos ) as unknown as Entries < typeof repos > ;
97- }
128+ export const repositories = Object . entries ( repos ) as unknown as Entries < typeof repos > ;
129+
130+ /**
131+ * Get all a record of all GitHub repositories
132+ * from the collection.
133+ */
134+ export const githubRepos = {
135+ sveltejs : [ ...new Set ( repositories . flatMap ( ( [ , { repos } ] ) => repos . map ( r => r . repoName ) ) ) ]
136+ } ;
0 commit comments