erudit 2.0.0-dev.9 → 3.0.0-dev.1

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 (237) hide show
  1. package/app/app.vue +172 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +382 -382
  4. package/app/components/SiteMain.vue +35 -35
  5. package/app/components/ads/BannerTemplate.vue +51 -51
  6. package/app/components/ads/BottomBanner.vue +45 -45
  7. package/app/components/ads/LeftBanner.vue +50 -50
  8. package/app/components/aside/AsideListItem.vue +74 -74
  9. package/app/components/aside/AsideMajor.vue +56 -56
  10. package/app/components/aside/AsideMinor.vue +71 -71
  11. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  12. package/app/components/aside/major/PaneSwitch.vue +54 -54
  13. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  14. package/app/components/aside/major/SiteInfo.vue +85 -85
  15. package/app/components/aside/major/panes/Language.vue +79 -79
  16. package/app/components/aside/major/panes/Pages.vue +34 -34
  17. package/app/components/aside/major/panes/Search.vue +11 -3
  18. package/app/components/aside/major/panes/nav/Nav.vue +91 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +86 -86
  20. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  21. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  22. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  23. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  24. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  25. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  26. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  27. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  28. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  29. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  30. package/app/components/aside/major/panes/other/ItemGenerator.vue +15 -15
  31. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  32. package/app/components/aside/major/panes/other/Other.vue +16 -16
  33. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  34. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  35. package/app/components/aside/minor/AsideMinorPane.vue +15 -16
  36. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  37. package/app/components/aside/minor/Contribute.vue +145 -145
  38. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  39. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  40. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  41. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  42. package/app/components/aside/minor/topic/TopicToc.vue +203 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +63 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +43 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +79 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +75 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -20
  54. package/app/components/main/utils/ContentFlag.vue +15 -16
  55. package/app/components/main/utils/ContentPopover.vue +176 -176
  56. package/app/components/main/utils/ContentPopovers.vue +105 -105
  57. package/app/components/main/utils/ContentReferences.vue +70 -76
  58. package/app/components/main/utils/ContentSection.vue +45 -42
  59. package/app/components/main/utils/ContentTitle.vue +39 -37
  60. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -41
  61. package/app/components/main/utils/reference/ReferenceItem.vue +68 -64
  62. package/app/components/main/utils/reference/ReferenceSource.vue +116 -110
  63. package/app/components/preview/Preview.vue +177 -177
  64. package/app/components/preview/PreviewDisplay.vue +139 -139
  65. package/app/components/preview/PreviewFooterAction.vue +73 -73
  66. package/app/components/preview/PreviewLoading.vue +14 -15
  67. package/app/components/preview/PreviewScreen.vue +99 -99
  68. package/app/components/preview/display/Alert.vue +50 -50
  69. package/app/components/preview/display/Custom.vue +18 -18
  70. package/app/components/preview/display/GenericLink.vue +48 -48
  71. package/app/components/preview/display/PageLink.vue +20 -20
  72. package/app/components/preview/display/Unique.vue +49 -49
  73. package/app/components/transition/Fade.vue +19 -22
  74. package/app/components/tree/TreeContainer.vue +11 -12
  75. package/app/components/tree/TreeItem.vue +89 -89
  76. package/app/composables/bitran.ts +127 -127
  77. package/app/composables/bitranContent.ts +37 -37
  78. package/app/composables/bitranLocation.ts +7 -7
  79. package/app/composables/contentData.ts +36 -36
  80. package/app/composables/contentPage.ts +156 -156
  81. package/app/composables/contentRoute.ts +45 -45
  82. package/app/composables/darkMagic.ts +24 -24
  83. package/app/composables/externalApi.ts +63 -63
  84. package/app/composables/favicon.ts +8 -8
  85. package/app/composables/formatText.ts +86 -86
  86. package/app/composables/majorPane.ts +60 -60
  87. package/app/composables/phrases.ts +80 -80
  88. package/app/composables/theme.ts +29 -29
  89. package/app/composables/url.ts +33 -33
  90. package/app/pages/_test/preview.vue +110 -110
  91. package/app/pages/article/[...articleId].vue +3 -3
  92. package/app/pages/book/[...bookId].vue +47 -47
  93. package/app/pages/group/[...groupId].vue +65 -65
  94. package/app/pages/index.vue +32 -32
  95. package/app/pages/members.vue +6 -7
  96. package/app/pages/practice/[...practice].vue +3 -3
  97. package/app/pages/summary/[...summaryId].vue +3 -3
  98. package/app/scripts/_immediate.js +9 -4
  99. package/app/scripts/aside/index.ts +59 -59
  100. package/app/scripts/aside/major/nav.ts +26 -26
  101. package/app/scripts/aside/minor/state.ts +37 -37
  102. package/app/scripts/aside/minor/topic.ts +3 -3
  103. package/app/scripts/flag.ts +28 -28
  104. package/app/scripts/og.ts +27 -27
  105. package/app/scripts/preview/build.ts +73 -84
  106. package/app/scripts/preview/data/alert.ts +19 -19
  107. package/app/scripts/preview/data/custom.ts +8 -8
  108. package/app/scripts/preview/data/genericLink.ts +24 -24
  109. package/app/scripts/preview/data/pageLink.ts +20 -20
  110. package/app/scripts/preview/data/unique.ts +70 -70
  111. package/app/scripts/preview/data.ts +24 -26
  112. package/app/scripts/preview/display.ts +37 -37
  113. package/app/scripts/preview/footer.ts +9 -9
  114. package/app/scripts/preview/request.ts +51 -51
  115. package/app/scripts/preview/state.ts +63 -63
  116. package/app/styles/_immediate.css +7 -3
  117. package/app/styles/_util.scss +43 -50
  118. package/app/styles/_utils.scss +44 -44
  119. package/app/styles/app.scss +91 -91
  120. package/app/styles/def/_bp.scss +27 -24
  121. package/app/styles/def/_size.scss +7 -7
  122. package/app/styles/def/_z.scss +5 -5
  123. package/app/styles/default.scss +83 -85
  124. package/app/styles/normalize.scss +63 -63
  125. package/app/styles/partials/_darkMagic.scss +5 -7
  126. package/app/styles/partials/_fnav.scss +15 -18
  127. package/app/styles/partials/_preview.scss +5 -7
  128. package/globalPath.ts +21 -21
  129. package/globals/bitran.ts +47 -47
  130. package/globals/content.ts +22 -22
  131. package/globals/contributor.ts +5 -5
  132. package/globals/erudit.ts +5 -5
  133. package/globals/register.ts +18 -18
  134. package/languages/en.ts +95 -95
  135. package/languages/ru.ts +99 -99
  136. package/module/bitran.ts +34 -34
  137. package/module/config.ts +34 -34
  138. package/module/imports.ts +46 -46
  139. package/module/index.ts +47 -47
  140. package/module/logger.ts +10 -10
  141. package/module/paths.ts +22 -22
  142. package/module/restart.ts +61 -61
  143. package/nuxt.config.ts +111 -107
  144. package/package.json +3 -3
  145. package/server/api/aside/major/nav/bookIds.ts +5 -5
  146. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  147. package/server/api/aside/major/nav/global.ts +7 -7
  148. package/server/api/aside/minor/news.ts +7 -7
  149. package/server/api/aside/minor/path.ts +78 -78
  150. package/server/api/bitran/content/[location].ts +7 -7
  151. package/server/api/bitran/toc/[location].ts +7 -7
  152. package/server/api/content/data.ts +72 -72
  153. package/server/api/contributor/count.ts +6 -6
  154. package/server/api/fake/content.ts +11 -11
  155. package/server/api/fake/shared/languages.ts +12 -12
  156. package/server/api/language/functions.ts +12 -12
  157. package/server/api/language/phrase/[phraseId].ts +19 -19
  158. package/server/api/language/phraseIds.ts +8 -8
  159. package/server/api/preview/page/[...parts].ts +51 -51
  160. package/server/api/preview/unique/[location].ts +55 -55
  161. package/server/plugin/bitran/content.ts +187 -187
  162. package/server/plugin/bitran/location.ts +25 -25
  163. package/server/plugin/bitran/products/include.ts +230 -230
  164. package/server/plugin/bitran/products/link.ts +116 -116
  165. package/server/plugin/bitran/setup.ts +9 -9
  166. package/server/plugin/bitran/toc.ts +83 -83
  167. package/server/plugin/bitran/transpiler.ts +46 -46
  168. package/server/plugin/build/close.ts +10 -10
  169. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  170. package/server/plugin/build/jobs/content/generic.ts +176 -176
  171. package/server/plugin/build/jobs/content/parse.ts +100 -100
  172. package/server/plugin/build/jobs/content/path.ts +6 -6
  173. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  174. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  175. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  176. package/server/plugin/build/jobs/contributors.ts +66 -66
  177. package/server/plugin/build/jobs/language.ts +36 -36
  178. package/server/plugin/build/jobs/nav.ts +209 -209
  179. package/server/plugin/build/process.ts +25 -25
  180. package/server/plugin/build/rebuild.ts +55 -55
  181. package/server/plugin/build/setup.ts +21 -21
  182. package/server/plugin/content/absoluteId.ts +94 -94
  183. package/server/plugin/content/context.ts +112 -112
  184. package/server/plugin/db/entities/Book.ts +7 -7
  185. package/server/plugin/db/entities/Content.ts +49 -49
  186. package/server/plugin/db/entities/Contribution.ts +10 -10
  187. package/server/plugin/db/entities/Contributor.ts +16 -16
  188. package/server/plugin/db/entities/Group.ts +14 -14
  189. package/server/plugin/db/entities/Hash.ts +15 -15
  190. package/server/plugin/db/entities/Topic.ts +20 -20
  191. package/server/plugin/db/entities/Unique.ts +21 -21
  192. package/server/plugin/db/setup.ts +34 -34
  193. package/server/plugin/global.ts +18 -18
  194. package/server/plugin/importer.ts +12 -12
  195. package/server/plugin/index.ts +9 -9
  196. package/server/plugin/logger.ts +23 -23
  197. package/server/plugin/nav/node.ts +26 -26
  198. package/server/plugin/nav/utils.ts +129 -129
  199. package/server/plugin/repository/book.ts +21 -21
  200. package/server/plugin/repository/content.ts +238 -238
  201. package/server/plugin/repository/contributor.ts +8 -8
  202. package/server/plugin/repository/frontNav.ts +148 -148
  203. package/server/plugin/repository/topic.ts +32 -32
  204. package/server/tsconfig.json +7 -7
  205. package/shared/aside/minor.ts +50 -50
  206. package/shared/asset.ts +15 -15
  207. package/shared/bitran/context.ts +8 -8
  208. package/shared/bitran/default.ts +46 -46
  209. package/shared/bitran/link/Link.vue +167 -167
  210. package/shared/bitran/link/factory.ts +24 -24
  211. package/shared/bitran/link/languages/en.ts +7 -7
  212. package/shared/bitran/link/languages/ru.ts +7 -7
  213. package/shared/bitran/link/renderer.ts +21 -21
  214. package/shared/bitran/link/shared.ts +17 -17
  215. package/shared/bitran/link/target.ts +134 -134
  216. package/shared/bitran/link/transpiler.ts +10 -10
  217. package/shared/bitran/location.ts +166 -166
  218. package/shared/bitran/toc.ts +8 -8
  219. package/shared/content/context.ts +9 -9
  220. package/shared/content/data/base.ts +32 -32
  221. package/shared/content/data/index.ts +5 -5
  222. package/shared/content/data/type/book.ts +5 -5
  223. package/shared/content/data/type/group.ts +6 -6
  224. package/shared/content/data/type/topic.ts +11 -11
  225. package/shared/content/previousNext.ts +9 -9
  226. package/shared/contributor.ts +5 -5
  227. package/shared/frontNav.ts +41 -41
  228. package/shared/icons.ts +38 -38
  229. package/shared/image.ts +5 -5
  230. package/shared/link.ts +25 -25
  231. package/shared/types/language.ts +75 -75
  232. package/shared/utils/objectsEqual.ts +4 -4
  233. package/shared/utils/stringColor.ts +9 -9
  234. package/test/bitran/link/target.test.ts +141 -141
  235. package/test/bitran/location.test.ts +143 -143
  236. package/tsconfig.json +8 -8
  237. package/utils/stress.ts +9 -9
