@rovela-ai/sdk 0.11.2 → 0.12.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.
Files changed (158) hide show
  1. package/dist/admin/api/categories.d.ts.map +1 -1
  2. package/dist/admin/api/categories.js +4 -0
  3. package/dist/admin/api/categories.js.map +1 -1
  4. package/dist/admin/api/orders.d.ts.map +1 -1
  5. package/dist/admin/api/orders.js +6 -0
  6. package/dist/admin/api/orders.js.map +1 -1
  7. package/dist/admin/api/products.d.ts.map +1 -1
  8. package/dist/admin/api/products.js +4 -0
  9. package/dist/admin/api/products.js.map +1 -1
  10. package/dist/admin/components/CatalogTranslationsEditor.d.ts +15 -0
  11. package/dist/admin/components/CatalogTranslationsEditor.d.ts.map +1 -0
  12. package/dist/admin/components/CatalogTranslationsEditor.js +59 -0
  13. package/dist/admin/components/CatalogTranslationsEditor.js.map +1 -0
  14. package/dist/admin/components/CategoryForm.d.ts.map +1 -1
  15. package/dist/admin/components/CategoryForm.js +4 -1
  16. package/dist/admin/components/CategoryForm.js.map +1 -1
  17. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  18. package/dist/admin/components/ProductForm.js +5 -1
  19. package/dist/admin/components/ProductForm.js.map +1 -1
  20. package/dist/admin/types.d.ts +10 -0
  21. package/dist/admin/types.d.ts.map +1 -1
  22. package/dist/auth/api/register.d.ts.map +1 -1
  23. package/dist/auth/api/register.js +4 -1
  24. package/dist/auth/api/register.js.map +1 -1
  25. package/dist/auth/components/AddressBook.d.ts.map +1 -1
  26. package/dist/auth/components/AddressBook.js +10 -8
  27. package/dist/auth/components/AddressBook.js.map +1 -1
  28. package/dist/auth/components/AddressForm.d.ts.map +1 -1
  29. package/dist/auth/components/AddressForm.js +8 -6
  30. package/dist/auth/components/AddressForm.js.map +1 -1
  31. package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -1
  32. package/dist/auth/components/ForgotPasswordForm.js +4 -2
  33. package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
  34. package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -1
  35. package/dist/auth/components/ResetPasswordForm.js +10 -8
  36. package/dist/auth/components/ResetPasswordForm.js.map +1 -1
  37. package/dist/auth/components/SignInForm.d.ts.map +1 -1
  38. package/dist/auth/components/SignInForm.js +5 -3
  39. package/dist/auth/components/SignInForm.js.map +1 -1
  40. package/dist/auth/components/SignUpForm.d.ts.map +1 -1
  41. package/dist/auth/components/SignUpForm.js +7 -5
  42. package/dist/auth/components/SignUpForm.js.map +1 -1
  43. package/dist/auth/components/UserMenu.d.ts.map +1 -1
  44. package/dist/auth/components/UserMenu.js +4 -2
  45. package/dist/auth/components/UserMenu.js.map +1 -1
  46. package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -1
  47. package/dist/auth/components/VerifyEmailNotice.js +6 -4
  48. package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
  49. package/dist/auth/hooks/useAuth.d.ts.map +1 -1
  50. package/dist/auth/hooks/useAuth.js +11 -1
  51. package/dist/auth/hooks/useAuth.js.map +1 -1
  52. package/dist/auth/server/customer-service.d.ts +1 -1
  53. package/dist/auth/server/customer-service.d.ts.map +1 -1
  54. package/dist/auth/server/customer-service.js +2 -1
  55. package/dist/auth/server/customer-service.js.map +1 -1
  56. package/dist/auth/types.d.ts +2 -0
  57. package/dist/auth/types.d.ts.map +1 -1
  58. package/dist/cart/components/CartDrawer.js +1 -1
  59. package/dist/cart/components/CartDrawer.js.map +1 -1
  60. package/dist/cart/components/CartItem.js +1 -1
  61. package/dist/cart/components/CartItem.js.map +1 -1
  62. package/dist/checkout/api/manual.d.ts.map +1 -1
  63. package/dist/checkout/api/manual.js +6 -0
  64. package/dist/checkout/api/manual.js.map +1 -1
  65. package/dist/checkout/components/OrderTimeline.d.ts.map +1 -1
  66. package/dist/checkout/components/OrderTimeline.js +8 -6
  67. package/dist/checkout/components/OrderTimeline.js.map +1 -1
  68. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -1
  69. package/dist/checkout/hooks/useCheckout.js +6 -2
  70. package/dist/checkout/hooks/useCheckout.js.map +1 -1
  71. package/dist/checkout/server/create-checkout-session.d.ts.map +1 -1
  72. package/dist/checkout/server/create-checkout-session.js +1 -0
  73. package/dist/checkout/server/create-checkout-session.js.map +1 -1
  74. package/dist/checkout/server/handle-webhook.js +1 -0
  75. package/dist/checkout/server/handle-webhook.js.map +1 -1
  76. package/dist/checkout/server/order-service.d.ts.map +1 -1
  77. package/dist/checkout/server/order-service.js +2 -0
  78. package/dist/checkout/server/order-service.js.map +1 -1
  79. package/dist/checkout/types.d.ts +4 -0
  80. package/dist/checkout/types.d.ts.map +1 -1
  81. package/dist/core/cookie-consent/CookieBanner.d.ts.map +1 -1
  82. package/dist/core/cookie-consent/CookieBanner.js +7 -4
  83. package/dist/core/cookie-consent/CookieBanner.js.map +1 -1
  84. package/dist/core/db/queries.d.ts +42 -2
  85. package/dist/core/db/queries.d.ts.map +1 -1
  86. package/dist/core/db/queries.js +49 -0
  87. package/dist/core/db/queries.js.map +1 -1
  88. package/dist/core/db/schema.d.ts +88 -0
  89. package/dist/core/db/schema.d.ts.map +1 -1
  90. package/dist/core/db/schema.js +16 -0
  91. package/dist/core/db/schema.js.map +1 -1
  92. package/dist/core/i18n/LocaleLink.d.ts +27 -0
  93. package/dist/core/i18n/LocaleLink.d.ts.map +1 -0
  94. package/dist/core/i18n/LocaleLink.js +52 -0
  95. package/dist/core/i18n/LocaleLink.js.map +1 -0
  96. package/dist/core/i18n/catalog.d.ts +45 -0
  97. package/dist/core/i18n/catalog.d.ts.map +1 -0
  98. package/dist/core/i18n/catalog.js +72 -0
  99. package/dist/core/i18n/catalog.js.map +1 -0
  100. package/dist/core/i18n/index.d.ts +5 -1
  101. package/dist/core/i18n/index.d.ts.map +1 -1
  102. package/dist/core/i18n/index.js +2 -0
  103. package/dist/core/i18n/index.js.map +1 -1
  104. package/dist/core/i18n/messages/en.d.ts.map +1 -1
  105. package/dist/core/i18n/messages/en.js +98 -0
  106. package/dist/core/i18n/messages/en.js.map +1 -1
  107. package/dist/core/i18n/messages/fr.d.ts.map +1 -1
  108. package/dist/core/i18n/messages/fr.js +98 -0
  109. package/dist/core/i18n/messages/fr.js.map +1 -1
  110. package/dist/core/i18n/resolve.d.ts +15 -3
  111. package/dist/core/i18n/resolve.d.ts.map +1 -1
  112. package/dist/core/i18n/resolve.js +7 -5
  113. package/dist/core/i18n/resolve.js.map +1 -1
  114. package/dist/core/server/index.d.ts +3 -0
  115. package/dist/core/server/index.d.ts.map +1 -1
  116. package/dist/core/server/index.js +3 -0
  117. package/dist/core/server/index.js.map +1 -1
  118. package/dist/core/server/locale-metadata.d.ts +32 -0
  119. package/dist/core/server/locale-metadata.d.ts.map +1 -0
  120. package/dist/core/server/locale-metadata.js +65 -0
  121. package/dist/core/server/locale-metadata.js.map +1 -0
  122. package/dist/core/server/request-locale.d.ts +24 -0
  123. package/dist/core/server/request-locale.d.ts.map +1 -0
  124. package/dist/core/server/request-locale.js +44 -0
  125. package/dist/core/server/request-locale.js.map +1 -0
  126. package/dist/emails/i18n.d.ts +27 -0
  127. package/dist/emails/i18n.d.ts.map +1 -0
  128. package/dist/emails/i18n.js +273 -0
  129. package/dist/emails/i18n.js.map +1 -0
  130. package/dist/emails/send/auth.d.ts +6 -0
  131. package/dist/emails/send/auth.d.ts.map +1 -1
  132. package/dist/emails/send/auth.js +3 -0
  133. package/dist/emails/send/auth.js.map +1 -1
  134. package/dist/emails/send/orders.d.ts +12 -0
  135. package/dist/emails/send/orders.d.ts.map +1 -1
  136. package/dist/emails/send/orders.js +6 -0
  137. package/dist/emails/send/orders.js.map +1 -1
  138. package/dist/emails/sender.d.ts.map +1 -1
  139. package/dist/emails/sender.js +3 -2
  140. package/dist/emails/sender.js.map +1 -1
  141. package/dist/emails/types.d.ts +2 -0
  142. package/dist/emails/types.d.ts.map +1 -1
  143. package/dist/products/api/product.d.ts +1 -1
  144. package/dist/products/api/product.d.ts.map +1 -1
  145. package/dist/products/api/product.js +5 -2
  146. package/dist/products/api/product.js.map +1 -1
  147. package/dist/products/api/products.d.ts.map +1 -1
  148. package/dist/products/api/products.js +7 -1
  149. package/dist/products/api/products.js.map +1 -1
  150. package/dist/products/components/ProductCard.js +1 -1
  151. package/dist/products/components/ProductCard.js.map +1 -1
  152. package/dist/products/hooks/useProduct.d.ts.map +1 -1
  153. package/dist/products/hooks/useProduct.js +4 -2
  154. package/dist/products/hooks/useProduct.js.map +1 -1
  155. package/dist/products/hooks/useProducts.d.ts.map +1 -1
  156. package/dist/products/hooks/useProducts.js +4 -1
  157. package/dist/products/hooks/useProducts.js.map +1 -1
  158. package/package.json +1 -1
