API Reference

Below contains an overview of the specifications for the Bundle Builder API, including TypeScript definitions & detailed descriptions.

BundleDocument Interface

The specification for a single document within the configured collection:

  type 
  
 BundleDocument 
  
 = 
  
 { 
  
 // A list of document IDs to serve in the bundle. 
  
 docs? 
 : 
  
 Array<string> 
 ; 
  
 // A map containing individual named queries and their definitions. 
  
 queries? 
 : 
  
 Map<string 
 , 
  
 QueryDefinition 
 []>; 
  
 // A map of parameters and their definitions, which can be provided to a query definition. 
  
 params? 
 : 
  
 Map<string 
 , 
  
 ParamDefinition 
> ; 
  
 // Specifies how long to keep the bundle in the client's cache, in seconds. If not defined, client-side cache is disabled. 
  
 clientCache? 
 : 
  
 string 
 ; 
  
 // Only used in combination with Firebase Hosting. Specifies how long to keep the bundle in Firebase Hosting CDN cache, in seconds. 
  
 serverCache 
 : 
  
 string 
 ; 
  
 // Specifies how long (in seconds) to keep the bundle in a Cloud Storage bucket, in seconds. If not defined, Cloud Storage bucket is not accessed. 
  
 fileCache? 
 : 
  
 string 
 ; 
  
 // If a 'File Cache' is specified, bundles created before this timestamp will not be file cached. 
  
 notBefore? 
 : 
  
 Timestamp 
 ; 
 }; 
 

ParamDefinition Interface

The specification of a single parameter defined in a BundleDocument .

  type 
  
 ParamDefinition 
  
 = 
  
 { 
  
 // Whether this parameter is required. If not provided as a query string, an error will be thrown. 
  
 required 
 : 
  
 boolean 
 ; 
  
 // The type of value which will be parsed, defaults to 'string'. 
  
 type 
 ?: 
  
 | 
  
 "string" 
  
 | 
  
 "integer" 
  
 | 
  
 "float" 
  
 | 
  
 "boolean" 
  
 | 
  
 "string-array" 
  
 | 
  
 "integer-array" 
  
 | 
  
 "float-array" 
 ; 
 }; 
 

For example, given the follow parameter:

  params 
 : 
  
 { 
  
 name 
 : 
  
 { 
  
 required 
 : 
  
 true 
 , 
  
 type 
 : 
  
 'string' 
 , 
  
 } 
 } 
 

When making a request to the bundle HTTP endpoint, the parameter can be provided via a query parameter, e.g. ?name=david . The parameter can be used within a QueryDefinition (see below) value ( $name ) to dynamically create bundles.

QueryDefinition Interface

A query definition is used to create named queries on the bundle. Each object within the queries map will create a new named query, using the object key as the name. Each query must specify a collection, and optionally a list of query conditions to perform.

  type 
  
 QueryDefinition 
  
 = 
  
 { 
  
 // The collection to perform the query on. 
  
 collection 
 : 
  
 string 
 ; 
  
 // An optional list of conditions to perform on the specified collection. 
  
 conditions? 
 : 
  
 QueryCondition 
 []; 
 }; 
 

The conditions parameter can contain an array of QueryCondition interfaces. Each item in the array must only include a single condition.

  type 
  
 QueryCondition 
  
 = 
  
 { 
  
 // Performs a `where` filter on the collection on a given FieldPath, operator and value. 
  
 where 
 ?: 
  
 [ 
  
 string 
 , 
  
 ( 
  
 | 
  
 "<" 
  
 | 
  
 "<=" 
  
 | 
  
 "==" 
  
 | 
  
 ">=" 
  
 | 
  
 ">" 
  
 | 
  
 "!=" 
  
 | 
  
 "array-contains" 
  
 | 
  
 "in" 
  
 | 
  
 "not-in" 
  
 | 
  
 "array-contains-any" 
  
 ), 
  
 any 
  
 ]; 
  
 orderBy 
 ?: 
  
 [ 
 string 
 , 
  
 ( 
 "asc" 
  
 | 
  
 "desc" 
 ) 
 ? 
 ]; 
  
 limit? 
 : 
  
 number 
 ; 
  
 limitToLast? 
 : 
  
 number 
 ; 
  
 offset? 
 : 
  
 number 
 ; 
  
 startAt? 
 : 
  
 string 
 ; 
  
 startAfter? 
 : 
  
 string 
 ; 
  
 endAt? 
 : 
  
 string 
 ; 
  
 endBefore? 
 : 
  
 string 
 ; 
 }; 
 

For example, to create a query named "products" on a products collection with a where and limit condition, the data structure output should match the following:

  queries 
 : 
  
 { 
  
 products 
 : 
  
 { 
  
 collection 
 : 
  
 'products' 
 , 
  
 conditions 
 : 
  
 [ 
  
 { 
  
 where 
 : 
  
 [ 
 'type' 
 , 
  
 '==' 
 , 
  
 'featured' 
 ] 
  
 }, 
  
 { 
  
 limit 
 : 
  
 10 
  
 }, 
  
 ], 
  
 } 
 } 
 

When providing array values to in , not-in , or array-contains-any filters, you must provide a comma separated value as the value as nested array values are not supported in Firestore. For example:

  { 
  
 where 
 : 
  
 [ 
 'category' 
 , 
  
 'in' 
 , 
  
 'womens,shorts' 
 ] 
  
 }, 
  
 // ['womens', 'shorts'] 
 

Any number value will be parsed as a number, however if a string number value is required it should be wrapped in parentheses:

  { 
  
 where 
 : 
  
 [ 
 'price' 
 , 
  
 'in' 
 , 
  
 '1,2.5' 
 ] 
  
 }, 
  
 // [1, 2.5] 
 { 
  
 where 
 : 
  
 [ 
 'price' 
 , 
  
 'in' 
 , 
  
 '"1","2.5"' 
 ] 
  
 }, 
  
 // ['1', '2.5'] 
 

Conditions can also be used alongside parameters. For example, if a parameter type is defined (see above), this can be provided to a condition value to provide dynamic data bundles via the $ syntax:

  // ?type=featured 
  
 conditions 
 : 
  
 [ 
  
 { 
  
 where 
 : 
  
 [ 
 'type' 
 , 
  
 '==' 
 , 
  
 '$type' 
 ] 
  
 }, 
 
Create a Mobile Website
View Site in Mobile | Classic
Share by: