intor 2.2.3 → 2.2.5

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.
@@ -123,6 +123,8 @@ var resolveRoutingOptions = (routing = {}) => {
123
123
 
124
124
  // src/shared/error/intor-error.ts
125
125
  var IntorError = class extends Error {
126
+ code;
127
+ id;
126
128
  constructor({ message, code, id }) {
127
129
  const fullMessage = id ? `[${id}] ${message}` : message;
128
130
  super(fullMessage);
@@ -121,6 +121,8 @@ var resolveRoutingOptions = (routing = {}) => {
121
121
 
122
122
  // src/shared/error/intor-error.ts
123
123
  var IntorError = class extends Error {
124
+ code;
125
+ id;
124
126
  constructor({ message, code, id }) {
125
127
  const fullMessage = id ? `[${id}] ${message}` : message;
126
128
  super(fullMessage);
package/dist/index.cjs CHANGED
@@ -456,7 +456,8 @@ var loadLocalMessages = async ({
456
456
  loggerOptions = { id: "default" },
457
457
  exts,
458
458
  messagesReader
459
- } = {}
459
+ } = {},
460
+ allowCacheWrite = false
460
461
  }) => {
461
462
  const baseLogger = getLogger({ ...loggerOptions });
462
463
  const logger = baseLogger.child({ scope: "load-local-messages" });
@@ -503,7 +504,7 @@ var loadLocalMessages = async ({
503
504
  });
504
505
  }
505
506
  }
506
- if (cacheOptions.enabled && key && messages) {
507
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
507
508
  await pool?.set(key, messages, cacheOptions.ttl);
508
509
  }
509
510
  const end = perf_hooks.performance.now();
@@ -587,7 +588,8 @@ var loadRemoteMessages = async ({
587
588
  extraOptions: {
588
589
  cacheOptions = DEFAULT_CACHE_OPTIONS,
589
590
  loggerOptions = { id: "default" }
590
- } = {}
591
+ } = {},
592
+ allowCacheWrite
591
593
  }) => {
592
594
  const baseLogger = getLogger({ ...loggerOptions });
593
595
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -631,7 +633,7 @@ var loadRemoteMessages = async ({
631
633
  });
632
634
  }
633
635
  }
634
- if (cacheOptions.enabled && key && messages) {
636
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
635
637
  await pool?.set(key, messages, cacheOptions.ttl);
636
638
  }
637
639
  const end = performance.now();
@@ -648,7 +650,8 @@ var loadMessages = async ({
648
650
  config,
649
651
  locale,
650
652
  pathname = "",
651
- extraOptions: { exts, messagesReader } = {}
653
+ extraOptions: { exts, messagesReader } = {},
654
+ allowCacheWrite = false
652
655
  }) => {
653
656
  const baseLogger = getLogger({ id: config.id, ...config.logger });
654
657
  const logger = baseLogger.child({ scope: "load-messages" });
@@ -685,7 +688,8 @@ var loadMessages = async ({
685
688
  loggerOptions: { id: config.id, ...config.logger },
686
689
  exts,
687
690
  messagesReader
688
- }
691
+ },
692
+ allowCacheWrite
689
693
  });
690
694
  } else if (type === "remote") {
691
695
  loadedMessages = await loadRemoteMessages({
@@ -730,7 +734,8 @@ var intor = async (config, i18nContext, loadMessagesOptions = {}) => {
730
734
  extraOptions: {
731
735
  exts: loadMessagesOptions.exts,
732
736
  messagesReader: loadMessagesOptions.messagesReader
733
- }
737
+ },
738
+ allowCacheWrite: true
734
739
  });
735
740
  }
736
741
  const mergedMessages = mergeMessages(messages, loadedMessages);
package/dist/index.d.cts CHANGED
@@ -212,6 +212,7 @@ type LoadMessagesOptions = {
212
212
  exts?: string[];
213
213
  messagesReader?: MessagesReader;
214
214
  };
215
+ allowCacheWrite?: boolean;
215
216
  };
216
217
  type LoadMessagesResult<C extends GenConfigKeys = "__default__"> = Promise<GenMessages<C> | undefined>;