@@ -132,5 +132,103 @@ export const en = {
132
132
  'form.postalCodeRequired': 'Postal code is required',
133
133
  'form.countryRequired': 'Country is required',
134
134
  'form.stateRequired': 'State is required',
135
+ // ── Auth ──────────────────────────────────────────────────────────────────
136
+ 'auth.signIn': 'Sign in',
137
+ 'auth.signingIn': 'Signing in...',
138
+ 'auth.signInFailed': 'Sign in failed',
139
+ 'auth.password': 'Password',
140
+ 'auth.enterPassword': 'Enter your password',
141
+ 'auth.forgotPassword': 'Forgot password?',
142
+ 'auth.rememberMe': 'Remember me for 30 days',
143
+ 'auth.createAccount': 'Create account',
144
+ 'auth.creatingAccount': 'Creating account...',
145
+ 'auth.createAccountFailed': 'Failed to create account',
146
+ 'auth.name': 'Name',
147
+ 'auth.optionalSuffix': '(optional)',
148
+ 'auth.namePlaceholder': 'John Doe',
149
+ 'auth.atLeast8': 'At least 8 characters',
150
+ 'auth.confirmPassword': 'Confirm Password',
151
+ 'auth.confirmYourPassword': 'Confirm your password',
152
+ 'auth.passwordsNoMatch': 'Passwords do not match',
153
+ 'auth.password8': 'Password must be at least 8 characters',
154
+ 'auth.forgotIntro': "Enter your email address and we'll send you a link to reset your password.",
155
+ 'auth.checkYourEmail': 'Check your email',
156
+ 'auth.forgotSuccessBody': "If an account exists with that email, we've sent you a link to reset your password.",
157
+ 'auth.sendResetLink': 'Send reset link',
158
+ 'auth.sending': 'Sending...',
159
+ 'auth.resetTitle': 'Reset your password',
160
+ 'auth.newPassword': 'New Password',
161
+ 'auth.confirmNewPassword': 'Confirm New Password',
162
+ 'auth.resetPassword': 'Reset password',
163
+ 'auth.resetting': 'Resetting...',
164
+ 'auth.resetFailed': 'Failed to reset password',
165
+ 'auth.invalidLink': 'Invalid link',
166
+ 'auth.invalidResetLink': 'Invalid or expired reset link',
167
+ 'auth.verifyingLink': 'Verifying link…',
168
+ 'auth.passwordResetDone': 'Password reset',
169
+ 'auth.myAccount': 'My Account',
170
+ 'auth.orders': 'Orders',
171
+ 'auth.settings': 'Settings',
172
+ 'auth.signOut': 'Sign out',
173
+ 'auth.customer': 'Customer',
174
+ 'auth.verifyYourEmail': 'Verify your email',
175
+ 'auth.verifySentTo': "We've sent a verification email to",
176
+ 'auth.verifyCheckInbox': 'Please check your inbox and click the verification link to activate your account.',
177
+ 'auth.resendVerification': 'Resend verification email',
178
+ 'auth.resendFailed': 'Failed to resend email',
179
+ 'auth.resendFailedVerification': 'Failed to resend verification email',
180
+ 'auth.tips': 'Tips:',
181
+ 'auth.tipSpam': 'Check your spam or junk folder',
182
+ 'auth.tipExpiry': 'The link expires in 24 hours',
183
+ 'auth.tipCorrectEmail': 'Make sure you entered the correct email',
184
+ // ── Address book ──────────────────────────────────────────────────────────
185
+ 'address.addNew': 'Add a new address',
186
+ 'address.edit': 'Edit address',
187
+ 'address.saved': 'Saved addresses',
188
+ 'address.none': 'No saved addresses yet',
189
+ 'address.add': 'Add address',
190
+ 'address.defaultShipping': 'Default shipping',
191
+ 'address.defaultBilling': 'Default billing',
192
+ 'address.removeQ': 'Remove?',
193
+ 'address.yes': 'Yes',
194
+ 'address.removing': 'Removing…',
195
+ 'address.saveFailed': 'Could not save the address. Please try again.',
196
+ 'address.updateFailed': 'Could not update the address. Please try again.',
197
+ 'address.label': 'Label (optional)',
198
+ 'address.labelPlaceholder': 'Home, Work, Job site…',
199
+ 'address.company': 'Company (optional)',
200
+ 'address.stateProvince': 'State / Province',
201
+ 'address.stateProvinceOptional': 'State / Province (optional)',
202
+ 'address.selectState': 'Select a state',
203
+ 'address.phoneOptional': 'Phone (optional)',
204
+ 'address.phonePlaceholder': 'For delivery updates',
205
+ 'address.required': 'Required',
206
+ 'address.save': 'Save address',
207
+ 'address.saving': 'Saving…',
208
+ 'address.cancel': 'Cancel',
209
+ 'address.useDefaultShipping': 'Use as default shipping address',
210
+ 'address.useDefaultBilling': 'Use as default billing address',
211
+ // ── Cookie consent (EDPB) ─────────────────────────────────────────────────
212
+ 'consent.title': 'Cookie preferences',
213
+ 'consent.intro': "We use cookies to make this store work and, with your consent, to understand how it's used and show you relevant content. You can choose which categories to allow.",
214
+ 'consent.learnMore': 'Learn more',
215
+ 'consent.acceptAll': 'Accept all',
216
+ 'consent.rejectAll': 'Reject all',
217
+ 'consent.customize': 'Customize',
218
+ 'consent.savePreferences': 'Save preferences',
219
+ 'consent.chooseCategories': 'Choose which categories of cookies you allow.',
220
+ 'consent.essential': 'Essential',
221
+ 'consent.essentialDesc': 'Required for core features like cart and login. Always on.',
222
+ 'consent.analytics': 'Analytics',
223
+ 'consent.analyticsDesc': 'Help us understand how the store is used so we can improve it.',
224
+ 'consent.marketing': 'Marketing',
225
+ 'consent.marketingDesc': 'Used to measure ads and show you relevant content across sites.',
226
+ // ── Order timeline ────────────────────────────────────────────────────────
227
+ 'timeline.orderPlaced': 'Order placed',
228
+ 'timeline.paymentConfirmed': 'Payment confirmed',
229
+ 'timeline.shipped': 'Shipped',
230
+ 'timeline.delivered': 'Delivered',
231
+ 'timeline.carrierTracking': '{carrier} tracking',
232
+ 'timeline.tracking': 'Tracking',
135
233
  };