@@ -1,36 +1,36 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { topicParts, type TopicPart } from 'erudit-cog/schema';
3
-
4
- import { ERUDIT_SERVER } from '@server/global';
5
- import { DbTopic } from '@server/db/entities/Topic';
6
- import type { BuilderFunctionArgs } from '../builderArgs';
7
- import { contentItemPath } from '../path';
8
- import { parseBitranContent } from '../parse';
9
-
10
- export async function buildTopic({ navNode }: BuilderFunctionArgs) {
11
- const dbTopic = new DbTopic();
12
- dbTopic.contentId = navNode.id;
13
- const existingTopicParts: TopicPart[] = [];
14
-
15
- for (const topicPart of topicParts) {
16
- const partPath = contentItemPath(navNode, `${topicPart}.bi`);
17
- const strContent =
18
- existsSync(partPath) && readFileSync(partPath, 'utf-8');
19
-
20
- if (strContent === false) continue;
21
-
22
- existingTopicParts.push(topicPart);
23
- dbTopic[topicPart] = strContent;
24
-
25
- await parseBitranContent(
26
- {
27
- type: topicPart,
28
- path: navNode.id,
29
- },
30
- strContent,
31
- );
32
- }
33
-
34
- dbTopic.parts = existingTopicParts;
35
- await ERUDIT_SERVER.DB.manager.save(dbTopic);
36
- }
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { topicParts, type TopicPart } from 'erudit-cog/schema';
3
+
4
+ import { ERUDIT_SERVER } from '@server/global';
5
+ import { DbTopic } from '@server/db/entities/Topic';
6
+ import type { BuilderFunctionArgs } from '../builderArgs';
7
+ import { contentItemPath } from '../path';
8
+ import { parseBitranContent } from '../parse';
9
+
10
+ export async function buildTopic({ navNode }: BuilderFunctionArgs) {
11
+ const dbTopic = new DbTopic();
12
+ dbTopic.contentId = navNode.id;
13
+ const existingTopicParts: TopicPart[] = [];
14
+
15
+ for (const topicPart of topicParts) {
16
+ const partPath = contentItemPath(navNode, `${topicPart}.bi`);
17
+ const strContent =
18
+ existsSync(partPath) && readFileSync(partPath, 'utf-8');
19
+
20
+ if (strContent === false) continue;
21
+
22
+ existingTopicParts.push(topicPart);
23
+ dbTopic[topicPart] = strContent;
24
+
25
+ await parseBitranContent(
26
+ {
27
+ type: topicPart,
28
+ path: navNode.id,
29
+ },
30
+ strContent,
31
+ );
32
+ }
33
+
34
+ dbTopic.parts = existingTopicParts;
35
+ await ERUDIT_SERVER.DB.manager.save(dbTopic);
36
+ }
@@ -1,66 +1,66 @@
1
- import { readFileSync } from 'node:fs';
2
- import { globSync } from 'glob';
3
- import path from 'node:path';
4
- import chalk from 'chalk';
5
- import { resolvePaths } from 'erudit-cog/kit';
6
- import type { ContributorConfig } from 'erudit-cog/schema';
7
-
8
- import { PROJECT_DIR } from '#erudit/globalPaths';
9
- import { stress } from '@erudit/utils/stress';
10
- import { debug, logger } from '@server/logger';
11
- import { ERUDIT_SERVER } from '@server/global';
12
- import { IMPORT } from '@server/importer';
13
- import { DbContributor } from '@server/db/entities/Contributor';
14
-
15
- export async function buildContributors() {
16
- debug.start('Building contributors...');
17
-
18
- const contributorPaths = globSync(PROJECT_DIR + '/contributors/*/');
19
- for (const contributorPath of contributorPaths)
20
- await addContributor(resolvePaths(contributorPath));
21
-
22
- logger.success(
23
- `Contributors built successfully!`,
24
- chalk.dim(`(${contributorPaths.length})`),
25
- );
26
- }
27
-
28
- async function addContributor(contributorPath: string) {
29
- const contributorId = contributorPath.split('/').pop() as string;
30
-
31
- debug.start(`Adding contributor ${stress(contributorId)}...`);
32
-
33
- const avatarFilename = (() => {
34
- const avatarPaths = globSync(`${contributorPath}/avatar.*`);
35
- if (avatarPaths[0])
36
- return avatarPaths[0].split(path.sep).slice(-2).join('/');
37
-
38
- return undefined;
39
- })();
40
-
41
- const config: Partial<ContributorConfig> = await (async () => {
42
- try {
43
- return await IMPORT(`${contributorPath}/contributor`, {
44
- default: true,
45
- });
46
- } catch {
47
- return {};
48
- }
49
- })();
50
-
51
- const description = (() => {
52
- try {
53
- return readFileSync(`${contributorPath}/description.bi`, 'utf-8');
54
- } catch {
55
- return undefined;
56
- }
57
- })();
58
-
59
- const dbContributor = new DbContributor();
60
- dbContributor.contributorId = contributorId;
61
- dbContributor.avatar = avatarFilename;
62
- dbContributor.displayName = config.displayName;
63
- dbContributor.description = description;
64
-
65
- await ERUDIT_SERVER.DB.manager.save(dbContributor);
66
- }
1
+ import { readFileSync } from 'node:fs';
2
+ import { globSync } from 'glob';
3
+ import path from 'node:path';
4
+ import chalk from 'chalk';
5
+ import { resolvePaths } from 'erudit-cog/kit';
6
+ import type { ContributorConfig } from 'erudit-cog/schema';
7
+
8
+ import { PROJECT_DIR } from '#erudit/globalPaths';
9
+ import { stress } from '@erudit/utils/stress';
10
+ import { debug, logger } from '@server/logger';
11
+ import { ERUDIT_SERVER } from '@server/global';
12
+ import { IMPORT } from '@server/importer';
13
+ import { DbContributor } from '@server/db/entities/Contributor';
14
+
15
+ export async function buildContributors() {
16
+ debug.start('Building contributors...');
17
+
18
+ const contributorPaths = globSync(PROJECT_DIR + '/contributors/*/');
19
+ for (const contributorPath of contributorPaths)
20
+ await addContributor(resolvePaths(contributorPath));
21
+
22
+ logger.success(
23
+ `Contributors built successfully!`,
24
+ chalk.dim(`(${contributorPaths.length})`),
25
+ );
26
+ }
27
+
28
+ async function addContributor(contributorPath: string) {
29
+ const contributorId = contributorPath.split('/').pop() as string;
30
+
31
+ debug.start(`Adding contributor ${stress(contributorId)}...`);
32
+
33
+ const avatarFilename = (() => {
34
+ const avatarPaths = globSync(`${contributorPath}/avatar.*`);
35
+ if (avatarPaths[0])
36
+ return avatarPaths[0].split(path.sep).slice(-2).join('/');
37
+
38
+ return undefined;
39
+ })();
40
+
41
+ const config: Partial<ContributorConfig> = await (async () => {
42
+ try {
43
+ return await IMPORT(`${contributorPath}/contributor`, {
44
+ default: true,
45
+ });
46
+ } catch {
47
+ return {};
48
+ }
49
+ })();
50
+
51
+ const description = (() => {
52
+ try {
53
+ return readFileSync(`${contributorPath}/description.bi`, 'utf-8');
54
+ } catch {
55
+ return undefined;
56
+ }
57
+ })();
58
+
59
+ const dbContributor = new DbContributor();
60
+ dbContributor.contributorId = contributorId;
61
+ dbContributor.avatar = avatarFilename;
62
+ dbContributor.displayName = config.displayName;
63
+ dbContributor.description = description;
64
+
65
+ await ERUDIT_SERVER.DB.manager.save(dbContributor);
66
+ }
@@ -1,36 +1,36 @@
1
- import { existsSync } from 'node:fs';
2
-
3
- import { ERUDIT_DIR } from '#erudit/globalPaths';
4
- import { stress } from '@erudit/utils/stress';
5
- import { ERUDIT_SERVER } from '@server/global';
6
- import { IMPORT } from '@server/importer';
7
-
8
- export async function setupLanguage() {
9
- const languageCode = ERUDIT_SERVER.CONFIG?.language || 'en';
10
- const languageFilePath = ERUDIT_DIR + `/languages/${languageCode}.ts`;
11
-
12
- if (!existsSync(languageFilePath))
13
- throw new Error(`Language file for ${stress(languageCode)} not found!`);
14
-
15
- try {
16
- const languageModule = await IMPORT(languageFilePath);
17
-
18
- if (!languageModule.default)
19
- throw new Error(
20
- `Language file for ${stress(languageCode)} is missing default export with phrases!`,
21
- );
22
-
23
- const { default: phrases, ...context } = { ...languageModule };
24
-
25
- ERUDIT_SERVER.LANGUAGE = {
26
- phrases,
27
- functions: Object.entries(context)
28
- .filter(([, value]) => typeof value === 'function')
29
- .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),
30
- };
31
- } catch (error) {
32
- throw new Error(
33
- `Error while loading language ${stress(languageCode)}!\n\n${error}`,
34
- );
35
- }
36
- }
1
+ import { existsSync } from 'node:fs';
2
+
3
+ import { ERUDIT_DIR } from '#erudit/globalPaths';
4
+ import { stress } from '@erudit/utils/stress';
5
+ import { ERUDIT_SERVER } from '@server/global';
6
+ import { IMPORT } from '@server/importer';
7
+
8
+ export async function setupLanguage() {
9
+ const languageCode = ERUDIT_SERVER.CONFIG?.language || 'en';
10
+ const languageFilePath = ERUDIT_DIR + `/languages/${languageCode}.ts`;
11
+
12
+ if (!existsSync(languageFilePath))
13
+ throw new Error(`Language file for ${stress(languageCode)} not found!`);
14
+
15
+ try {
16
+ const languageModule = await IMPORT(languageFilePath);
17
+
18
+ if (!languageModule.default)
19
+ throw new Error(
20
+ `Language file for ${stress(languageCode)} is missing default export with phrases!`,
21
+ );
22
+
23
+ const { default: phrases, ...context } = { ...languageModule };
24
+
25
+ ERUDIT_SERVER.LANGUAGE = {
26
+ phrases,
27
+ functions: Object.entries(context)
28
+ .filter(([, value]) => typeof value === 'function')
29
+ .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),
30
+ };
31
+ } catch (error) {
32
+ throw new Error(
33
+ `Error while loading language ${stress(languageCode)}!\n\n${error}`,
34
+ );
35
+ }
36
+ }