217
218
 
@@ -223,7 +224,7 @@ type LoadMessagesResult<C extends GenConfigKeys = "__default__"> = Promise<GenMe
223
224
  * - Apply fallback locales if needed.
224
225
  * - Cache messages if enabled (handled by underlying loader, not this function directly).
225
226
  */
226
- declare const loadMessages: <C extends GenConfigKeys = "__default__">({ config, locale, pathname, extraOptions: { exts, messagesReader }, }: LoadMessagesOptions) => LoadMessagesResult<C>;
227
+ declare const loadMessages: <C extends GenConfigKeys = "__default__">({ config, locale, pathname, extraOptions: { exts, messagesReader }, allowCacheWrite, }: LoadMessagesOptions) => LoadMessagesResult<C>;
227
228
 
228
229
  /**
229
230
  * Global messages pool (cross-module + hot-reload safe)
@@ -253,6 +254,7 @@ interface LoadLocalMessagesOptions {
253
254
  exts?: string[];
254
255
  messagesReader?: MessagesReader;
255
256
  };
257
+ allowCacheWrite?: boolean;
256
258
  }
257
259
 
258
260
  /**
@@ -263,7 +265,7 @@ interface LoadLocalMessagesOptions {
263
265
  * - Cache messages if enabled.
264
266
  * - Limit concurrent file reads for performance.
265
267
  */
266
- declare const loadLocalMessages: ({ pool, rootDir, locale, fallbackLocales, namespaces, extraOptions: { concurrency, cacheOptions, loggerOptions, exts, messagesReader, }, }: LoadLocalMessagesOptions) => Promise<LocaleMessages | undefined>;
268
+ declare const loadLocalMessages: ({ pool, rootDir, locale, fallbackLocales, namespaces, extraOptions: { concurrency, cacheOptions, loggerOptions, exts, messagesReader, }, allowCacheWrite, }: LoadLocalMessagesOptions) => Promise<LocaleMessages | undefined>;
267
269
 
268
270
  interface LoadRemoteMessagesOptions {
269
271
  pool?: MessagesPool;
@@ -279,6 +281,7 @@ interface LoadRemoteMessagesOptions {
279
281
  id?: string;
280
282
  };
281
283
  };
284
+ allowCacheWrite?: boolean;
282
285
  }
283
286
 
284
287
  /**
@@ -287,7 +290,7 @@ interface LoadRemoteMessagesOptions {
287
290
  * - Fetch messages for a target locale with optional fallback locales.
288
291
  * - Cache messages if enabled.
289
292
  */
290
- declare const loadRemoteMessages: ({ pool, rootDir, remoteUrl, remoteHeaders, locale, fallbackLocales, namespaces, extraOptions: { cacheOptions, loggerOptions, }, }: LoadRemoteMessagesOptions) => Promise<LocaleMessages | undefined>;
293
+ declare const loadRemoteMessages: ({ pool, rootDir, remoteUrl, remoteHeaders, locale, fallbackLocales, namespaces, extraOptions: { cacheOptions, loggerOptions, }, allowCacheWrite, }: LoadRemoteMessagesOptions) => Promise<LocaleMessages | undefined>;
291
294
 
292
295
  /**
293
296
  * Entry point for initializing Intor.
package/dist/index.d.ts CHANGED
@@ -212,6 +212,7 @@ type LoadMessagesOptions = {
212
212
  exts?: string[];
213
213
  messagesReader?: MessagesReader;
214
214
  };
215
+ allowCacheWrite?: boolean;
215
216
  };
216
217
  type LoadMessagesResult<C extends GenConfigKeys = "__default__"> = Promise<GenMessages<C> | undefined>;
217
218
 
@@ -223,7 +224,7 @@ type LoadMessagesResult<C extends GenConfigKeys = "__default__"> = Promise<GenMe
223
224
  * - Apply fallback locales if needed.
224
225
  * - Cache messages if enabled (handled by underlying loader, not this function directly).
225
226
  */