136
234
  //# sourceMappingURL=en.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../../../src/core/i18n/messages/en.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../../../src/core/i18n/messages/en.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../../../src/core/i18n/messages/fr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,eAAO,MAAM,EAAE,EAAE,cAoIhB,CAAA"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../../../src/core/i18n/messages/fr.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,eAAO,MAAM,EAAE,EAAE,cA0OhB,CAAA"}
@@ -133,5 +133,103 @@ export const fr = {
133
133
  'form.postalCodeRequired': 'Le code postal est requis',
134
134
  'form.countryRequired': 'Le pays est requis',
135
135
  'form.stateRequired': "L'État est requis",
136
+ // ── Auth ──────────────────────────────────────────────────────────────────
137
+ 'auth.signIn': 'Se connecter',
138
+ 'auth.signingIn': 'Connexion…',
139
+ 'auth.signInFailed': 'Échec de la connexion. Vérifiez vos identifiants.',
140
+ 'auth.password': 'Mot de passe',
141
+ 'auth.enterPassword': 'Saisissez votre mot de passe',
142
+ 'auth.forgotPassword': 'Mot de passe oublié ?',
143
+ 'auth.rememberMe': 'Rester connecté pendant 30 jours',
144
+ 'auth.createAccount': 'Créer un compte',
145
+ 'auth.creatingAccount': 'Création du compte…',
146
+ 'auth.createAccountFailed': 'La création du compte a échoué',
147
+ 'auth.name': 'Nom',
148
+ 'auth.optionalSuffix': '(facultatif)',
149
+ 'auth.namePlaceholder': 'Jean Dupont',
150
+ 'auth.atLeast8': 'Au moins 8 caractères',
151
+ 'auth.confirmPassword': 'Confirmez le mot de passe',
152
+ 'auth.confirmYourPassword': 'Confirmez votre mot de passe',
153
+ 'auth.passwordsNoMatch': 'Les mots de passe ne correspondent pas',
154
+ 'auth.password8': 'Le mot de passe doit contenir au moins 8 caractères',
155
+ 'auth.forgotIntro': 'Saisissez votre adresse e-mail et nous vous enverrons un lien pour réinitialiser votre mot de passe.',
156
+ 'auth.checkYourEmail': 'Consultez votre e-mail',
157
+ 'auth.forgotSuccessBody': 'Si un compte existe avec cet e-mail, nous vous avons envoyé un lien pour réinitialiser votre mot de passe.',
158
+ 'auth.sendResetLink': 'Envoyer le lien',
159
+ 'auth.sending': 'Envoi…',
160
+ 'auth.resetTitle': 'Réinitialiser votre mot de passe',
161
+ 'auth.newPassword': 'Nouveau mot de passe',
162
+ 'auth.confirmNewPassword': 'Confirmez le nouveau mot de passe',
163
+ 'auth.resetPassword': 'Réinitialiser le mot de passe',
164
+ 'auth.resetting': 'Réinitialisation…',
165
+ 'auth.resetFailed': 'La réinitialisation du mot de passe a échoué',
166
+ 'auth.invalidLink': 'Lien invalide',
167
+ 'auth.invalidResetLink': 'Lien de réinitialisation invalide ou expiré',
168
+ 'auth.verifyingLink': 'Vérification du lien…',
169
+ 'auth.passwordResetDone': 'Mot de passe réinitialisé',
170
+ 'auth.myAccount': 'Mon compte',
171
+ 'auth.orders': 'Mes commandes',
172
+ 'auth.settings': 'Paramètres',
173
+ 'auth.signOut': 'Se déconnecter',
174
+ 'auth.customer': 'Client',
175
+ 'auth.verifyYourEmail': 'Vérifiez votre e-mail',
176
+ 'auth.verifySentTo': 'Nous avons envoyé un e-mail de vérification à',
177
+ 'auth.verifyCheckInbox': 'Consultez votre boîte de réception et cliquez sur le lien de vérification pour activer votre compte.',
178
+ 'auth.resendVerification': "Renvoyer l'e-mail de vérification",
179
+ 'auth.resendFailed': "Impossible de renvoyer l'e-mail",
180
+ 'auth.resendFailedVerification': "Impossible de renvoyer l'e-mail de vérification",
181
+ 'auth.tips': 'Conseils :',
182
+ 'auth.tipSpam': 'Vérifiez votre dossier spam ou courrier indésirable',
183
+ 'auth.tipExpiry': 'Le lien expire dans 24 heures',
184
+ 'auth.tipCorrectEmail': "Vérifiez que l'adresse e-mail saisie est correcte",
185
+ // ── Address book ──────────────────────────────────────────────────────────
186
+ 'address.addNew': 'Ajouter une nouvelle adresse',
187
+ 'address.edit': "Modifier l'adresse",
188
+ 'address.saved': 'Adresses enregistrées',
189
+ 'address.none': 'Aucune adresse enregistrée',
190
+ 'address.add': 'Ajouter une adresse',
191
+ 'address.defaultShipping': 'Livraison par défaut',
192
+ 'address.defaultBilling': 'Facturation par défaut',
193
+ 'address.removeQ': 'Supprimer ?',
194
+ 'address.yes': 'Oui',
195
+ 'address.removing': 'Suppression…',
196
+ 'address.saveFailed': "Impossible d'enregistrer l'adresse. Veuillez réessayer.",
197
+ 'address.updateFailed': "Impossible de mettre à jour l'adresse. Veuillez réessayer.",
198
+ 'address.label': 'Libellé (facultatif)',
199
+ 'address.labelPlaceholder': 'Domicile, Bureau, Chantier…',
200
+ 'address.company': 'Société (facultatif)',
201
+ 'address.stateProvince': 'État / Province',
202
+ 'address.stateProvinceOptional': 'État / Province (facultatif)',
203
+ 'address.selectState': 'Sélectionnez un État',
204
+ 'address.phoneOptional': 'Téléphone (facultatif)',
205
+ 'address.phonePlaceholder': 'Pour le suivi de livraison',
206
+ 'address.required': 'Requis',
207
+ 'address.save': "Enregistrer l'adresse",
208
+ 'address.saving': 'Enregistrement…',
209
+ 'address.cancel': 'Annuler',
210
+ 'address.useDefaultShipping': 'Utiliser comme adresse de livraison par défaut',
211
+ 'address.useDefaultBilling': 'Utiliser comme adresse de facturation par défaut',
212
+ // ── Cookie consent (EDPB) ─────────────────────────────────────────────────
213
+ 'consent.title': 'Préférences de cookies',
214
+ 'consent.intro': 'Nous utilisons des cookies pour faire fonctionner cette boutique et, avec votre consentement, pour comprendre son utilisation et vous proposer des contenus pertinents. Vous pouvez choisir les catégories à autoriser.',
215
+ 'consent.learnMore': 'En savoir plus',
216
+ 'consent.acceptAll': 'Tout accepter',
217
+ 'consent.rejectAll': 'Tout refuser',
218
+ 'consent.customize': 'Personnaliser',
219
+ 'consent.savePreferences': 'Enregistrer mes préférences',
220
+ 'consent.chooseCategories': 'Choisissez les catégories de cookies que vous autorisez.',
221
+ 'consent.essential': 'Essentiels',
222
+ 'consent.essentialDesc': 'Nécessaires aux fonctions de base comme le panier et la connexion. Toujours actifs.',
223
+ 'consent.analytics': 'Statistiques',
224
+ 'consent.analyticsDesc': "Nous aident à comprendre l'utilisation de la boutique pour l'améliorer.",
225
+ 'consent.marketing': 'Marketing',
226
+ 'consent.marketingDesc': 'Servent à mesurer les publicités et à vous proposer des contenus pertinents.',
227
+ // ── Order timeline ────────────────────────────────────────────────────────
228
+ 'timeline.orderPlaced': 'Commande passée',
229
+ 'timeline.paymentConfirmed': 'Paiement confirmé',
230
+ 'timeline.shipped': 'Expédiée',
231
+ 'timeline.delivered': 'Livrée',
232
+ 'timeline.carrierTracking': 'Suivi {carrier}',
233
+ 'timeline.tracking': 'Suivi',
136
234
  };
