@blinkk/root-cms 2.0.0-rc.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,9 @@
1
1
  import { Request, Plugin, RootConfig } from '@blinkk/root';
2
2
  import { App } from 'firebase-admin/app';
3
- import { Firestore, Timestamp, Query, WriteBatch } from 'firebase-admin/firestore';
3
+ import { Firestore, WriteBatch, Timestamp, Query } from 'firebase-admin/firestore';
4
+
5
+ /** Supported Root AI models. Defaults to 'vertexai/gemini-2.5-flash'. */
6
+ type RootAiModel = 'vertexai/gemini-2.5-flash' | 'vertexai/gemini-2.0-pro' | 'vertexai/gemini-1.5-flash' | 'vertexai/gemini-1.5-pro';
4
7
 
5
8
  interface CMSUser {
6
9
  email: string;
@@ -8,8 +11,8 @@ interface CMSUser {
8
11
  interface CMSAIConfig {
9
12
  /** Custom API endpoint for chat prompts. */
10
13
  endpoint?: string;
11
- /** Gen AI model to use. Defaults to 'gemini-1.5-flash'. */
12
- model?: 'gemini-1.5-flash' | 'gemini-1.5-pro';
14
+ /** Gen AI model to use. */
15
+ model?: RootAiModel;
13
16
  }
14
17
  interface CMSSidebarTool {
15
18
  /** URL for the sidebar icon image. */
@@ -100,6 +103,10 @@ type CMSPluginOptions = {
100
103
  */
101
104
  tools?: Record<string, CMSSidebarTool>;
102
105
  };
106
+ /**
107
+ * URL for a custom favicon used by the CMS UI.
108
+ */
109
+ favicon?: string;
103
110
  /**
104
111
  * Callback when an action occurs.
105
112
  */
@@ -108,7 +115,14 @@ type CMSPluginOptions = {
108
115
  * Experimental config options. Note: these are subject to change at any time.
109
116
  */
110
117
  experiments?: {
118
+ /**
119
+ * Enables the Root CMS AI page.
120
+ */
111
121
  ai?: boolean | CMSAIConfig;
122
+ /**
123
+ * Enables the v2 `TranslationsManager`.
124
+ */
125
+ v2TranslationsManager?: boolean;
112
126
  };
113
127
  /**
114
128
  * Adjust console output verbosity. Default is `'info'`.
@@ -127,7 +141,191 @@ type CMSPlugin = Plugin & {
127
141
  getFirestore: () => Firestore;
128
142
  };
129
143
  declare function cmsPlugin(options: CMSPluginOptions): CMSPlugin;
130
- declare function getCmsPlugin(rootConfig: RootConfig): CMSPlugin;
144
+
145
+ type Locale = string;
146
+ type SourceString = string;
147
+ type TranslatedString = string;
148
+ type TranslationsDocMode = 'draft' | 'published';
149
+ interface TranslationsLocaleDocHashMap {
150
+ /**
151
+ * A hash map of a source string's hash fingerprint to the source string and
152
+ * translated string.
153
+ */
154
+ [hash: string]: TranslationsLocaleDocEntry;
155
+ }
156
+ interface TranslationsLocaleDocEntry {
157
+ source: SourceString;
158
+ translation: TranslatedString;
159
+ }
160
+ interface TranslationsDbPathOptions {
161
+ project: string;
162
+ mode: TranslationsDocMode;
163
+ }
164
+ type TranslationsLocaleDocDbPathOptions = TranslationsDbPathOptions & {
165
+ id: string;
166
+ locale: string;
167
+ };
168
+ /**
169
+ * A translations map containing translations for multiple locales.
170
+ *
171
+ * Example:
172
+ * ```
173
+ * {
174
+ * "one": {"es": "uno", "fr": "un"},
175
+ * "two": {"es": "dos", "fr": "deux"}
176
+ * }
177
+ * ```
178
+ */
179
+ interface MultiLocaleTranslationsMap {
180
+ [source: SourceString]: {
181
+ [locale: Locale]: TranslatedString;
182
+ };
183
+ }
184
+ /**
185
+ * A translations map containing translations for a single locale.
186
+ *
187
+ * Example:
188
+ * ```
189
+ * {
190
+ * "one": "uno",
191
+ * "two": "dos"
192
+ * }
193
+ * ```
194
+ */
195
+ interface SingleLocaleTranslationsMap {
196
+ [source: SourceString]: TranslatedString;
197
+ }
198
+ declare class TranslationsManager {
199
+ cmsClient: RootCMSClient;
200
+ constructor(cmsClient: RootCMSClient);
201
+ /**
202
+ * Saves draft translations for a translations doc id.
203
+ *
204
+ * Example:
205
+ * ```
206
+ * const strings = {
207
+ * 'one': {es: 'uno', fr: 'un'},
208
+ * 'two': {es: 'dos', fr: 'deux'},
209
+ * };
210
+ * await tm.saveTranslations('Pages/index', strings);
211
+ * ```
212
+ */
213
+ saveTranslations(id: string, strings: MultiLocaleTranslationsMap, options?: {
214
+ tags?: string[];
215
+ modifiedBy?: string;
216
+ }): Promise<void>;
217
+ /**
218
+ * Publishes a translations doc.
219
+ */
220
+ publishTranslations(id: string, options?: {
221
+ batch?: WriteBatch;
222
+ publishedBy?: string;
223
+ }): Promise<void>;
224
+ /**
225
+ * Fetches translations from one or more translations docs in the translations
226
+ * manager.
227
+ *
228
+ * Example:
229
+ * ```
230
+ * await tm.loadTranslations();
231
+ * // =>
232
+ * // {
233
+ * // "one": {"es": "uno", "fr": "un"},
234
+ * // "two": {"es": "dos", "fr": "deux"}
235
+ * // }
236
+ * ```
237
+ *
238
+ * To load a specific set of translations docs by id:
239
+ * ```
240
+ * const translationsToLoad = ['Global/strings', 'Global/header', 'Global/footer', 'Pages/index'];
241
+ * await tm.loadTranslations({ids: translationsToLoad});
242
+ * // =>
243
+ * // {
244
+ * // "one": {"es": "uno", "fr": "un"},
245
+ * // "two": {"es": "dos", "fr": "deux"}
246
+ * // }
247
+ * ```
248
+ *
249
+ * To load a subset of locales (more performant):
250
+ * ```
251
+ * await tm.loadTranslations({locales: ['es']});
252
+ * // =>
253
+ * // {
254
+ * // "one": {"es": "uno"},
255
+ * // "two": {"es": "dos"}
256
+ * // }
257
+ * ```
258
+ */
259
+ loadTranslations(options?: {
260
+ ids?: string[];
261
+ tags?: string[];
262
+ locales?: Locale[];
263
+ mode?: TranslationsDocMode;
264
+ }): Promise<MultiLocaleTranslationsMap>;
265
+ /**
266
+ * Fetches translations for a given locale, with optional fallbacks.
267
+ * The return value is a map of source string to translated string.
268
+ *
269
+ * Example:
270
+ * ```
271
+ * await translationsDoc.loadTranslationsForLocale('es');
272
+ * // =>
273
+ * // {
274
+ * // "one": "uno",
275
+ * // "two": "dos",
276
+ * // }
277
+ * ```
278
+ */
279
+ loadTranslationsForLocale(locale: Locale, options?: {
280
+ mode?: TranslationsDocMode;
281
+ fallbackLocales?: Locale[];
282
+ }): Promise<SingleLocaleTranslationsMap>;
283
+ /**
284
+ * Converts a multi-locale translations map to a flat single-locale map,
285
+ * with optional support for fallback locales.
286
+ *
287
+ * ```
288
+ * const multiLocaleStrings = {
289
+ * 'one': {es: 'uno', fr: 'un'},
290
+ * 'two': {es: 'dos', fr: 'deux'}
291
+ * };
292
+ * translationsDoc.toSingleLocaleMap(multiLocaleStrings, ['es']);
293
+ * // =>
294
+ * // {
295
+ * // "one": "uno",
296
+ * // "two": "dos",
297
+ * // }
298
+ * ```
299
+ */
300
+ private toSingleLocaleMap;
301
+ /**
302
+ * Converts a multi-locale translations map to a single-locale hashed version,
303
+ * used for storage in in the DB.
304
+ *
305
+ * ```
306
+ * const multiLocaleStrings = {
307
+ * 'one': {es: 'uno', fr: 'un'},
308
+ * 'two': {es: 'dos', fr: 'deux'}
309
+ * };
310
+ * translationsDoc.toLocaleDocHashMap(multiLocaleStrings, 'es');
311
+ * // =>
312
+ * // {
313
+ * // "<hash1>": {"source": "one", "translation": "uno"},
314
+ * // "<hash2>": {"source": "two", "translation": "dos"},
315
+ * // }
316
+ * ```
317
+ *
318
+ * One reason for using hashes is because the DB has limits on the number of
319
+ * chars that can be used as the "key" in a object map.
320
+ */
321
+ private toLocaleDocHashMap;
322
+ /**
323
+ * Import translations from the v1 system to the TranslationsManager.
324
+ */
325
+ importTranslationsFromV1(): Promise<void>;
326
+ }
327
+ declare function buildTranslationsDbPath(options: TranslationsDbPathOptions): string;
328
+ declare function buildTranslationsLocaleDocDbPath(options: TranslationsLocaleDocDbPathOptions): string;
131
329
 
132
330
  interface Doc<Fields = any> {
133
331
  /** The id of the doc, e.g. "Pages/foo-bar". */
@@ -155,23 +353,6 @@ interface Doc<Fields = any> {
155
353
  };
156
354
  fields: Fields;
157
355
  }
158
- interface TranslationsDoc {
159
- id: string;
160
- sys: {
161
- modifiedAt: Timestamp;
162
- modifiedBy: string;
163
- publishedAt?: Timestamp;
164
- publishedBy?: string;
165
- linkedSheet?: {
166
- spreadsheetId: string;
167
- gid: number;
168
- linkedAt: Timestamp;
169
- linkedBy: string;
170
- };
171
- tags?: string[];
172
- };
173
- strings: TranslationsMap;
174
- }
175
356
  type DocMode = 'draft' | 'published';
176
357
  type UserRole = 'ADMIN' | 'EDITOR' | 'VIEWER';
177
358
  type HttpMethod = 'GET' | 'POST';
@@ -203,6 +384,8 @@ interface DataSource {
203
384
  interface DataSourceData<T = any> {
204
385
  dataSource: DataSource;
205
386
  data: T;
387
+ /** Optional list of column headers (for gsheet sources). */
388
+ headers?: string[];
206
389
  }
207
390
  type DataSourceMode = 'draft' | 'published';
208
391
  interface GetDocOptions {
@@ -257,6 +440,7 @@ interface Release {
257
440
  id: string;
258
441
  description?: string;
259
442
  docIds?: string[];
443
+ dataSourceIds?: string[];
260
444
  createdAt?: Timestamp;
261
445
  createdBy?: string;
262
446
  scheduledAt?: Timestamp;
@@ -312,12 +496,21 @@ declare class RootCMSClient {
312
496
  * what you are doing.
313
497
  */
314
498
  getRawDoc(collectionId: string, slug: string, options: GetDocOptions): Promise<any | null>;
499
+ /**
500
+ * Firestore path for a collection.
501
+ */
315
502
  dbCollectionDocsPath(collectionId: string, options: {
316
503
  mode: 'draft' | 'published';
317
504
  }): string;
505
+ /**
506
+ * Firestore path for a content doc.
507
+ */
318
508
  dbDocPath(collectionId: string, slug: string, options: {
319
509
  mode: 'draft' | 'published';
320
510
  }): string;
511
+ /**
512
+ * Firestore doc ref for a content doc.
513
+ */
321
514
  dbDocRef(collectionId: string, slug: string, options: {
322
515
  mode: 'draft' | 'published';
323
516
  }): FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData>;
@@ -349,6 +542,7 @@ declare class RootCMSClient {
349
542
  publishDocs(docIds: string[], options?: {
350
543
  publishedBy: string;
351
544
  batch?: WriteBatch;
545
+ releaseId?: string;
352
546
  }): Promise<any[]>;
353
547
  /**
354
548
  * Publishes scheduled docs.
@@ -358,33 +552,50 @@ declare class RootCMSClient {
358
552
  * Publishes docs in scheduled releases.
359
553
  */
360
554
  publishScheduledReleases(): Promise<void>;
361
- publishTranslationsDoc(translationsId: string, options?: {
362
- batch?: WriteBatch;
363
- publishedBy?: string;
364
- }): Promise<void>;
365
555
  /**
366
556
  * Checks if a doc is currently "locked" for publishing.
367
557
  */
368
558
  testPublishingLocked(doc: Doc): boolean;
369
559
  /**
370
- * Loads all published strings in the db.
560
+ * Returns a `TranslationsManager` object for managing translations.
561
+ *
562
+ * To get translations:
563
+ * ```
564
+ * await tm.loadTranslations({
565
+ * ids: ['Global/strings', 'Pages/index'],
566
+ * locales: ['es'],
567
+ * });
568
+ * ```
371
569
  *
570
+ * NOTE: The `TranslationsManager` is a v2 feature that will eventually
571
+ * replace the v1 translations system.
572
+ */
573
+ getTranslationsManager(): TranslationsManager;
574
+ /**
575
+ * Loads translations saved in the translations collection, optionally
576
+ * filtered by tag.
577
+ *
578
+ * Returns a map like:
372
579
  * ```
373
580
  * {
374
581
  * "<hash>": {"source": "Hello", "es": "Hola", "fr": "Bonjour"},
375
582
  * }
376
583
  * ```
377
- *
378
- * @deprecated Use `createBatchRequest()` to fetch draft/published translations.
379
584
  */
380
585
  loadTranslations(options?: LoadTranslationsOptions): Promise<TranslationsMap>;
381
- saveDraftTranslations(translationsId: string, translations: {
586
+ /**
587
+ * Saves a map of translations, e.g.:
588
+ * ```
589
+ * await client.saveTranslations({
590
+ * "Hello": {"es": "Hola", "fr": "Bonjour"},
591
+ * });
592
+ * ```
593
+ */
594
+ saveTranslations(translations: {
382
595
  [source: string]: {
383
596
  [locale: string]: string;
384
597
  };
385
- }, options?: {
386
- modifiedby?: string;
387
- }): Promise<void>;
598
+ }, tags?: string[]): Promise<void>;
388
599
  /**
389
600
  * Returns the "key" used for a translation as stored in the db. Translations
390
601
  * are stored under `Projects/<project id>/Translations/<sha1 hash>`.
@@ -407,6 +618,18 @@ declare class RootCMSClient {
407
618
  * ```
408
619
  */
409
620
  loadTranslationsForLocale(locale: string, options?: LoadTranslationsOptions): Promise<LocaleTranslations>;
621
+ /**
622
+ * Firestore path for a translations file.
623
+ */
624
+ dbTranslationsPath(translationsId: string, options: {
625
+ mode: 'draft' | 'published';
626
+ }): string;
627
+ /**
628
+ * Firestore doc ref for a translations file.
629
+ */
630
+ dbTranslationsRef(translationsId: string, options: {
631
+ mode: 'draft' | 'published';
632
+ }): FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData>;
410
633
  /**
411
634
  * Returns a data source configuration object.
412
635
  */
@@ -420,6 +643,11 @@ declare class RootCMSClient {
420
643
  publishDataSource(dataSourceId: string, options?: {
421
644
  publishedBy?: string;
422
645
  }): Promise<void>;
646
+ publishDataSources(dataSourceIds: string[], options?: {
647
+ publishedBy: string;
648
+ batch?: WriteBatch;
649
+ commitBatch?: boolean;
650
+ }): Promise<void>;
423
651
  private fetchData;
424
652
  private fetchHttpData;
425
653
  /**
@@ -428,18 +656,18 @@ declare class RootCMSClient {
428
656
  getFromDataSource<T = any>(dataSourceId: string, options?: {
429
657
  mode?: 'draft' | 'published';
430
658
  }): Promise<DataSourceData<T> | null>;
659
+ /**
660
+ * Firestore path for a datasource data.
661
+ */
431
662
  dbDataSourceDataPath(dataSourceId: string, options: {
432
663
  mode: 'draft' | 'published';
433
664
  }): string;
665
+ /**
666
+ * Firestore doc ref for a datasource data.
667
+ */
434
668
  dbDataSourceDataRef(dataSourceId: string, options: {
435
669
  mode: 'draft' | 'published';
436
670
  }): FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData>;
437
- dbTranslationsPath(translationsId: string, options: {
438
- mode: 'draft' | 'published';
439
- }): string;
440
- dbTranslationsRef(translationsId: string, options: {
441
- mode: 'draft' | 'published';
442
- }): FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData>;
443
671
  /**
444
672
  * Gets the user's role from the project's ACL.
445
673
  */
@@ -452,8 +680,80 @@ declare class RootCMSClient {
452
680
  by?: string;
453
681
  metadata?: any;
454
682
  }): Promise<void>;
683
+ /**
684
+ * Creates a batch request that is capable of fetching one or more docs,
685
+ * corresponding translations, and dataSources.
686
+ */
455
687
  createBatchRequest(options: BatchRequestOptions): BatchRequest;
456
688
  }
689
+ /**
690
+ * Returns true if the `data` is a rich text data object.
691
+ */
692
+ declare function isRichTextData(data: any): boolean;
693
+ declare function getCmsPlugin(rootConfig: RootConfig): CMSPlugin;
694
+ /**
695
+ * Walks the data tree and converts any array of objects into "array objects"
696
+ * for storage in firestore.
697
+ */
698
+ declare function marshalData(data: any): any;
699
+ /**
700
+ * Walks the data tree and converts any Timestamp objects to millis and any
701
+ * _array maps to normal arrays.
702
+ *
703
+ * E.g.:
704
+ *
705
+ * normalizeData({
706
+ * sys: {modifiedAt: Timestamp(123)},
707
+ * fields: {
708
+ * _array: ['asdf'],
709
+ * asdf: {title: 'hello'}
710
+ * }
711
+ * })
712
+ * // => {sys: {modifiedAt: 123}, fields: {foo: [{title: 'hello'}]}}
713
+ */
714
+ declare function unmarshalData(data: any): any;
715
+ /** @deprecated Use `unmarshalData()` instead. */
716
+ declare function normalizeData(data: any): any;
717
+ interface ArrayObject {
718
+ [key: string]: any;
719
+ _array: string[];
720
+ }
721
+ /**
722
+ * Serializes an array into an `ArrayObject`, e.g.:
723
+ *
724
+ * ```
725
+ * marshalArray([1, 2, 3])
726
+ * // => {a: 1, b: 2, c: 3, _array: ['a', 'b', 'c']}
727
+ * ```
728
+ *
729
+ * This database storage method makes it easier to update a single field in a
730
+ * deeply nested array object.
731
+ */
732
+ declare function toArrayObject(arr: any[]): ArrayObject;
733
+ declare const marshalArray: typeof toArrayObject;
734
+ /**
735
+ * Converts an `ArrayObject` to a normal array.
736
+ */
737
+ declare function unmarshalArray(arrObject: ArrayObject): any[];
738
+ /**
739
+ * Converts a translations map from `loadTranslations()` to a map of source to
740
+ * translated string for a particular locale.
741
+ *
742
+ * Returns a map like:
743
+ * ```
744
+ * {
745
+ * "Hello": "Bonjour",
746
+ * }
747
+ * ```
748
+ */
749
+ declare function translationsForLocale(translationsMap: TranslationsMap, locale: string): LocaleTranslations;
750
+ /**
751
+ * Parses a docId (e.g. `Pages/foo`) and returns the `collection` and `slug`.
752
+ */
753
+ declare function parseDocId(docId: string): {
754
+ collection: string;
755
+ slug: string;
756
+ };
457
757
  interface BatchRequestOptions {
458
758
  mode: 'draft' | 'published';
459
759
  /**
@@ -474,6 +774,23 @@ interface BatchRequestQueryOptions {
474
774
  orderByDirection?: 'asc' | 'desc';
475
775
  query?: (query: Query) => Query;
476
776
  }
777
+ interface TranslationsDoc {
778
+ id: string;
779
+ sys: {
780
+ modifiedAt: Timestamp;
781
+ modifiedBy: string;
782
+ publishedAt?: Timestamp;
783
+ publishedBy?: string;
784
+ linkedSheet?: {
785
+ spreadsheetId: string;
786
+ gid: number;
787
+ linkedAt: Timestamp;
788
+ linkedBy: string;
789
+ };
790
+ tags?: string[];
791
+ };
792
+ strings: TranslationsMap;
793
+ }
477
794
  declare class BatchRequest {
478
795
  cmsClient: RootCMSClient;
479
796
  private options;
@@ -519,11 +836,13 @@ declare class BatchResponse {
519
836
  * The input is either a single locale (e.g. "de") or an array of locales
520
837
  * representing the fallback tree, e.g. ["en-CA", "en-GB", "en"].
521
838
  *
839
+ * TODO(stevenle): support the locale fallback tree.
840
+ *
522
841
  * The returned value is a flat map of source string to translated string,
523
842
  * e.g.:
524
843
  * {"<source>": "<translation>"}
525
844
  */
526
- getTranslations(locale: string | string[]): LocaleTranslations;
845
+ getTranslations(locale: string): LocaleTranslations;
527
846
  /**
528
847
  * Merges the strings from all translations files retrieved in the request.
529
848
  * The returned value is a map of string to translations, e.g.:
@@ -532,72 +851,5 @@ declare class BatchResponse {
532
851
  */
533
852
  private getTranslationsMap;
534
853
  }
535
- /**
536
- * Returns true if the `data` is a rich text data object.
537
- */
538
- declare function isRichTextData(data: any): boolean;
539
- /**
540
- * Walks the data tree and converts any array of objects into "array objects"
541
- * for storage in firestore.
542
- */
543
- declare function marshalData(data: any): any;
544
- /**
545
- * Walks the data tree and converts any Timestamp objects to millis and any
546
- * _array maps to normal arrays.
547
- *
548
- * E.g.:
549
- *
550
- * normalizeData({
551
- * sys: {modifiedAt: Timestamp(123)},
552
- * fields: {
553
- * _array: ['asdf'],
554
- * asdf: {title: 'hello'}
555
- * }
556
- * })
557
- * // => {sys: {modifiedAt: 123}, fields: {foo: [{title: 'hello'}]}}
558
- */
559
- declare function unmarshalData(data: any): any;
560
- /** @deprecated Use `unmarshalData()` instead. */
561
- declare function normalizeData(data: any): any;
562
- interface ArrayObject {
563
- [key: string]: any;
564
- _array: string[];
565
- }
566
- /**
567
- * Serializes an array into an `ArrayObject`, e.g.:
568
- *
569
- * ```
570
- * marshalArray([1, 2, 3])
571
- * // => {a: 1, b: 2, c: 3, _array: ['a', 'b', 'c']}
572
- * ```
573
- *
574
- * This database storage method makes it easier to update a single field in a
575
- * deeply nested array object.
576
- */
577
- declare function toArrayObject(arr: any[]): ArrayObject;
578
- declare const marshalArray: typeof toArrayObject;
579
- /**
580
- * Converts an `ArrayObject` to a normal array.
581
- */
582
- declare function unmarshalArray(arrObject: ArrayObject): any[];
583
- /**
584
- * Converts a translations map from `loadTranslations()` to a map of source to
585
- * translated string for a particular locale.
586
- *
587
- * Returns a map like:
588
- * ```
589
- * {
590
- * "Hello": "Bonjour",
591
- * }
592
- * ```
593
- */
594
- declare function translationsForLocale(translationsMap: TranslationsMap, locale: string | string[]): LocaleTranslations;
595
- /**
596
- * Parses a docId (e.g. `Pages/foo`) and returns the `collection` and `slug`.
597
- */
598
- declare function parseDocId(docId: string): {
599
- collection: string;
600
- slug: string;
601
- };
602
854
 
603
- export { type Action as A, BatchRequest as B, parseDocId as C, type Doc as D, type CMSUser as E, type CMSAIConfig as F, type GetDocOptions as G, type HttpMethod as H, type CMSSidebarTool as I, type CMSPluginOptions as J, type CMSPlugin as K, type LoadTranslationsOptions as L, cmsPlugin as M, RootCMSClient as R, type SetDocOptions as S, type TranslationsMap as T, type UserRole as U, type LocaleTranslations as a, type TranslationsDoc as b, type DocMode as c, type DataSource as d, type DataSourceData as e, type DataSourceMode as f, getCmsPlugin as g, type SaveDraftOptions as h, type ListDocsOptions as i, type GetCountOptions as j, type Translation as k, type Release as l, type ListActionsOptions as m, type BatchRequestOptions as n, type BatchRequestQuery as o, type BatchRequestQueryOptions as p, BatchResponse as q, isRichTextData as r, marshalData as s, normalizeData as t, unmarshalData as u, type ArrayObject as v, toArrayObject as w, marshalArray as x, unmarshalArray as y, translationsForLocale as z };
855
+ export { cmsPlugin as $, type Action as A, type BatchRequestOptions as B, BatchResponse as C, type Doc as D, type Locale as E, type SourceString as F, type GetDocOptions as G, type HttpMethod as H, type TranslatedString as I, type TranslationsDocMode as J, type TranslationsLocaleDocHashMap as K, type LoadTranslationsOptions as L, type TranslationsLocaleDocEntry as M, type MultiLocaleTranslationsMap as N, type SingleLocaleTranslationsMap as O, TranslationsManager as P, buildTranslationsDbPath as Q, type Release as R, type SetDocOptions as S, type TranslationsMap as T, type UserRole as U, buildTranslationsLocaleDocDbPath as V, type CMSUser as W, type CMSAIConfig as X, type CMSSidebarTool as Y, type CMSPluginOptions as Z, type CMSPlugin as _, type LocaleTranslations as a, type DocMode as b, type DataSource as c, type DataSourceData as d, type DataSourceMode as e, type SaveDraftOptions as f, type ListDocsOptions as g, type GetCountOptions as h, type Translation as i, type ListActionsOptions as j, RootCMSClient as k, isRichTextData as l, getCmsPlugin as m, marshalData as n, normalizeData as o, type ArrayObject as p, marshalArray as q, unmarshalArray as r, translationsForLocale as s, toArrayObject as t, unmarshalData as u, parseDocId as v, type BatchRequestQuery as w, type BatchRequestQueryOptions as x, type TranslationsDoc as y, BatchRequest as z };
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import '@blinkk/root';
2
2
  import 'firebase-admin/app';
3
3
  import 'firebase-admin/firestore';
4
- export { A as Action, v as ArrayObject, B as BatchRequest, n as BatchRequestOptions, o as BatchRequestQuery, p as BatchRequestQueryOptions, q as BatchResponse, d as DataSource, e as DataSourceData, f as DataSourceMode, D as Doc, c as DocMode, j as GetCountOptions, G as GetDocOptions, H as HttpMethod, m as ListActionsOptions, i as ListDocsOptions, L as LoadTranslationsOptions, a as LocaleTranslations, l as Release, R as RootCMSClient, h as SaveDraftOptions, S as SetDocOptions, k as Translation, b as TranslationsDoc, T as TranslationsMap, U as UserRole, g as getCmsPlugin, r as isRichTextData, x as marshalArray, s as marshalData, t as normalizeData, C as parseDocId, w as toArrayObject, z as translationsForLocale, y as unmarshalArray, u as unmarshalData } from './client-AKOLkEwt.js';
4
+ export { A as Action, p as ArrayObject, z as BatchRequest, B as BatchRequestOptions, w as BatchRequestQuery, x as BatchRequestQueryOptions, C as BatchResponse, c as DataSource, d as DataSourceData, e as DataSourceMode, D as Doc, b as DocMode, h as GetCountOptions, G as GetDocOptions, H as HttpMethod, j as ListActionsOptions, g as ListDocsOptions, L as LoadTranslationsOptions, a as LocaleTranslations, R as Release, k as RootCMSClient, f as SaveDraftOptions, S as SetDocOptions, i as Translation, y as TranslationsDoc, T as TranslationsMap, U as UserRole, m as getCmsPlugin, l as isRichTextData, q as marshalArray, n as marshalData, o as normalizeData, v as parseDocId, t as toArrayObject, s as translationsForLocale, r as unmarshalArray, u as unmarshalData } from './client-fqtWzfpQ.js';