226
- declare const loadMessages: <C extends GenConfigKeys = "__default__">({ config, locale, pathname, extraOptions: { exts, messagesReader }, }: LoadMessagesOptions) => LoadMessagesResult<C>;
227
+ declare const loadMessages: <C extends GenConfigKeys = "__default__">({ config, locale, pathname, extraOptions: { exts, messagesReader }, allowCacheWrite, }: LoadMessagesOptions) => LoadMessagesResult<C>;
227
228
 
228
229
  /**
229
230
  * Global messages pool (cross-module + hot-reload safe)
@@ -253,6 +254,7 @@ interface LoadLocalMessagesOptions {
253
254
  exts?: string[];
254
255
  messagesReader?: MessagesReader;
255
256
  };
257
+ allowCacheWrite?: boolean;
256
258
  }
257
259
 
258
260
  /**
@@ -263,7 +265,7 @@ interface LoadLocalMessagesOptions {
263
265
  * - Cache messages if enabled.
264
266
  * - Limit concurrent file reads for performance.
265
267
  */
266
- declare const loadLocalMessages: ({ pool, rootDir, locale, fallbackLocales, namespaces, extraOptions: { concurrency, cacheOptions, loggerOptions, exts, messagesReader, }, }: LoadLocalMessagesOptions) => Promise<LocaleMessages | undefined>;
268
+ declare const loadLocalMessages: ({ pool, rootDir, locale, fallbackLocales, namespaces, extraOptions: { concurrency, cacheOptions, loggerOptions, exts, messagesReader, }, allowCacheWrite, }: LoadLocalMessagesOptions) => Promise<LocaleMessages | undefined>;
267
269
 
268
270
  interface LoadRemoteMessagesOptions {
269
271
  pool?: MessagesPool;
@@ -279,6 +281,7 @@ interface LoadRemoteMessagesOptions {
279
281
  id?: string;
280
282
  };
281
283
  };
284
+ allowCacheWrite?: boolean;
282
285
  }
283
286
 
284
287
  /**
@@ -287,7 +290,7 @@ interface LoadRemoteMessagesOptions {
287
290
  * - Fetch messages for a target locale with optional fallback locales.
288
291
  * - Cache messages if enabled.
289
292
  */
290
- declare const loadRemoteMessages: ({ pool, rootDir, remoteUrl, remoteHeaders, locale, fallbackLocales, namespaces, extraOptions: { cacheOptions, loggerOptions, }, }: LoadRemoteMessagesOptions) => Promise<LocaleMessages | undefined>;
293
+ declare const loadRemoteMessages: ({ pool, rootDir, remoteUrl, remoteHeaders, locale, fallbackLocales, namespaces, extraOptions: { cacheOptions, loggerOptions, }, allowCacheWrite, }: LoadRemoteMessagesOptions) => Promise<LocaleMessages | undefined>;
291
294
 