137
235
  //# sourceMappingURL=fr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../../src/core/i18n/messages/fr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../../src/core/i18n/messages/fr.ts"],"names":[],"mappings":"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"}
@@ -44,18 +44,30 @@ export interface LocaleRedirectInput extends RequestLocaleInput {
44
44
  /** ORIGINAL request pathname, prefix included (x-rovela-pathname). */
45
45
  pathname?: string | null;
46
46
  }
47
+ export interface LocaleRedirectDecision {
48
+ path: string;
49
+ /**
50
+ * True for STRUCTURAL corrections (prefix strips — a URL shape the store
51
+ * never serves) → 308, so crawlers consolidate. False for PREFERENCE hops
52
+ * (cookie / geo routing off a bare URL) → temporary, because the target
53
+ * depends on visitor state and must never be cached as permanent.
54
+ */
55
+ permanent: boolean;
56
+ }
47
57
  /**
48
58
  * Where this request should redirect for locale correctness, or null.
49
59
  *
50
- * - Prefixed URL for a locale the store doesn't serve strip the prefix
51
- * (no /fr ghost pages on an en-only store).
60
+ * - Prefixed URL for a locale the store doesn't serve, or for the DEFAULT
61
+ * locale (no /en duplicates on an en-default store) → strip the prefix.
62
+ * PERMANENT.
52
63
  * - Bare URL + the visitor prefers an enabled non-default locale (explicit
53
64
  * cookie first, else IP-country hint) → the prefixed equivalent. This is
54
65
  * the "IP detection" behavior: first visit from France lands on /fr; the
55
66
  * cookie the provider then writes keeps it sticky, and switching back to
56
67
  * the default writes a default-locale cookie which suppresses this.
68
+ * TEMPORARY.
57
69
  */
