erudit 3.0.0-dev.1 → 3.0.0-dev.10

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 (252) hide show
  1. package/app/app.vue +195 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -382
  4. package/app/components/SiteMain.vue +34 -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 -11
  18. package/app/components/aside/major/panes/nav/Nav.vue +87 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +87 -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 +13 -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 -15
  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 +219 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +30 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +91 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +45 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +78 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +70 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -19
  54. package/app/components/main/utils/ContentPopover.vue +188 -176
  55. package/app/components/main/utils/ContentPopovers.vue +111 -105
  56. package/app/components/main/utils/ContentReferences.vue +70 -70
  57. package/app/components/main/utils/ContentSection.vue +45 -45
  58. package/app/components/main/utils/ContentTitle.vue +63 -39
  59. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  60. package/app/components/main/utils/reference/ReferenceItem.vue +68 -68
  61. package/app/components/main/utils/reference/ReferenceSource.vue +116 -116
  62. package/app/components/preview/Preview.vue +186 -177
  63. package/app/components/preview/PreviewDisplay.vue +139 -139
  64. package/app/components/preview/PreviewFooterAction.vue +73 -73
  65. package/app/components/preview/PreviewLoading.vue +14 -14
  66. package/app/components/preview/PreviewScreen.vue +141 -99
  67. package/app/components/preview/display/Alert.vue +50 -50
  68. package/app/components/preview/display/Custom.vue +18 -18
  69. package/app/components/preview/display/GenericLink.vue +48 -48
  70. package/app/components/preview/display/PageLink.vue +20 -20
  71. package/app/components/preview/display/Unique.vue +55 -49
  72. package/app/components/transition/Fade.vue +19 -19
  73. package/app/components/tree/TreeContainer.vue +11 -11
  74. package/app/components/tree/TreeItem.vue +89 -89
  75. package/app/composables/bitran.ts +108 -127
  76. package/app/composables/bitranContent.ts +69 -37
  77. package/app/composables/bitranLocation.ts +7 -7
  78. package/app/composables/contentData.ts +36 -36
  79. package/app/composables/contentPage.ts +157 -156
  80. package/app/composables/contentRoute.ts +45 -45
  81. package/app/composables/darkMagic.ts +24 -24
  82. package/app/composables/externalApi.ts +63 -63
  83. package/app/composables/favicon.ts +8 -8
  84. package/app/composables/formatText.ts +86 -86
  85. package/app/composables/majorPane.ts +60 -60
  86. package/app/composables/phrases.ts +81 -80
  87. package/app/composables/theme.ts +29 -29
  88. package/app/composables/url.ts +33 -33
  89. package/app/pages/_test/preview.vue +110 -110
  90. package/app/pages/article/[...articleId].vue +3 -3
  91. package/app/pages/book/[...bookId].vue +47 -47
  92. package/app/pages/group/[...groupId].vue +64 -65
  93. package/app/pages/index.vue +32 -32
  94. package/app/pages/members.vue +6 -6
  95. package/app/pages/practice/[...practice].vue +3 -3
  96. package/app/pages/summary/[...summaryId].vue +3 -3
  97. package/app/public/favicon/article.svg +5 -5
  98. package/app/public/favicon/default.svg +3 -3
  99. package/app/public/favicon/practice.svg +3 -3
  100. package/app/public/favicon/summary.svg +4 -4
  101. package/app/public/logotype.svg +2 -2
  102. package/app/scripts/_immediate.js +9 -9
  103. package/app/scripts/aside/index.ts +59 -59
  104. package/app/scripts/aside/major/nav.ts +26 -26
  105. package/app/scripts/aside/minor/state.ts +37 -37
  106. package/app/scripts/aside/minor/topic.ts +3 -3
  107. package/app/scripts/flag.ts +28 -28
  108. package/app/scripts/og.ts +27 -27
  109. package/app/scripts/preview/build.ts +73 -73
  110. package/app/scripts/preview/data/alert.ts +19 -19
  111. package/app/scripts/preview/data/custom.ts +8 -8
  112. package/app/scripts/preview/data/genericLink.ts +24 -24
  113. package/app/scripts/preview/data/pageLink.ts +22 -20
  114. package/app/scripts/preview/data/unique.ts +72 -70
  115. package/app/scripts/preview/data.ts +24 -24
  116. package/app/scripts/preview/display.ts +37 -37
  117. package/app/scripts/preview/footer.ts +9 -9
  118. package/app/scripts/preview/request.ts +51 -51
  119. package/app/scripts/preview/state.ts +63 -63
  120. package/app/styles/_immediate.css +7 -7
  121. package/app/styles/_util.scss +43 -43
  122. package/app/styles/_utils.scss +44 -44
  123. package/app/styles/app.scss +91 -91
  124. package/app/styles/def/_bp.scss +27 -27
  125. package/app/styles/def/_size.scss +7 -7
  126. package/app/styles/def/_z.scss +5 -5
  127. package/app/styles/normalize.scss +63 -63
  128. package/app/styles/partials/_darkMagic.scss +5 -5
  129. package/app/styles/partials/_fnav.scss +15 -15
  130. package/app/styles/partials/_preview.scss +5 -5
  131. package/bin/erudit.mjs +2 -0
  132. package/const.ts +4 -0
  133. package/globalPath.ts +21 -21
  134. package/globals/bitran.ts +1 -47
  135. package/globals/content.ts +22 -22
  136. package/globals/contributor.ts +5 -5
  137. package/globals/erudit.ts +5 -5
  138. package/globals/register.ts +18 -18
  139. package/languages/en.ts +94 -95
  140. package/languages/ru.ts +98 -99
  141. package/module/bitran.ts +66 -34
  142. package/module/config.ts +35 -34
  143. package/module/imports.ts +61 -46
  144. package/module/index.ts +47 -47
  145. package/module/logger.ts +10 -10
  146. package/module/paths.ts +22 -22
  147. package/module/restart.ts +61 -61
  148. package/nuxt.config.ts +123 -111
  149. package/package.json +19 -13
  150. package/server/api/aside/major/nav/bookIds.ts +5 -5
  151. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  152. package/server/api/aside/major/nav/global.ts +7 -7
  153. package/server/api/aside/minor/news.ts +7 -7
  154. package/server/api/aside/minor/path.ts +77 -78
  155. package/server/api/bitran/content/{[location].ts → [...location].ts} +8 -7
  156. package/server/api/bitran/toc/{[location].ts → [...location].ts} +7 -7
  157. package/server/api/content/data.ts +72 -72
  158. package/server/api/contributor/count.ts +6 -6
  159. package/server/api/fake/content.ts +11 -11
  160. package/server/api/fake/shared/languages.ts +12 -12
  161. package/server/api/language/functions.ts +12 -12
  162. package/server/api/language/phrase/[phraseId].ts +19 -19
  163. package/server/api/language/phraseIds.ts +8 -8
  164. package/server/api/preview/page/[...parts].ts +52 -51
  165. package/server/api/preview/unique/[location].ts +60 -55
  166. package/server/plugin/bitran/content.ts +214 -187
  167. package/server/plugin/bitran/{products → elements}/include.ts +216 -230
  168. package/server/plugin/bitran/location.ts +25 -25
  169. package/server/plugin/bitran/toc.ts +75 -83
  170. package/server/plugin/bitran/transpiler.ts +9 -46
  171. package/server/plugin/build/close.ts +10 -10
  172. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  173. package/server/plugin/build/jobs/content/files.ts +79 -0
  174. package/server/plugin/build/jobs/content/generic.ts +192 -176
  175. package/server/plugin/build/jobs/content/parse.ts +109 -100
  176. package/server/plugin/build/jobs/content/path.ts +6 -6
  177. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  178. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  179. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  180. package/server/plugin/build/jobs/contributors.ts +66 -66
  181. package/server/plugin/build/jobs/language.ts +36 -36
  182. package/server/plugin/build/jobs/nav.ts +214 -209
  183. package/server/plugin/build/process.ts +25 -25
  184. package/server/plugin/build/rebuild.ts +55 -55
  185. package/server/plugin/build/setup.ts +19 -21
  186. package/server/plugin/content/context.ts +116 -112
  187. package/server/plugin/db/entities/Book.ts +7 -7
  188. package/server/plugin/db/entities/Content.ts +49 -49
  189. package/server/plugin/db/entities/Contribution.ts +10 -10
  190. package/server/plugin/db/entities/Contributor.ts +16 -16
  191. package/server/plugin/db/entities/File.ts +10 -0
  192. package/server/plugin/db/entities/Group.ts +14 -14
  193. package/server/plugin/db/entities/Hash.ts +15 -15
  194. package/server/plugin/db/entities/Topic.ts +20 -20
  195. package/server/plugin/db/entities/Unique.ts +21 -21
  196. package/server/plugin/db/setup.ts +36 -34
  197. package/server/plugin/global.ts +16 -18
  198. package/server/plugin/importer.ts +12 -12
  199. package/server/plugin/index.ts +9 -9
  200. package/server/plugin/logger.ts +23 -23
  201. package/server/plugin/nav/node.ts +26 -26
  202. package/server/plugin/nav/utils.ts +133 -129
  203. package/server/plugin/repository/book.ts +21 -21
  204. package/server/plugin/repository/content.ts +237 -238
  205. package/server/plugin/repository/contributor.ts +8 -8
  206. package/server/plugin/repository/file.ts +10 -0
  207. package/server/plugin/repository/frontNav.ts +148 -148
  208. package/server/plugin/repository/topic.ts +32 -32
  209. package/server/tsconfig.json +9 -7
  210. package/shared/aside/minor.ts +51 -50
  211. package/shared/asset.ts +22 -15
  212. package/shared/bitran/contentId.ts +88 -0
  213. package/shared/bitran/stringContent.ts +6 -0
  214. package/shared/bitran/toc.ts +8 -8
  215. package/shared/content/context.ts +9 -9
  216. package/shared/content/data/base.ts +32 -32
  217. package/shared/content/data/index.ts +5 -5
  218. package/shared/content/data/type/book.ts +5 -5
  219. package/shared/content/data/type/group.ts +6 -6
  220. package/shared/content/data/type/topic.ts +11 -11
  221. package/shared/content/previousNext.ts +9 -9
  222. package/shared/contributor.ts +5 -5
  223. package/shared/frontNav.ts +41 -41
  224. package/shared/icons.ts +38 -38
  225. package/shared/image.ts +5 -5
  226. package/shared/link.ts +28 -25
  227. package/shared/popover.ts +8 -0
  228. package/shared/types/language.ts +74 -75
  229. package/shared/utils/objectsEqual.ts +4 -4
  230. package/shared/utils/stringColor.ts +9 -9
  231. package/test/contentId.test.ts +91 -0
  232. package/tsconfig.json +8 -8
  233. package/utils/stress.ts +9 -9
  234. package/app/components/main/utils/ContentFlag.vue +0 -15
  235. package/app/styles/default.scss +0 -83
  236. package/server/plugin/bitran/products/link.ts +0 -116
  237. package/server/plugin/bitran/setup.ts +0 -9
  238. package/server/plugin/content/absoluteId.ts +0 -94
  239. package/shared/bitran/context.ts +0 -8
  240. package/shared/bitran/default.ts +0 -46
  241. package/shared/bitran/link/Link.vue +0 -167
  242. package/shared/bitran/link/factory.ts +0 -24
  243. package/shared/bitran/link/icon.svg +0 -3
  244. package/shared/bitran/link/languages/en.ts +0 -7
  245. package/shared/bitran/link/languages/ru.ts +0 -7
  246. package/shared/bitran/link/renderer.ts +0 -21
  247. package/shared/bitran/link/shared.ts +0 -17
  248. package/shared/bitran/link/target.ts +0 -134
  249. package/shared/bitran/link/transpiler.ts +0 -10
  250. package/shared/bitran/location.ts +0 -166
  251. package/test/bitran/link/target.test.ts +0 -141
  252. package/test/bitran/location.test.ts +0 -143