292
295
  /**
293
296
  * Entry point for initializing Intor.
package/dist/index.js CHANGED
@@ -447,7 +447,8 @@ var loadLocalMessages = async ({
447
447
  loggerOptions = { id: "default" },
448
448
  exts,
449
449
  messagesReader
450
- } = {}
450
+ } = {},
451
+ allowCacheWrite = false
451
452
  }) => {
452
453
  const baseLogger = getLogger({ ...loggerOptions });
453
454
  const logger = baseLogger.child({ scope: "load-local-messages" });
@@ -494,7 +495,7 @@ var loadLocalMessages = async ({
494
495
  });
495
496
  }
496
497
  }
497
- if (cacheOptions.enabled && key && messages) {
498
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
498
499
  await pool?.set(key, messages, cacheOptions.ttl);
499
500
  }
500
501
  const end = performance$1.now();
@@ -578,7 +579,8 @@ var loadRemoteMessages = async ({
578
579
  extraOptions: {
579
580
  cacheOptions = DEFAULT_CACHE_OPTIONS,
580
581
  loggerOptions = { id: "default" }
581
- } = {}
582
+ } = {},
583
+ allowCacheWrite
582
584
  }) => {
583
585
  const baseLogger = getLogger({ ...loggerOptions });
584
586
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -622,7 +624,7 @@ var loadRemoteMessages = async ({
622
624
  });
623
625
  }
624
626
  }
625
- if (cacheOptions.enabled && key && messages) {
627
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
626
628
  await pool?.set(key, messages, cacheOptions.ttl);
627
629
  }
628
630
  const end = performance.now();
@@ -639,7 +641,8 @@ var loadMessages = async ({
639
641
  config,
640
642
  locale,
641
643
  pathname = "",
642
- extraOptions: { exts, messagesReader } = {}
644
+ extraOptions: { exts, messagesReader } = {},
645
+ allowCacheWrite = false
643
646
  }) => {
644
647
  const baseLogger = getLogger({ id: config.id, ...config.logger });
645
648
  const logger = baseLogger.child({ scope: "load-messages" });
@@ -676,7 +679,8 @@ var loadMessages = async ({
676
679
  loggerOptions: { id: config.id, ...config.logger },
677
680
  exts,
678
681
  messagesReader
679
- }
682
+ },
683
+ allowCacheWrite
680
684
  });
681
685
  } else if (type === "remote") {
682
686
  loadedMessages = await loadRemoteMessages({
@@ -721,7 +725,8 @@ var intor = async (config, i18nContext, loadMessagesOptions = {}) => {
721
725
  extraOptions: {
722
726
  exts: loadMessagesOptions.exts,
723
727
  messagesReader: loadMessagesOptions.messagesReader
724
- }
728
+ },
729
+ allowCacheWrite: true
725
730
  });
726
731
  }
727
732
  const mergedMessages = mergeMessages(messages, loadedMessages);
@@ -385,7 +385,8 @@ var loadRemoteMessages = async ({
385
385
  extraOptions: {
386
386
  cacheOptions = DEFAULT_CACHE_OPTIONS,
387
387
  loggerOptions = { id: "default" }
388
- } = {}
388
+ } = {},
389
+ allowCacheWrite
389
390
  }) => {
390
391
  const baseLogger = getLogger({ ...loggerOptions });
391
392
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -429,7 +430,7 @@ var loadRemoteMessages = async ({
429
430
  });
430
431
  }
431
432
  }
432
- if (cacheOptions.enabled && key && messages) {
433
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
433
434
  await pool?.set(key, messages, cacheOptions.ttl);
434
435
  }
435
436
  const end = performance.now();
@@ -804,12 +805,16 @@ var usePathname = () => {
804
805
  const { config } = useConfig();
805
806
  const { locale } = useLocale();
806
807
  const rawPathname = navigation.usePathname();
807
- const { localePrefixedPathname } = localizePathname({
808
+ const { localePrefixedPathname, standardizedPathname, unprefixedPathname } = localizePathname({
808
809
  config,
809
810
  pathname: rawPathname,
810
811
  locale
811
812
  });
812
- return localePrefixedPathname;
813
+ return {
814
+ localizedPathname: localePrefixedPathname,
815
+ standardizedPathname,
816
+ unprefixedPathname
817
+ };
813
818
  };
814
819
 
815
820
  // src/adapters/next/navigation/utils/should-full-reload.ts
@@ -834,14 +839,14 @@ var shouldFullReload = ({
834
839
  var useLocaleSwitch = () => {
835
840
  const { config } = useConfig();
836
841
  const { locale: currentLocale, setLocale } = useLocale();
837
- const pathname = usePathname();
842
+ const { localizedPathname } = usePathname();
838
843
  const resolveHref = ({
839
844
  href,
840
845
  locale
841
846
  }) => {
842
847
  const isLocaleValid = locale && config.supportedLocales?.includes(locale);
843
848
  const targetLocale = isLocaleValid ? locale : currentLocale;
844
- const targetPathname = href ?? pathname;
849
+ const targetPathname = href ?? localizedPathname;
845
850
  const isExternal = targetPathname.startsWith("http");
846
851
  const resolvedHref = !isExternal ? localizePathname({
847
852
  config,
@@ -229,11 +229,22 @@ interface LinkProps extends Omit<LinkProps$1, "href">, Omit<React.AnchorHTMLAttr
229
229
  declare const Link: ({ href, locale, children, onClick, ...props }: LinkProps) => React.JSX.Element;
230
230
 
231
231
  /**
232
- * usePathname hook
232
+ * Custom hook to get the current pathname in different forms based on the active locale.
233
233
  *
234
- * Wraps Next.js usePathname and returns the current pathname prefixed with the active locale.
234
+ * This hook wraps Next.js `usePathname` and processes the pathname according to the app's
235
+ * locale configuration.
236
+ *
237
+ * @example
238
+ * const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
239
+ * console.log(localizedPathname); // e.g. "/en/about"
240
+ * console.log(standardizedPathname); // e.g. "/{locale}/about"
241
+ * console.log(unprefixedPathname); // e.g. "/about"
235
242
  */