58
- export declare function resolveLocaleRedirect({ prefixLocale, cookieLocale, geoLocale, pathname, config, }: LocaleRedirectInput): string | null;
70
+ export declare function resolveLocaleRedirect({ prefixLocale, cookieLocale, geoLocale, pathname, config, }: LocaleRedirectInput): LocaleRedirectDecision | null;
59
71
  /**
60
72
  * Build the URL for the CURRENT page in another locale — the language
61
73
  * switcher's navigation target. `pathname` may carry a locale prefix.
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/core/i18n/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,WAAW,CAAA;IAC1B,wDAAwD;IACxD,cAAc,EAAE,WAAW,EAAE,CAAA;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACjC,GAAG,IAAI,GAAG,iBAAiB,CAU3B;AAED,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,WAAW,CAK9F;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,GACP,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CA0BrC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,GAAG,MAAM,CAYpG"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/core/i18n/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,WAAW,CAAA;IAC1B,wDAAwD;IACxD,cAAc,EAAE,WAAW,EAAE,CAAA;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE;IAClD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACjC,GAAG,IAAI,GAAG,iBAAiB,CAU3B;AAED,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,WAAW,CAK9F;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,GACP,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,IAAI,CA0BrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,GAAG,MAAM,CAYpG"}
@@ -42,22 +42,24 @@ export function resolveRequestLocale({ prefixLocale, config }) {
42
42
  /**
43
43
  * Where this request should redirect for locale correctness, or null.
44
44
  *
45
- * - Prefixed URL for a locale the store doesn't serve strip the prefix
46
- * (no /fr ghost pages on an en-only store).
45
+ * - Prefixed URL for a locale the store doesn't serve, or for the DEFAULT
46
+ * locale (no /en duplicates on an en-default store) → strip the prefix.
47
+ * PERMANENT.
47
48
  * - Bare URL + the visitor prefers an enabled non-default locale (explicit
48
49
  * cookie first, else IP-country hint) → the prefixed equivalent. This is
49
50
  * the "IP detection" behavior: first visit from France lands on /fr; the
50
51
  * cookie the provider then writes keeps it sticky, and switching back to
51
52
  * the default writes a default-locale cookie which suppresses this.
53
+ * TEMPORARY.
52
54
  */
