11import Z from 'zod' ;
2- import { sourceLocaleSchema , targetLocaleSchema } from '@replexica/spec' ;
2+ import { sourceLocaleSchema , targetLocaleSchema , allLocalesSchema } from '@replexica/spec' ;
33import { createId } from "@paralleldrive/cuid2" ;
44
5- const replexicaEngineParamsSchema = Z . object ( {
5+ const engineParamsSchema = Z . object ( {
66 apiKey : Z . string ( ) ,
77 apiUrl : Z . string ( ) . url ( ) . default ( 'https://engine.replexica.com' ) ,
88 batchSize : Z . number ( )
@@ -18,30 +18,35 @@ const replexicaEngineParamsSchema = Z.object({
1818 . default ( 200 ) ,
1919} ) . passthrough ( ) ;
2020
21- const replexicaLocalizationPayloadSchema = Z . record (
21+ const payloadSchema = Z . record (
2222 Z . string ( ) ,
2323 Z . any ( ) ,
2424) ;
2525
26- const replexicaLocalizationParamsSchema = Z . object ( {
26+ const localizationParamsSchema = Z . object ( {
2727 sourceLocale : sourceLocaleSchema ,
2828 targetLocale : targetLocaleSchema ,
2929} ) ;
3030
31+ const referenceSchema = Z . record (
32+ allLocalesSchema ,
33+ payloadSchema ,
34+ ) ;
35+
3136/**
3237 * ReplexicaEngine class for interacting with the Replexica API
3338 */
3439export class ReplexicaEngine {
35- private config : Z . infer < typeof replexicaEngineParamsSchema > ;
40+ private config : Z . infer < typeof engineParamsSchema > ;
3641
3742 /**
3843 * Create a new ReplexicaEngine instance
3944 * @param config - Configuration options for the Engine
4045 */
4146 constructor (
42- config : Partial < Z . infer < typeof replexicaEngineParamsSchema > > ,
47+ config : Partial < Z . infer < typeof engineParamsSchema > > ,
4348 ) {
44- this . config = replexicaEngineParamsSchema . parse ( config ) ;
49+ this . config = engineParamsSchema . parse ( config ) ;
4550 }
4651
4752 /**
@@ -52,12 +57,13 @@ export class ReplexicaEngine {
5257 * @returns Localized content
5358 */
5459 async localize (
55- payload : Z . infer < typeof replexicaLocalizationPayloadSchema > ,
56- params : Z . infer < typeof replexicaLocalizationParamsSchema > ,
60+ payload : Z . infer < typeof payloadSchema > ,
61+ params : Z . infer < typeof localizationParamsSchema > ,
62+ reference ?: Z . infer < typeof referenceSchema > ,
5763 progressCallback ?: ( progress : number ) => void
5864 ) : Promise < Record < string , string > > {
59- const finalPayload = replexicaLocalizationPayloadSchema . parse ( payload ) ;
60- const finalParams = replexicaLocalizationParamsSchema . parse ( params ) ;
65+ const finalPayload = payloadSchema . parse ( payload ) ;
66+ const finalParams = localizationParamsSchema . parse ( params ) ;
6167
6268 const chunkedPayload = this . extractPayloadChunks ( finalPayload ) ;
6369 const processedPayloadChunks : Record < string , string > [ ] = [ ] ;
@@ -74,7 +80,7 @@ export class ReplexicaEngine {
7480 const processedPayloadChunk = await this . localizeChunk (
7581 finalParams . sourceLocale ,
7682 finalParams . targetLocale ,
77- { meta : { } , data : chunk } ,
83+ { data : chunk , reference } ,
7884 workflowId ,
7985 ) ;
8086 processedPayloadChunks . push ( processedPayloadChunk ) ;
@@ -93,7 +99,7 @@ export class ReplexicaEngine {
9399 private async localizeChunk (
94100 sourceLocale : string ,
95101 targetLocale : string ,
96- payload : { data : any ; meta : any ; } ,
102+ payload : { data : any ; reference : any ; } ,
97103 workflowId : string ,
98104 ) : Promise < Record < string , string > > {
99105 const res = await fetch ( `${ this . config . apiUrl } /i18n` , {
@@ -108,8 +114,8 @@ export class ReplexicaEngine {
108114 source : sourceLocale ,
109115 target : targetLocale ,
110116 } ,
111- meta : payload . meta ,
112117 data : payload . data ,
118+ reference : payload . reference ,
113119 } , null , 2 ) ,
114120 } ) ;
115121
0 commit comments