236
- declare const usePathname: () => string;
243
+ declare const usePathname: () => {
244
+ localizedPathname: string;
245
+ standardizedPathname: string;
246
+ unprefixedPathname: string;
247
+ };
237
248
 
238
249
  /**
239
250
  * useRouter hook.
@@ -229,11 +229,22 @@ interface LinkProps extends Omit<LinkProps$1, "href">, Omit<React.AnchorHTMLAttr
229
229
  declare const Link: ({ href, locale, children, onClick, ...props }: LinkProps) => React.JSX.Element;
230
230
 
231
231
  /**
232
- * usePathname hook
232
+ * Custom hook to get the current pathname in different forms based on the active locale.
233
233
  *
234
- * Wraps Next.js usePathname and returns the current pathname prefixed with the active locale.
234
+ * This hook wraps Next.js `usePathname` and processes the pathname according to the app's
235
+ * locale configuration.
236
+ *
237
+ * @example
238
+ * const { localizedPathname, standardizedPathname, unprefixedPathname } = usePathname();
239
+ * console.log(localizedPathname); // e.g. "/en/about"
240
+ * console.log(standardizedPathname); // e.g. "/{locale}/about"
241
+ * console.log(unprefixedPathname); // e.g. "/about"
235
242
  */
236
- declare const usePathname: () => string;
243
+ declare const usePathname: () => {
244
+ localizedPathname: string;
245
+ standardizedPathname: string;
246
+ unprefixedPathname: string;
247
+ };
237
248
 