53
55
  export function resolveLocaleRedirect({ prefixLocale, cookieLocale, geoLocale, pathname, config, }) {
54
56
  if (!pathname || !pathname.startsWith('/'))
55
57
  return null;
56
- // Prefixed URL: only "not enabled" needs correction.
58
+ // Prefixed URL: only "not enabled" / "is default" need correction.
57
59
  if (isSupportedLocale(prefixLocale)) {
58
60
  if (!config.enabledLocales.includes(prefixLocale) || prefixLocale === config.defaultLocale) {
59
61
  const bare = pathname.replace(new RegExp(`^/${prefixLocale}(?=/|$)`), '') || '/';
60
- return bare;
62
+ return { path: bare, permanent: true };
61
63
  }
62
64
  return null;
63
65
  }
@@ -70,7 +72,7 @@ export function resolveLocaleRedirect({ prefixLocale, cookieLocale, geoLocale, p
70
72
  if (preferred &&
71
73
  preferred !== config.defaultLocale &&
72
74
  config.enabledLocales.includes(preferred)) {
73
- return `/${preferred}${pathname === '/' ? '' : pathname}`;
75
+ return { path: `/${preferred}${pathname === '/' ? '' : pathname}`, permanent: false };
74
76
  }
75
77
  return null;
76
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/i18n/resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/i18n/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,SAAS,CAAA;AAQhB;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAGjC;IACN,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC;QACpD,CAAC,CAAC,QAAQ,CAAC,aAAa;QACxB,CAAC,CAAC,cAAc,CAAA;IAClB,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC;SAC7C,MAAM,CAAC,iBAAiB,CAAC;QAC1B,qCAAqC;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChD,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA;AACxD,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAE,YAAY,EAAE,MAAM,EAAsB;IAC/E,IAAI,iBAAiB,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpF,OAAO,YAAY,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAA;AAC7B,CAAC;AAkBD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,MAAM,GACc;IACpB,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvD,mEAAmE;IACnE,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,YAAY,SAAS,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;YAChF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;QACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oEAAoE;IACpE,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC;QAC/C,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC5B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAA;IACV,IACE,SAAS;QACT,SAAS,KAAK,MAAM,CAAC,aAAa;QAClC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EACzC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACvF,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,MAAmB,EAAE,aAA0B;IAC1F,8CAA8C;IAC9C,IAAI,IAAI,GAAG,QAAQ,CAAA;IACnB,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;YAClC,MAAK;QACP,CAAC;IACH,CAAC;IACD,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,IAAI,CAAA;IACzC,OAAO,IAAI,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAChD,CAAC"}
@@ -16,4 +16,7 @@ export { db, getDb, getSql, createDb, checkConnection, getConnectionInfo, schema
16
16
  export type { OnboardingState, SdkDb, CustomerAddressInput, CustomerGroupInput, PaymentMethodInput, StoreLocationInput, } from '../db';
17
17
  export { sanitizeRichHtml } from './sanitize';
18
18
  export type { Product as DbProduct, NewProduct, ProductVariant as DbProductVariant, NewProductVariant, Category as DbCategory, NewCategory, Order as DbOrder, NewOrder, OrderItem as DbOrderItem, NewOrderItem, Customer as DbCustomer, NewCustomer, StoreAdmin as DbStoreAdmin, NewStoreAdmin, FindProductsOptions, FindOrdersOptions, } from '../db';
19
+ export { localizedAlternates } from './locale-metadata';
20
+ export { getRequestLocale } from './request-locale';
21
+ export type { RequestLocaleResult } from './request-locale';
19
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AAGlB,YAAY,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EAEjB,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EAEb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,WAAW,CAAA;AAGlB,OAAO,EAEL,EAAE,EACF,KAAK,EACL,MAAM,EAEN,QAAQ,EAER,eAAe,EACf,iBAAiB,EAEjB,MAAM,EAEN,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EAEb,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EAEjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EAEf,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAEf,cAAc,EACd,cAAc,EACd,cAAc,EAEd,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EAEvB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAElB,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EAEzB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAEhB,uBAAuB,EACvB,gBAAgB,EAEhB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,gBAAgB,EAEhB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAEf,YAAY,EACZ,cAAc,EAEd,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAEd,YAAY,EACV,eAAe,EACf,KAAK,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,OAAO,CAAA;AAId,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG7C,YAAY,EACV,OAAO,IAAI,SAAS,EACpB,UAAU,EACV,cAAc,IAAI,gBAAgB,EAClC,iBAAiB,EACjB,QAAQ,IAAI,UAAU,EACtB,WAAW,EACX,KAAK,IAAI,OAAO,EAChB,QAAQ,EACR,SAAS,IAAI,WAAW,EACxB,YAAY,EACZ,QAAQ,IAAI,UAAU,EACtB,WAAW,EACX,UAAU,IAAI,YAAY,EAC1B,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,OAAO,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AAGlB,YAAY,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EAEjB,UAAU,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,EAEb,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,WAAW,CAAA;AAGlB,OAAO,EAEL,EAAE,EACF,KAAK,EACL,MAAM,EAEN,QAAQ,EAER,eAAe,EACf,iBAAiB,EAEjB,MAAM,EAEN,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EAEb,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EAEjB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EAEf,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EAEf,cAAc,EACd,cAAc,EACd,cAAc,EAEd,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EAEvB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAElB,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EAEzB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAEhB,uBAAuB,EACvB,gBAAgB,EAEhB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EAEnB,gBAAgB,EAEhB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EAEf,YAAY,EACZ,cAAc,EAEd,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAEd,YAAY,EACV,eAAe,EACf,KAAK,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,OAAO,CAAA;AAId,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG7C,YAAY,EACV,OAAO,IAAI,SAAS,EACpB,UAAU,EACV,cAAc,IAAI,gBAAgB,EAClC,iBAAiB,EACjB,QAAQ,IAAI,UAAU,EACtB,WAAW,EACX,KAAK,IAAI,OAAO,EAChB,QAAQ,EACR,SAAS,IAAI,WAAW,EACxB,YAAY,EACZ,QAAQ,IAAI,UAAU,EACtB,WAAW,EACX,UAAU,IAAI,YAAY,EAC1B,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,OAAO,CAAA;AAGd,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -59,4 +59,7 @@ ensureOnboardingColumn, getOnboardingState, setOnboardingFlag, getSetupGuideSign
59
59
  // Server-side HTML sanitizer for `html`-typed metafields (rich descriptions).
60
60
  // Sanitize at the write boundary (admin product save + catalog import).
61
61
  export { sanitizeRichHtml } from './sanitize';
62
+ // Locale-aware metadata alternates (canonical + hreflang, i18n core)
63
+ export { localizedAlternates } from './locale-metadata';
64
+ export { getRequestLocale } from './request-locale';
62
65
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oCAAoC;AACpC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AA2BlB,6EAA6E;AAC7E,OAAO;AACL,SAAS;AACT,EAAE,EACF,KAAK,EACL,MAAM;AACN,oEAAoE;AACpE,QAAQ;AACR,SAAS;AACT,eAAe,EACf,iBAAiB;AACjB,SAAS;AACT,MAAM;AACN,qBAAqB;AACrB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa;AACb,uBAAuB;AACvB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB;AACjB,+BAA+B;AAC/B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe;AACf,uBAAuB;AACvB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe;AACf,yBAAyB;AACzB,cAAc,EACd,cAAc,EACd,cAAc;AACd,mBAAmB;AACnB,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,iBAAiB;AACjB,qBAAqB;AACrB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB;AACvB,sBAAsB;AACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB;AAClB,oCAAoC;AACpC,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB;AACzB,oDAAoD;AACpD,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB;AAChB,yBAAyB;AACzB,uBAAuB,EACvB,gBAAgB;AAChB,+CAA+C;AAC/C,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB;AACnB,qDAAqD;AACrD,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB;AACnB,SAAS;AACT,gBAAgB;AAChB,QAAQ;AACR,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe;AACf,iBAAiB;AACjB,YAAY,EACZ,cAAc;AACd,uCAAuC;AACvC,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAWd,8EAA8E;AAC9E,wEAAwE;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oCAAoC;AACpC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AA2BlB,6EAA6E;AAC7E,OAAO;AACL,SAAS;AACT,EAAE,EACF,KAAK,EACL,MAAM;AACN,oEAAoE;AACpE,QAAQ;AACR,SAAS;AACT,eAAe,EACf,iBAAiB;AACjB,SAAS;AACT,MAAM;AACN,qBAAqB;AACrB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa;AACb,uBAAuB;AACvB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB;AACjB,+BAA+B;AAC/B,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe;AACf,uBAAuB;AACvB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe;AACf,yBAAyB;AACzB,cAAc,EACd,cAAc,EACd,cAAc;AACd,mBAAmB;AACnB,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,iBAAiB;AACjB,qBAAqB;AACrB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB;AACvB,sBAAsB;AACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB;AAClB,oCAAoC;AACpC,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB;AACzB,oDAAoD;AACpD,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB;AAChB,yBAAyB;AACzB,uBAAuB,EACvB,gBAAgB;AAChB,+CAA+C;AAC/C,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB;AACnB,qDAAqD;AACrD,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB;AACnB,SAAS;AACT,gBAAgB;AAChB,QAAQ;AACR,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,eAAe;AACf,iBAAiB;AACjB,YAAY,EACZ,cAAc;AACd,uCAAuC;AACvC,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAWd,8EAA8E;AAC9E,wEAAwE;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAsB7C,qEAAqE;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @rovela-ai/sdk/core/server/locale-metadata
3
+ *
4
+ * Locale-aware `metadata.alternates` for template pages — the SEO-correct
5
+ * companion to the path-prefix routing:
6
+ *
7
+ * - each locale variant SELF-canonicalizes (`/en/products/x` → canonical
8
+ * `/en/products/x`, never the default-locale URL — a cross-locale
9
+ * canonical tells Google the translation is a duplicate and suppresses
10
+ * it from the index);
11
+ * - every variant declares the full hreflang set including `x-default`
12
+ * (pointing at the default-locale URL) so Google pairs the translations.
13
+ *
14
+ * Single-locale stores get a plain self-canonical — byte-identical to the
15
+ * pre-i18n output. Server-only (reads request headers + settings).
16
+ *
17
+ * Usage in a template page's generateMetadata:
18
+ * ```ts
19
+ * export async function generateMetadata({ params }) {
20
+ * const { slug } = await params
21
+ * return { title: ..., alternates: await localizedAlternates(`/products/${slug}`) }
22
+ * }
23
+ * ```
24
+ */
25
+ import type { Metadata } from 'next';
26
+ /**
27
+ * Build `alternates` (canonical + hreflang languages) for the BARE path of
28
+ * the current page (`/products/x`, no locale prefix — the helper applies
29
+ * the active request's prefix itself).
30
+ */
31
+ export declare function localizedAlternates(barePath: string): Promise<Metadata['alternates']>;
32
+ //# sourceMappingURL=locale-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-metadata.d.ts","sourceRoot":"","sources":["../../../src/core/server/locale-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AASpC;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAiC3F"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @rovela-ai/sdk/core/server/locale-metadata
3
+ *
4
+ * Locale-aware `metadata.alternates` for template pages — the SEO-correct
5
+ * companion to the path-prefix routing:
6
+ *
7
+ * - each locale variant SELF-canonicalizes (`/en/products/x` → canonical
8
+ * `/en/products/x`, never the default-locale URL — a cross-locale
9
+ * canonical tells Google the translation is a duplicate and suppresses
10
+ * it from the index);
11
+ * - every variant declares the full hreflang set including `x-default`
12
+ * (pointing at the default-locale URL) so Google pairs the translations.
13
+ *
14
+ * Single-locale stores get a plain self-canonical — byte-identical to the
15
+ * pre-i18n output. Server-only (reads request headers + settings).
16
+ *
17
+ * Usage in a template page's generateMetadata:
18
+ * ```ts
19
+ * export async function generateMetadata({ params }) {
20
+ * const { slug } = await params
21
+ * return { title: ..., alternates: await localizedAlternates(`/products/${slug}`) }
22
+ * }
23
+ * ```
24
+ */
25
+ import { headers } from 'next/headers';
26
+ import { findSettings } from '../db/queries';
27
+ import { resolveStoreLocaleConfig } from '../i18n/resolve';
28
+ import { LOCALE_HEADER, isSupportedLocale } from '../i18n/types';
29
+ function baseUrl() {
30
+ return (process.env.NEXT_PUBLIC_APP_URL || '').replace(/\/$/, '');
31
+ }
32
+ /**
33
+ * Build `alternates` (canonical + hreflang languages) for the BARE path of
34
+ * the current page (`/products/x`, no locale prefix — the helper applies
35
+ * the active request's prefix itself).
36
+ */
37
+ export async function localizedAlternates(barePath) {
38
+ const base = baseUrl();
39
+ const path = barePath === '/' ? '' : barePath;
40
+ let config;
41
+ try {
42
+ config = resolveStoreLocaleConfig(await findSettings());
43
+ }
44
+ catch {
45
+ config = resolveStoreLocaleConfig(null);
46
+ }
47
+ const urlFor = (locale) => locale === config.defaultLocale ? `${base}${path || '/'}` : `${base}/${locale}${path}`;
48
+ // Single-locale store: plain self-canonical, no hreflang (pre-i18n shape).
49
+ if (config.enabledLocales.length < 2) {
50
+ return { canonical: `${base}${path || '/'}` };
51
+ }
52
+ const hdrs = await headers();
53
+ const prefixLocale = hdrs.get(LOCALE_HEADER);
54
+ const active = isSupportedLocale(prefixLocale) && config.enabledLocales.includes(prefixLocale)
55
+ ? prefixLocale
56
+ : config.defaultLocale;
57
+ return {
58
+ canonical: urlFor(active),
59
+ languages: {
60
+ ...Object.fromEntries(config.enabledLocales.map((l) => [l, urlFor(l)])),
61
+ 'x-default': urlFor(config.defaultLocale),
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=locale-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-metadata.js","sourceRoot":"","sources":["../../../src/core/server/locale-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEhE,SAAS,OAAO;IACd,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;IAE7C,IAAI,MAAM,CAAA;IACV,IAAI,CAAC;QACH,MAAM,GAAG,wBAAwB,CAAC,MAAM,YAAY,EAAE,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE,CAChC,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,GAAG,IAAI,EAAE,CAAA;IAExF,2EAA2E;IAC3E,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,CAAA;IAC/C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5C,MAAM,MAAM,GACV,iBAAiB,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC7E,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,MAAM,CAAC,aAAa,CAAA;IAE1B,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,SAAS,EAAE;YACT,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;SAC1C;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @rovela-ai/sdk/core/server/request-locale
3
+ *
4
+ * Server-side request-locale resolution for template pages and public API
5
+ * handlers. Two sources, in priority order:
6
+ *
7
+ * 1. the proxy's prefix header (`x-rovela-locale`) — set on rewritten
8
+ * /fr-style page requests;
9
+ * 2. an explicit `?locale=` query param — how CLIENT-side fetches to public
10
+ * APIs (which the proxy deliberately excludes from locale handling)
11
+ * carry the active locale across.
12
+ *
13
+ * Both are validated against the store's ENABLED locales — an arbitrary
14
+ * param can never select an unserved language.
15
+ */
16
+ import { type StoreLocaleConfig } from '../i18n/resolve';
17
+ import { type StoreLocale } from '../i18n/types';
18
+ export interface RequestLocaleResult {
19
+ locale: StoreLocale;
20
+ config: StoreLocaleConfig;
21
+ }
22
+ /** Resolve the active locale for the current server request. */
23
+ export declare function getRequestLocale(explicit?: string | null): Promise<RequestLocaleResult>;
24
+ //# sourceMappingURL=request-locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-locale.d.ts","sourceRoot":"","sources":["../../../src/core/server/request-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAElF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,gEAAgE;AAChE,wBAAsB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuB7F"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @rovela-ai/sdk/core/server/request-locale
3
+ *
4
+ * Server-side request-locale resolution for template pages and public API
5
+ * handlers. Two sources, in priority order:
6
+ *
7
+ * 1. the proxy's prefix header (`x-rovela-locale`) — set on rewritten
8
+ * /fr-style page requests;
9
+ * 2. an explicit `?locale=` query param — how CLIENT-side fetches to public
10
+ * APIs (which the proxy deliberately excludes from locale handling)
11
+ * carry the active locale across.
12
+ *
13
+ * Both are validated against the store's ENABLED locales — an arbitrary
14
+ * param can never select an unserved language.
15
+ */
16
+ import { headers } from 'next/headers';
17
+ import { findSettings } from '../db/queries';
18
+ import { resolveStoreLocaleConfig } from '../i18n/resolve';
19
+ import { LOCALE_HEADER, isSupportedLocale } from '../i18n/types';
20
+ /** Resolve the active locale for the current server request. */
21
+ export async function getRequestLocale(explicit) {
22
+ let config;
23
+ try {
24
+ config = resolveStoreLocaleConfig(await findSettings());
25
+ }
26
+ catch {
27
+ config = resolveStoreLocaleConfig(null);
28
+ }
29
+ // Explicit param (API fetches) wins over the header when valid.
30
+ if (isSupportedLocale(explicit) && config.enabledLocales.includes(explicit)) {
31
+ return { locale: explicit, config };
32
+ }
33
+ try {
34
+ const prefixLocale = (await headers()).get(LOCALE_HEADER);
35
+ if (isSupportedLocale(prefixLocale) && config.enabledLocales.includes(prefixLocale)) {
36
+ return { locale: prefixLocale, config };
37
+ }
38
+ }
39
+ catch {
40
+ // headers() unavailable (build-time) → default
41
+ }
42
+ return { locale: config.defaultLocale, config };
43
+ }
44
+ //# sourceMappingURL=request-locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-locale.js","sourceRoot":"","sources":["../../../src/core/server/request-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAA0B,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAoB,MAAM,eAAe,CAAA;AAOlF,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAwB;IAC7D,IAAI,MAAyB,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,wBAAwB,CAAC,MAAM,YAAY,EAAE,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,gEAAgE;IAChE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QACzD,IAAI,iBAAiB,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAA;AACjD,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @rovela-ai/sdk/emails/i18n
3
+ *
4
+ * Transactional-email localization (i18n B3) — a locale post-processor at
5
+ * the render boundary. The templates render in English (the proven,
6
+ * table-based builders stay untouched); when an order/customer carries a
7
+ * non-English locale, the rendered HTML + subject pass through a per-locale
8
+ * phrase table plus date / currency / greeting transforms.
9
+ *
10
+ * Why a post-processor instead of t() calls inside the 11 templates:
11
+ * production-proven (this engine ran for weeks on a live French store
12
+ * before being upstreamed), zero-risk to the English output (unmatched
13
+ * strings stay English — never broken markup), and one file to maintain
14
+ * until the visual email editor re-architects rendering anyway.
15
+ *
16
+ * Longest-first replacement so short labels never corrupt longer phrases.
17
+ * Day abbreviations are digit-anchored ("Mon 1" → "lun. 1") so they can
18
+ * never touch a French word ("Mon compte").
19
+ */
20
+ import { type StoreLocale } from '../core/i18n/types';
21
+ /**
22
+ * Localize a rendered email (HTML body or subject line) for a locale.
23
+ * English (or anything unmapped) returns the input unchanged — the email is
24
+ * NEVER broken by localization, worst case it ships in English.
25
+ */
26
+ export declare function localizeEmail(input: string, locale: StoreLocale | string | null | undefined): string;
27
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/emails/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA2PlE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIpG"}