@@ -20,23 +20,34 @@ export { UnityReleaseEntitlement, UnityReleaseStream };
2020/**
2121 * Retrieves the Unity changeset for a specific version.
2222 * @param version - The Unity version string (e.g., "2020.1.14f1").
23+ * @param db - Optional database URL or true to use the default database.
2324 * @returns A Promise that resolves to the UnityChangeset object.
2425 * @throws Error if the version is not found.
2526 */
2627export async function getUnityChangeset (
2728 version : string ,
29+ db ?: string | true ,
2830) : Promise < UnityChangeset > {
2931 const sanitizedVersion = sanitizeVersion ( version ) ;
3032
3133 let changesets : UnityChangeset [ ] ;
32- try {
33- changesets = await getUnityReleases (
34- sanitizedVersion ,
35- searchModeToStreams ( SearchMode . All ) ,
36- [ UnityReleaseEntitlement . XLTS ] ,
37- ) ;
38- } catch {
39- changesets = await getAllChangesetsFromDb ( ) ;
34+
35+ // Database mode.
36+ if ( db ) {
37+ const dbUrl = db === true ? UNITY_CHANGESETS_DB_URL : db ;
38+ changesets = await getAllChangesetsFromDb ( dbUrl ) ;
39+ } else {
40+ // GraphQL mode.
41+ try {
42+ changesets = await getUnityReleases (
43+ sanitizedVersion ,
44+ searchModeToStreams ( SearchMode . All ) ,
45+ [ UnityReleaseEntitlement . XLTS ] ,
46+ ) ;
47+ } catch {
48+ // Fallback to default database mode.
49+ changesets = await getAllChangesetsFromDb ( UNITY_CHANGESETS_DB_URL ) ;
50+ }
4051 }
4152
4253 if ( ! changesets || ! Array . isArray ( changesets ) ) {
@@ -133,6 +144,7 @@ export enum FormatMode {
133144 * @param groupMode - The group mode to use.
134145 * @param outputMode - The output mode for the results.
135146 * @param formatMode - The format mode for the output.
147+ * @param db - Optional database URL or true to use the default database.
136148 * @returns A Promise that resolves to a formatted string of the results.
137149 */
138150export function listChangesets (
@@ -141,8 +153,9 @@ export function listChangesets(
141153 groupMode : GroupMode ,
142154 outputMode : OutputMode ,
143155 formatMode : FormatMode ,
156+ db ?: string | true ,
144157) : Promise < string > {
145- return searchChangesets ( searchMode )
158+ return searchChangesets ( searchMode , db )
146159 . then ( ( results ) => filterChangesets ( results , filterOptions ) )
147160 . then ( ( results ) =>
148161 results . sort ( ( a , b ) => b . versionNumber - a . versionNumber )
@@ -181,17 +194,28 @@ export function listChangesets(
181194/**
182195 * Searches for Unity changesets based on the specified search mode.
183196 * @param searchMode - The search mode to use.
197+ * @param db - Optional database URL or true to use the default database.
184198 * @returns A Promise that resolves to an array of UnityChangeset objects.
185199 * @throws Error if the search mode is not supported.
186200 */
187201export async function searchChangesets (
188202 searchMode : SearchMode ,
203+ db ?: string | true ,
189204) : Promise < UnityChangeset [ ] > {
190205 const streams = searchModeToStreams ( searchMode ) ;
206+
207+ // Database mode.
208+ if ( db ) {
209+ const dbUrl = db === true ? UNITY_CHANGESETS_DB_URL : db ;
210+ return searchChangesetsFromDb ( streams , dbUrl ) ;
211+ }
212+
191213 try {
214+ // GraphQL mode.
192215 return await getUnityReleases ( "." , streams , [ UnityReleaseEntitlement . XLTS ] ) ;
193216 } catch {
194- return await searchChangesetsFromDb ( streams ) ;
217+ // Fallback to default database mode.
218+ return await searchChangesetsFromDb ( streams , UNITY_CHANGESETS_DB_URL ) ;
195219 }
196220}
197221
@@ -271,37 +295,42 @@ export function groupChangesets(
271295
272296/**
273297 * Retrieves all Unity changesets from the database.
298+ * @param db - Database URL. If not specified, use the default database.
274299 * @returns A Promise that resolves to an array of all UnityChangeset objects from the database.
275300 * @throws Error if the database cannot be fetched or is invalid.
276301 */
277- export function getAllChangesetsFromDb ( ) : Promise < UnityChangeset [ ] > {
278- return fetch ( UNITY_CHANGESETS_DB_URL )
302+ export function getAllChangesetsFromDb (
303+ db : string = UNITY_CHANGESETS_DB_URL ,
304+ ) : Promise < UnityChangeset [ ] > {
305+ return fetch ( db )
279306 . then ( ( res ) => {
280307 if ( ! res . ok ) {
281308 throw Error (
282309 `The Unity changeset database could not be fetched: ${ res . status } ${ res . statusText } ` ,
283310 ) ;
284311 }
285312
286- return res . json ( ) as Promise < UnityChangeset [ ] > ;
313+ return res . json ( ) as Promise < any [ ] > ;
287314 } )
288315 . then ( ( data ) => {
289316 if ( ! Array . isArray ( data ) ) {
290317 throw new Error ( "Invalid changeset database format: expected array" ) ;
291318 }
292- return data ;
319+ return data . map ( ( item ) => new UnityChangeset ( item . version , item . changeset , item . stream , item . entitlements ) ) ;
293320 } ) ;
294321}
295322
296323/**
297324 * Searches for Unity changesets from the database based on the specified search mode.
298325 * @param streams - The array of release streams to filter by.
326+ * @param db - Database URL. If not specified, use the default database.
299327 * @returns A Promise that resolves to an array of UnityChangeset objects from the database.
300328 */
301329export function searchChangesetsFromDb (
302330 streams : UnityReleaseStream [ ] ,
331+ db : string = UNITY_CHANGESETS_DB_URL ,
303332) : Promise < UnityChangeset [ ] > {
304- return getAllChangesetsFromDb ( )
333+ return getAllChangesetsFromDb ( db )
305334 . then ( ( changesets : UnityChangeset [ ] ) => {
306335 if ( ! changesets || ! Array . isArray ( changesets ) ) return [ ] ;
307336 if ( changesets . length == 0 ) return [ ] ;
0 commit comments