238
249
  /**
239
250
  * useRouter hook.
@@ -358,7 +358,8 @@ var loadRemoteMessages = async ({
358
358
  extraOptions: {
359
359
  cacheOptions = DEFAULT_CACHE_OPTIONS,
360
360
  loggerOptions = { id: "default" }
361
- } = {}
361
+ } = {},
362
+ allowCacheWrite
362
363
  }) => {
363
364
  const baseLogger = getLogger({ ...loggerOptions });
364
365
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -402,7 +403,7 @@ var loadRemoteMessages = async ({
402
403
  });
403
404
  }
404
405
  }
405
- if (cacheOptions.enabled && key && messages) {
406
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
406
407
  await pool?.set(key, messages, cacheOptions.ttl);
407
408
  }
408
409
  const end = performance.now();
@@ -777,12 +778,16 @@ var usePathname = () => {
777
778
  const { config } = useConfig();
778
779
  const { locale } = useLocale();
779
780
  const rawPathname = usePathname$1();
780
- const { localePrefixedPathname } = localizePathname({
781
+ const { localePrefixedPathname, standardizedPathname, unprefixedPathname } = localizePathname({
781
782
  config,
782
783
  pathname: rawPathname,
783
784
  locale
784
785
  });
785
- return localePrefixedPathname;
786
+ return {
787
+ localizedPathname: localePrefixedPathname,
788
+ standardizedPathname,
789
+ unprefixedPathname
790
+ };
786
791
  };
787
792
 
788
793
  // src/adapters/next/navigation/utils/should-full-reload.ts
@@ -807,14 +812,14 @@ var shouldFullReload = ({
807
812
  var useLocaleSwitch = () => {
808
813
  const { config } = useConfig();
809
814
  const { locale: currentLocale, setLocale } = useLocale();
810
- const pathname = usePathname();
815
+ const { localizedPathname } = usePathname();
811
816
  const resolveHref = ({
812
817
  href,
813
818
  locale
814
819
  }) => {
815
820
  const isLocaleValid = locale && config.supportedLocales?.includes(locale);
816
821
  const targetLocale = isLocaleValid ? locale : currentLocale;
817
- const targetPathname = href ?? pathname;
822
+ const targetPathname = href ?? localizedPathname;
818
823
  const isExternal = targetPathname.startsWith("http");
819
824
  const resolvedHref = !isExternal ? localizePathname({
820
825
  config,
@@ -434,7 +434,8 @@ var loadLocalMessages = async ({
434
434
  loggerOptions = { id: "default" },
435
435
  exts,
436
436
  messagesReader
437
- } = {}
437
+ } = {},
438
+ allowCacheWrite = false
438
439
  }) => {
439
440
  const baseLogger = getLogger({ ...loggerOptions });
440
441
  const logger = baseLogger.child({ scope: "load-local-messages" });
@@ -481,7 +482,7 @@ var loadLocalMessages = async ({
481
482
  });
482
483
  }
483
484
  }
484
- if (cacheOptions.enabled && key && messages) {
485
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
485
486
  await pool?.set(key, messages, cacheOptions.ttl);
486
487
  }
487
488
  const end = perf_hooks.performance.now();
@@ -565,7 +566,8 @@ var loadRemoteMessages = async ({
565
566
  extraOptions: {
566
567
  cacheOptions = DEFAULT_CACHE_OPTIONS,
567
568
  loggerOptions = { id: "default" }
568
- } = {}
569
+ } = {},
570
+ allowCacheWrite
569
571
  }) => {
570
572
  const baseLogger = getLogger({ ...loggerOptions });
571
573
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -609,7 +611,7 @@ var loadRemoteMessages = async ({
609
611
  });
610
612
  }
611
613
  }
612
- if (cacheOptions.enabled && key && messages) {
614
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
613
615
  await pool?.set(key, messages, cacheOptions.ttl);
614
616
  }
615
617
  const end = performance.now();
@@ -626,7 +628,8 @@ var loadMessages = async ({
626
628
  config,
627
629
  locale,
628
630
  pathname = "",
629
- extraOptions: { exts, messagesReader } = {}
631
+ extraOptions: { exts, messagesReader } = {},
632
+ allowCacheWrite = false
630
633
  }) => {
631
634
  const baseLogger = getLogger({ id: config.id, ...config.logger });
632
635
  const logger = baseLogger.child({ scope: "load-messages" });
@@ -663,7 +666,8 @@ var loadMessages = async ({
663
666
  loggerOptions: { id: config.id, ...config.logger },
664
667
  exts,
665
668
  messagesReader
666
- }
669
+ },
670
+ allowCacheWrite
667
671
  });
668
672
  } else if (type === "remote") {
669
673
  loadedMessages = await loadRemoteMessages({
@@ -160,7 +160,7 @@ interface I18nContext {
160
160
  *
161
161
  * Next.js adapter implementation: uses `next/headers` and `next/cookies`.
162
162
  */
163
- declare const getI18nContext: <CK extends string = "__default__">(config: IntorResolvedConfig) => Promise<I18nContext>;
163
+ declare const getI18nContext: <CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig) => Promise<I18nContext>;
164
164
 
165
165
  /** Base properties shared by all translator instances. */
166
166
  interface TranslatorBaseProps<M = unknown> {
@@ -160,7 +160,7 @@ interface I18nContext {
160
160
  *
161
161
  * Next.js adapter implementation: uses `next/headers` and `next/cookies`.
162
162
  */
163
- declare const getI18nContext: <CK extends string = "__default__">(config: IntorResolvedConfig) => Promise<I18nContext>;
163
+ declare const getI18nContext: <CK extends GenConfigKeys = "__default__">(config: IntorResolvedConfig) => Promise<I18nContext>;
164
164
 
165
165
  /** Base properties shared by all translator instances. */
166
166
  interface TranslatorBaseProps<M = unknown> {
@@ -424,7 +424,8 @@ var loadLocalMessages = async ({
424
424
  loggerOptions = { id: "default" },
425
425
  exts,
426
426
  messagesReader
427
- } = {}
427
+ } = {},
428
+ allowCacheWrite = false
428
429
  }) => {
429
430
  const baseLogger = getLogger({ ...loggerOptions });
430
431
  const logger = baseLogger.child({ scope: "load-local-messages" });
@@ -471,7 +472,7 @@ var loadLocalMessages = async ({
471
472
  });
472
473
  }
473
474
  }