@@ -1,100 +1,109 @@
1
- import { ElementNode, walkForward } from '@bitran-js/core';
2
- import { type BitranTranspiler } from '@bitran-js/transpiler';
3
- import {
4
- AliasesNode,
5
- mergeAliases,
6
- NO_ALIASES,
7
- } from '@erudit-js/bitran-elements/aliases/shared';
8
- import { HeadingNode } from '@erudit-js/bitran-elements/heading/shared';
9
-
10
- import { createBitranTranspiler } from '@server/bitran/transpiler';
11
- import { ERUDIT_SERVER } from '@server/global';
12
- import { DbUnique } from '@server/db/entities/Unique';
13
-
14
- import type { BitranContext } from '@shared/bitran/context';
15
- import {
16
- stringifyBitranLocation,
17
- type BitranLocation,
18
- } from '@shared/bitran/location';
19
-
20
- let context: BitranContext = {} as any;
21
- let bitranTranspiler: BitranTranspiler;
22
-
23
- const blocksAfterHeading = 2;
24
-
25
- export async function parseBitranContent(
26
- location: BitranLocation,
27
- biCode: string,
28
- ) {
29
- // Reset Bitran context in order not to create core each time
30
- context.location = location;
31
- context.aliases = NO_ALIASES();
32
-
33
- bitranTranspiler ||= await createBitranTranspiler();
34
-
35
- // Tracking heading nodes to deal with them later
36
- const headings: HeadingNode[] = [];
37
-
38
- await bitranTranspiler.parser.parse(biCode, {
39
- async step(node) {
40
- const meta = node.meta;
41
- const uniqueId = meta?.id;
42
-
43
- if (node instanceof AliasesNode) {
44
- mergeAliases(context.aliases, node.parseData);
45
- }
46
-
47
- if (uniqueId) {
48
- if (node instanceof HeadingNode) {
49
- headings.push(node);
50
- return;
51
- }
52
-
53
- await addUnique(node);
54
- }
55
- },
56
- });
57
-
58
- for (const heading of headings) {
59
- let blocksAfter = 0;
60
- let content = await bitranTranspiler.stringifier.stringify(heading);
61
-
62
- await walkForward(heading, async (node) => {
63
- if (blocksAfter >= blocksAfterHeading) return false;
64
-
65
- if (node instanceof AliasesNode) return;
66
- // Spoiler
67
- // Todo
68
-
69
- content +=
70
- '\n\n' + (await bitranTranspiler.stringifier.stringify(node));
71
-
72
- blocksAfter++;
73
- });
74
-
75
- await addUnique(heading, content);
76
- }
77
-
78
- //
79
- //
80
- //
81
-
82
- function createUniqueLocation(node: ElementNode) {
83
- return stringifyBitranLocation({
84
- ...location,
85
- ...{ unique: node.meta.id! },
86
- });
87
- }
88
-
89
- async function addUnique(node: ElementNode, content?: string) {
90
- const dbUnique = new DbUnique();
91
- dbUnique.location = createUniqueLocation(node);
92
- dbUnique.content =
93
- content || (await bitranTranspiler.stringifier.stringify(node));
94
- dbUnique.title = node.parseData?.title || node.meta?.title;
95
- dbUnique.productName = node.name;
96
- dbUnique.context = context;
97
-
98
- await ERUDIT_SERVER.DB.manager.save(dbUnique);
99
- }
100
- }
1
+ import { ElementNode, walkForward } from '@bitran-js/core';
2
+ import { type BitranTranspiler } from '@bitran-js/transpiler';
3
+
4
+ import {
5
+ mergeAliases,
6
+ NO_ALIASES,
7
+ stringifyBitranLocation,
8
+ type BitranContext,
9
+ type BitranLocation,
10
+ } from '@erudit-js/cog/schema';
11
+ import { AliasesNode } from '@erudit-js/bitran-elements/aliases/shared';
12
+ import { DetailsNode } from '@erudit-js/bitran-elements/details/shared';
13
+ import { HeadingNode } from '@erudit-js/bitran-elements/heading/shared';
14
+
15
+ import { createBitranTranspiler } from '@server/bitran/transpiler';
16
+ import { ERUDIT_SERVER } from '@server/global';
17
+ import { DbUnique } from '@server/db/entities/Unique';
18
+
19
+ let context: BitranContext = {} as any;
20
+ let bitranTranspiler: BitranTranspiler;
21
+
22
+ const blocksAfterHeading = 2;
23
+
24
+ export async function parseBitranContent(
25
+ location: BitranLocation,
26
+ biCode: string,
27
+ ) {
28
+ // Reset Bitran context in order not to create core each time
29
+ context.location = location;
30
+ context.aliases = NO_ALIASES();
31
+
32
+ bitranTranspiler ||= await createBitranTranspiler();
33
+
34
+ // Tracking heading nodes to deal with them later
35
+ const headings: HeadingNode[] = [];
36
+
37
+ await bitranTranspiler.parser.parse(biCode, {
38
+ async step(node) {
39
+ const meta = node.meta;
40
+ const uniqueId = meta?.id;
41
+
42
+ if (node instanceof AliasesNode) {
43
+ mergeAliases(context.aliases, node.parseData);
44
+ }
45
+
46
+ if (uniqueId) {
47
+ if (node instanceof HeadingNode) {
48
+ headings.push(node);
49
+ return;
50
+ }
51
+
52
+ if (node instanceof DetailsNode) {
53
+ await addUnique(
54
+ node,
55
+ await bitranTranspiler.stringifier.stringify(
56
+ node.parseData,
57
+ ),
58
+ );
59
+ return;
60
+ }
61
+
62
+ await addUnique(node);
63
+ }
64
+ },
65
+ });
66
+
67
+ for (const heading of headings) {
68
+ let blocksAfter = 0;
69
+ let content = await bitranTranspiler.stringifier.stringify(heading);
70
+
71
+ await walkForward(heading, async (node) => {
72
+ if (blocksAfter >= blocksAfterHeading) return false;
73
+
74
+ if (node instanceof AliasesNode) return;
75
+ if (node instanceof DetailsNode) return;
76
+ // Todo
77
+
78
+ content +=
79
+ '\n\n' + (await bitranTranspiler.stringifier.stringify(node));
80
+
81
+ blocksAfter++;
82
+ });
83
+
84
+ await addUnique(heading, content);
85
+ }
86
+
87
+ //
88
+ //
89
+ //
90
+
91
+ function createUniqueLocation(node: ElementNode) {
92
+ return stringifyBitranLocation({
93
+ ...location,
94
+ ...{ unique: node.meta.id! },
95
+ });
96
+ }
97
+
98
+ async function addUnique(node: ElementNode, content?: string) {
99
+ const dbUnique = new DbUnique();
100
+ dbUnique.location = createUniqueLocation(node);
101
+ dbUnique.content =
102
+ content || (await bitranTranspiler.stringifier.stringify(node));
103
+ dbUnique.title = node.parseData?.title || node.meta?.title || null;
104
+ dbUnique.productName = node.name;
105
+ dbUnique.context = context;
106
+
107
+ await ERUDIT_SERVER.DB.manager.save(dbUnique);
108
+ }
109
+ }
@@ -1,6 +1,6 @@
1
- import { PROJECT_DIR } from '#erudit/globalPaths';
2
- import type { NavNode } from '@server/nav/node';
3
-
4
- export function contentItemPath(navNode: NavNode, path?: string) {
5
- return PROJECT_DIR + `/content/${navNode.path}${path ? '/' + path : ''}`;
6
- }
1
+ import { PROJECT_DIR } from '#erudit/globalPaths';
2
+ import type { NavNode } from '@server/nav/node';
3
+
4
+ export function contentItemPath(navNode: NavNode, path?: string) {
5
+ return PROJECT_DIR + `/content/${navNode.path}${path ? '/' + path : ''}`;
6
+ }
@@ -1,9 +1,9 @@
1
- import { DbBook } from '@server/db/entities/Book';
2
- import { ERUDIT_SERVER } from '@server/global';
3
- import type { BuilderFunctionArgs } from '../builderArgs';
4
-
5
- export async function buildBook({ dbContent }: BuilderFunctionArgs) {
6
- const dbBook = new DbBook();
7
- dbBook.contentId = dbContent.contentId;
8
- await ERUDIT_SERVER.DB.manager.save(dbBook);
9
- }
1
+ import { DbBook } from '@server/db/entities/Book';
2
+ import { ERUDIT_SERVER } from '@server/global';
3
+ import type { BuilderFunctionArgs } from '../builderArgs';
4
+
5
+ export async function buildBook({ dbContent }: BuilderFunctionArgs) {
6
+ const dbBook = new DbBook();
7
+ dbBook.contentId = dbContent.contentId;
8
+ await ERUDIT_SERVER.DB.manager.save(dbBook);
9
+ }
@@ -1,37 +1,37 @@
1
- import { readFileSync } from 'node:fs';
2
- import type { GroupConfig } from 'erudit-cog/schema';
3
-
4
- import { DbGroup } from '@server/db/entities/Group';
5
- import { ERUDIT_SERVER } from '@erudit/server/plugin/global';
6
- import type { BuilderFunctionArgs } from '../builderArgs';
7
- import { contentItemPath } from '../path';
8
- import { parseBitranContent } from '../parse';
9
-
10
- export async function buildGroup({
11
- navNode,
12
- config,
13
- }: BuilderFunctionArgs<GroupConfig>) {
14
- const dbGroup = new DbGroup();
15
- dbGroup.contentId = navNode.id;
16
- dbGroup.type = config?.type || 'folder';
17
-
18
- try {
19
- const strContent = readFileSync(
20
- contentItemPath(navNode, 'content.bi'),
21
- 'utf-8',
22
- );
23
-
24
- if (strContent) {
25
- dbGroup.content = strContent;
26
- await parseBitranContent(
27
- {
28
- type: 'group',
29
- path: navNode.id,
30
- },
31
- strContent,
32
- );
33
- }
34
- } catch {}
35
-
36
- await ERUDIT_SERVER.DB.manager.save(dbGroup);
37
- }
1
+ import { readFileSync } from 'node:fs';
2
+ import type { GroupConfig } from '@erudit-js/cog/schema';
3
+
4
+ import { DbGroup } from '@server/db/entities/Group';
5
+ import { ERUDIT_SERVER } from '@erudit/server/plugin/global';
6
+ import type { BuilderFunctionArgs } from '../builderArgs';
7
+ import { contentItemPath } from '../path';
8
+ import { parseBitranContent } from '../parse';
9
+
10
+ export async function buildGroup({
11
+ navNode,
12
+ config,
13
+ }: BuilderFunctionArgs<GroupConfig>) {
14
+ const dbGroup = new DbGroup();
15
+ dbGroup.contentId = navNode.id;
16
+ dbGroup.type = config?.type || 'folder';
17
+
18
+ try {
19
+ const strContent = readFileSync(
20
+ contentItemPath(navNode, 'content.bi'),
21
+ 'utf-8',
22
+ );
23
+
24
+ if (strContent) {
25
+ dbGroup.content = strContent;
26
+ await parseBitranContent(
27
+ {
28
+ type: 'group',
29
+ path: navNode.id,
30
+ },
31
+ strContent,
32
+ );
33
+ }
34
+ } catch {}
35
+
36
+ await ERUDIT_SERVER.DB.manager.save(dbGroup);
37
+ }
@@ -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-js/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-js/cog/kit';
6
+ import type { ContributorConfig } from '@erudit-js/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
+ }