File: modules.test.ts

package info (click to toggle)
node-i18next 23.7.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,780 kB
  • sloc: javascript: 13,315; makefile: 2
file content (94 lines) | stat: -rw-r--r-- 2,065 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import i18next, {
  Modules,
  BackendModule,
  LanguageDetectorModule,
  LoggerModule,
  I18nFormatModule,
  ThirdPartyModule,
  FormatterModule,
} from 'i18next';

// declare modules in a way that the `type` is not widened
// @see https://github.com/microsoft/TypeScript/issues/20271#issuecomment-347020203

const backendModule: BackendModule = {
  type: 'backend',
  init: () => null,
  read: (_language, _namespace, callback) => {
    callback(null, {
      key: 'value',
    });
  },
  create: () => null,
  readMulti: (_languages, _namespaces, callback) => {
    callback(null, {
      en: {
        namespace: {
          key: 'value',
        },
      },
    });
  },
  save: () => null,
};

const languageDetectorModule: LanguageDetectorModule = {
  type: 'languageDetector',
  init: () => null,
  detect: () => '',
  cacheUserLanguage: () => null,
};

const loggerModule: LoggerModule = {
  type: 'logger',
  log: () => null,
  warn: () => null,
  error: () => null,
};

const i18nFormatModule: I18nFormatModule = {
  type: 'i18nFormat',
};

const formatterModule: FormatterModule = {
  type: 'formatter',
  init: () => null,
  add: () => null,
  addCached: () => () => null,
  format: () => '',
};

const thirdPartyModule: ThirdPartyModule = {
  type: '3rdParty',
  init: () => null,
};

const externalModules = [thirdPartyModule];

const modules: Modules = {
  backend: backendModule,
  languageDetector: languageDetectorModule,
  i18nFormat: i18nFormatModule,
  logger: loggerModule,
  formatter: formatterModule,
  external: externalModules,
};

i18next.use(backendModule);
i18next.use(languageDetectorModule);
i18next.use(loggerModule);
i18next.use(i18nFormatModule);
i18next.use(formatterModule);
i18next.use(thirdPartyModule);

// exercise class usage
// Need both static and member definitions of type to satisfy use() signature, see #1442
class MyLoggerModule implements LoggerModule {
  static type: 'logger' = 'logger';
  type: 'logger' = 'logger';
  log = () => null;
  warn = () => null;
  error = () => null;
}

i18next.use(MyLoggerModule);