474
- if (cacheOptions.enabled && key && messages) {
475
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
475
476
  await pool?.set(key, messages, cacheOptions.ttl);
476
477
  }
477
478
  const end = performance$1.now();
@@ -555,7 +556,8 @@ var loadRemoteMessages = async ({
555
556
  extraOptions: {
556
557
  cacheOptions = DEFAULT_CACHE_OPTIONS,
557
558
  loggerOptions = { id: "default" }
558
- } = {}
559
+ } = {},
560
+ allowCacheWrite
559
561
  }) => {
560
562
  const baseLogger = getLogger({ ...loggerOptions });
561
563
  const logger = baseLogger.child({ scope: "load-remote-messages" });
@@ -599,7 +601,7 @@ var loadRemoteMessages = async ({
599
601
  });
600
602
  }
601
603
  }
602
- if (cacheOptions.enabled && key && messages) {
604
+ if (allowCacheWrite && cacheOptions.enabled && key && messages) {
603
605
  await pool?.set(key, messages, cacheOptions.ttl);
604
606
  }
605
607
  const end = performance.now();
@@ -616,7 +618,8 @@ var loadMessages = async ({
616
618
  config,
617
619
  locale,
618
620
  pathname = "",
619
- extraOptions: { exts, messagesReader } = {}
621
+ extraOptions: { exts, messagesReader } = {},
622
+ allowCacheWrite = false
620
623
  }) => {
621
624
  const baseLogger = getLogger({ id: config.id, ...config.logger });
622
625
  const logger = baseLogger.child({ scope: "load-messages" });
@@ -653,7 +656,8 @@ var loadMessages = async ({
653
656
  loggerOptions: { id: config.id, ...config.logger },
654
657
  exts,
655
658
  messagesReader
656
- }
659
+ },
660
+ allowCacheWrite
657
661
  });
658
662
  } else if (type === "remote") {
659
663
  loadedMessages = await loadRemoteMessages({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intor",
3
- "version": "2.2.3",
3
+ "version": "2.2.5",
4
4
  "description": "A modular and extensible i18n core designed for TypeScript and JavaScript projects. Intor enables custom translation logic with support for both frontend and backend environments, featuring runtime configuration, caching, adapters, and message loaders.",
5
5
  "author": "Yiming Liao",
6
6
  "license": "MIT",
@@ -77,21 +77,22 @@
77
77
  "p-limit": "^6.2.0"
78
78
  },
79
79
  "devDependencies": {
80
+ "@intor/cli": "^0.1.2",
80
81
  "@types/lodash.merge": "^4.6.9",
81
82
  "@types/node": "^24.10.1",
82
83
  "@types/react": "^19.1.4",
83
84
  "@types/react-dom": "^19.1.5",
84
85
  "@vitest/coverage-v8": "4.0.9",
85
86
  "eslint": "^9.27.0",
86
- "eslint-config-prettier": "^10.1.5",
87
+ "eslint-config-prettier": "^10.1.8",
87
88
  "eslint-import-resolver-typescript": "^4.4.4",
88
89
  "eslint-plugin-import": "^2.31.0",
89
- "eslint-plugin-prettier": "^5.4.0",
90
+ "eslint-plugin-prettier": "^5.5.4",
90
91
  "eslint-plugin-unicorn": "^62.0.0",
91
92
  "eslint-plugin-unused-imports": "^4.1.4",
92
93
  "knip": "^5.69.1",
93
94
  "next": "16",
94
- "prettier": "^3.5.3",
95
+ "prettier": "^3.6.2",
95
96
  "react": "^19.1.0",
96
97
  "react-dom": "^19.1.0",
97
98
  "remark": "^15.0.1",