erudit 3.0.0-dev.3 → 3.0.0-dev.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.
Files changed (243) 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 +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 -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 +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 -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 +70 -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 -19
  54. package/app/components/main/utils/ContentPopover.vue +188 -176
  55. package/app/components/main/utils/ContentPopovers.vue +105 -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 +49 -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 +129 -127
  76. package/app/composables/bitranContent.ts +39 -39
  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 +65 -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 +9 -9
  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 +71 -71
  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/globalPath.ts +21 -21
  132. package/globals/bitran.ts +2 -47
  133. package/globals/content.ts +22 -22
  134. package/globals/contributor.ts +5 -5
  135. package/globals/erudit.ts +5 -5
  136. package/globals/register.ts +18 -18
  137. package/languages/en.ts +95 -95
  138. package/languages/ru.ts +99 -99
  139. package/module/bitran.ts +35 -34
  140. package/module/config.ts +34 -34
  141. package/module/imports.ts +50 -46
  142. package/module/index.ts +47 -47
  143. package/module/logger.ts +10 -10
  144. package/module/paths.ts +22 -22
  145. package/module/restart.ts +61 -61
  146. package/nuxt.config.ts +138 -112
  147. package/package.json +7 -8
  148. package/server/api/aside/major/nav/bookIds.ts +5 -5
  149. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  150. package/server/api/aside/major/nav/global.ts +7 -7
  151. package/server/api/aside/minor/news.ts +7 -7
  152. package/server/api/aside/minor/path.ts +78 -78
  153. package/server/api/bitran/content/[location].ts +8 -8
  154. package/server/api/bitran/toc/[location].ts +7 -7
  155. package/server/api/content/data.ts +72 -72
  156. package/server/api/contributor/count.ts +6 -6
  157. package/server/api/fake/content.ts +11 -11
  158. package/server/api/fake/shared/languages.ts +12 -12
  159. package/server/api/language/functions.ts +12 -12
  160. package/server/api/language/phrase/[phraseId].ts +19 -19
  161. package/server/api/language/phraseIds.ts +8 -8
  162. package/server/api/preview/page/[...parts].ts +51 -51
  163. package/server/api/preview/unique/[location].ts +57 -57
  164. package/server/plugin/bitran/content.ts +187 -187
  165. package/server/plugin/bitran/location.ts +25 -25
  166. package/server/plugin/bitran/products/include.ts +230 -230
  167. package/server/plugin/bitran/products/link.ts +116 -116
  168. package/server/plugin/bitran/setup.ts +11 -9
  169. package/server/plugin/bitran/toc.ts +83 -83
  170. package/server/plugin/bitran/transpiler.ts +48 -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/generic.ts +176 -176
  174. package/server/plugin/build/jobs/content/parse.ts +100 -100
  175. package/server/plugin/build/jobs/content/path.ts +6 -6
  176. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  177. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  178. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  179. package/server/plugin/build/jobs/contributors.ts +66 -66
  180. package/server/plugin/build/jobs/language.ts +36 -36
  181. package/server/plugin/build/jobs/nav.ts +210 -210
  182. package/server/plugin/build/process.ts +25 -25
  183. package/server/plugin/build/rebuild.ts +55 -55
  184. package/server/plugin/build/setup.ts +21 -21
  185. package/server/plugin/content/absoluteId.ts +94 -94
  186. package/server/plugin/content/context.ts +112 -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/Group.ts +14 -14
  192. package/server/plugin/db/entities/Hash.ts +15 -15
  193. package/server/plugin/db/entities/Topic.ts +20 -20
  194. package/server/plugin/db/entities/Unique.ts +21 -21
  195. package/server/plugin/db/setup.ts +34 -34
  196. package/server/plugin/global.ts +17 -18
  197. package/server/plugin/importer.ts +12 -12
  198. package/server/plugin/index.ts +9 -9
  199. package/server/plugin/logger.ts +23 -23
  200. package/server/plugin/nav/node.ts +26 -26
  201. package/server/plugin/nav/utils.ts +129 -129
  202. package/server/plugin/repository/book.ts +21 -21
  203. package/server/plugin/repository/content.ts +238 -238
  204. package/server/plugin/repository/contributor.ts +8 -8
  205. package/server/plugin/repository/frontNav.ts +148 -148
  206. package/server/plugin/repository/topic.ts +32 -32
  207. package/server/tsconfig.json +9 -9
  208. package/shared/aside/minor.ts +50 -50
  209. package/shared/asset.ts +15 -15
  210. package/shared/bitran/context.ts +8 -8
  211. package/shared/bitran/default.ts +46 -46
  212. package/shared/bitran/link/Link.vue +166 -167
  213. package/shared/bitran/link/factory.ts +24 -24
  214. package/shared/bitran/link/languages/en.ts +7 -7
  215. package/shared/bitran/link/languages/ru.ts +7 -7
  216. package/shared/bitran/link/renderer.ts +21 -21
  217. package/shared/bitran/link/shared.ts +17 -17
  218. package/shared/bitran/link/target.ts +134 -134
  219. package/shared/bitran/link/transpiler.ts +10 -10
  220. package/shared/bitran/location.ts +166 -166
  221. package/shared/bitran/toc.ts +8 -8
  222. package/shared/content/context.ts +9 -9
  223. package/shared/content/data/base.ts +32 -32
  224. package/shared/content/data/index.ts +5 -5
  225. package/shared/content/data/type/book.ts +5 -5
  226. package/shared/content/data/type/group.ts +6 -6
  227. package/shared/content/data/type/topic.ts +11 -11
  228. package/shared/content/previousNext.ts +9 -9
  229. package/shared/contributor.ts +5 -5
  230. package/shared/frontNav.ts +41 -41
  231. package/shared/icons.ts +38 -38
  232. package/shared/image.ts +5 -5
  233. package/shared/link.ts +25 -25
  234. package/shared/popover.ts +8 -0
  235. package/shared/types/language.ts +75 -75
  236. package/shared/utils/objectsEqual.ts +4 -4
  237. package/shared/utils/stringColor.ts +9 -9
  238. package/test/bitran/link/target.test.ts +141 -141
  239. package/test/bitran/location.test.ts +143 -143
  240. package/tsconfig.json +8 -8
  241. package/utils/stress.ts +9 -9
  242. package/app/components/main/utils/ContentFlag.vue +0 -15
  243. package/app/styles/default.scss +0 -83
@@ -1,20 +1,20 @@
1
- import { Column, Entity, PrimaryColumn } from 'typeorm';
2
- import type { TopicPart } from 'erudit-cog/schema';
3
-
4
- @Entity('topic')
5
- export class DbTopic {
6
- @PrimaryColumn('varchar')
7
- contentId!: string;
8
-
9
- @Column('simple-array')
10
- parts!: TopicPart[];
11
-
12
- @Column('text', { nullable: true })
13
- article?: string;
14
-
15
- @Column('text', { nullable: true })
16
- summary?: string;
17
-
18
- @Column('text', { nullable: true })
19
- practice?: string;
20
- }
1
+ import { Column, Entity, PrimaryColumn } from 'typeorm';
2
+ import type { TopicPart } from 'erudit-cog/schema';
3
+
4
+ @Entity('topic')
5
+ export class DbTopic {
6
+ @PrimaryColumn('varchar')
7
+ contentId!: string;
8
+
9
+ @Column('simple-array')
10
+ parts!: TopicPart[];
11
+
12
+ @Column('text', { nullable: true })
13
+ article?: string;
14
+
15
+ @Column('text', { nullable: true })
16
+ summary?: string;
17
+
18
+ @Column('text', { nullable: true })
19
+ practice?: string;
20
+ }
@@ -1,21 +1,21 @@
1
- import { Column, Entity, PrimaryColumn } from 'typeorm';
2
-
3
- import type { BitranContext } from '@erudit/shared/bitran/context';
4
-
5
- @Entity('unique')
6
- export class DbUnique {
7
- @PrimaryColumn('varchar')
8
- location!: string;
9
-
10
- @Column('varchar')
11
- productName!: string;
12
-
13
- @Column('text')
14
- content!: string;
15
-
16
- @Column('simple-json')
17
- context!: BitranContext;
18
-
19
- @Column('varchar', { nullable: true })
20
- title?: string;
21
- }
1
+ import { Column, Entity, PrimaryColumn } from 'typeorm';
2
+
3
+ import type { BitranContext } from '@erudit/shared/bitran/context';
4
+
5
+ @Entity('unique')
6
+ export class DbUnique {
7
+ @PrimaryColumn('varchar')
8
+ location!: string;
9
+
10
+ @Column('varchar')
11
+ productName!: string;
12
+
13
+ @Column('text')
14
+ content!: string;
15
+
16
+ @Column('simple-json')
17
+ context!: BitranContext;
18
+
19
+ @Column('varchar', { nullable: true })
20
+ title?: string;
21
+ }
@@ -1,34 +1,34 @@
1
- import { DataSource } from 'typeorm';
2
-
3
- import { PROJECT_DIR } from '#erudit/globalPaths';
4
- import { ERUDIT_SERVER } from '@server/global';
5
-
6
- // Database Entities
7
- import { DbContributor } from './entities/Contributor';
8
- import { DbBook } from './entities/Book';
9
- import { DbContent } from './entities/Content';
10
- import { DbContribution } from './entities/Contribution';
11
- import { DbGroup } from './entities/Group';
12
- import { DbHash } from './entities/Hash';
13
- import { DbTopic } from './entities/Topic';
14
- import { DbUnique } from './entities/Unique';
15
-
16
- export async function setupDatabase() {
17
- ERUDIT_SERVER.DB = new DataSource({
18
- type: 'sqlite',
19
- database: PROJECT_DIR + '/.erudit/data.sqlite',
20
- synchronize: true,
21
- entities: [
22
- DbBook,
23
- DbContent,
24
- DbContribution,
25
- DbContributor,
26
- DbGroup,
27
- DbHash,
28
- DbTopic,
29
- DbUnique,
30
- ],
31
- });
32
-
33
- await ERUDIT_SERVER.DB.initialize();
34
- }
1
+ import { DataSource } from 'typeorm';
2
+
3
+ import { PROJECT_DIR } from '#erudit/globalPaths';
4
+ import { ERUDIT_SERVER } from '@server/global';
5
+
6
+ // Database Entities
7
+ import { DbContributor } from './entities/Contributor';
8
+ import { DbBook } from './entities/Book';
9
+ import { DbContent } from './entities/Content';
10
+ import { DbContribution } from './entities/Contribution';
11
+ import { DbGroup } from './entities/Group';
12
+ import { DbHash } from './entities/Hash';
13
+ import { DbTopic } from './entities/Topic';
14
+ import { DbUnique } from './entities/Unique';
15
+
16
+ export async function setupDatabase() {
17
+ ERUDIT_SERVER.DB = new DataSource({
18
+ type: 'sqlite',
19
+ database: PROJECT_DIR + '/.erudit/data.sqlite',
20
+ synchronize: true,
21
+ entities: [
22
+ DbBook,
23
+ DbContent,
24
+ DbContribution,
25
+ DbContributor,
26
+ DbGroup,
27
+ DbHash,
28
+ DbTopic,
29
+ DbUnique,
30
+ ],
31
+ });
32
+
33
+ await ERUDIT_SERVER.DB.initialize();
34
+ }
@@ -1,18 +1,17 @@
1
- import type { DataSource } from 'typeorm';
2
- import type { EruditConfig } from 'erudit-cog/schema';
3
-
4
- import type { EruditPhrases } from '@shared/types/language';
5
- import type { NavNode, RootNavNode } from '@server/nav/node';
6
- import type { EruditBitranConfig } from '@erudit/globals/bitran';
7
-
8
- interface EruditServer {
9
- BUILD_PROMISE: Promise<void>;
10
- CONFIG: Partial<EruditConfig>;
11
- LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
12
- DB: DataSource;
13
- NAV?: RootNavNode;
14
- NAV_BOOKS?: Record<string, NavNode>;
15
- BITRAN_CONFIG?: Partial<EruditBitranConfig>;
16
- }
17
-
18
- export const ERUDIT_SERVER: EruditServer = {} as any;
1
+ import type { DataSource } from 'typeorm';
2
+ import type { EruditBitranConfig, EruditConfig } from 'erudit-cog/schema';
3
+
4
+ import type { EruditPhrases } from '@shared/types/language';
5
+ import type { NavNode, RootNavNode } from '@server/nav/node';
6
+
7
+ interface EruditServer {
8
+ BUILD_PROMISE: Promise<void>;
9
+ CONFIG: Partial<EruditConfig>;
10
+ LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
11
+ DB: DataSource;
12
+ NAV?: RootNavNode;
13
+ NAV_BOOKS?: Record<string, NavNode>;
14
+ BITRAN_CONFIG?: Partial<EruditBitranConfig>;
15
+ }
16
+
17
+ export const ERUDIT_SERVER: EruditServer = {} as any;
@@ -1,12 +1,12 @@
1
- import { createJiti } from 'jiti';
2
- import { ERUDIT_DIR } from '#erudit/globalPaths';
3
-
4
- const jiti = createJiti(ERUDIT_DIR, {
5
- // Enable reimporting same files during process in development mode
6
- fsCache: !import.meta.dev,
7
- moduleCache: !import.meta.dev,
8
- });
9
-
10
- export async function IMPORT(...args: Parameters<typeof jiti.import>) {
11
- return jiti.import(...args) as Promise<any>;
12
- }
1
+ import { createJiti } from 'jiti';
2
+ import { ERUDIT_DIR } from '#erudit/globalPaths';
3
+
4
+ const jiti = createJiti(ERUDIT_DIR, {
5
+ // Enable reimporting same files during process in development mode
6
+ fsCache: !import.meta.dev,
7
+ moduleCache: !import.meta.dev,
8
+ });
9
+
10
+ export async function IMPORT(...args: Parameters<typeof jiti.import>) {
11
+ return jiti.import(...args) as Promise<any>;
12
+ }
@@ -1,9 +1,9 @@
1
- import { ERUDIT_SERVER } from './global';
2
- import { build } from './build/process';
3
- import { close } from './build/close';
4
-
5
- export default defineNitroPlugin((_nitro) => {
6
- ERUDIT_SERVER.BUILD_PROMISE = build();
7
- _nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
8
- _nitro.hooks.hook('close', close);
9
- });
1
+ import { ERUDIT_SERVER } from './global';
2
+ import { build } from './build/process';
3
+ import { close } from './build/close';
4
+
5
+ export default defineNitroPlugin((_nitro) => {
6
+ ERUDIT_SERVER.BUILD_PROMISE = build();
7
+ _nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
8
+ _nitro.hooks.hook('close', close);
9
+ });
@@ -1,23 +1,23 @@
1
- import chalk from 'chalk';
2
- import { createConsola } from 'consola';
3
- import { brandColorTitle } from 'erudit-cog/utils/brand';
4
-
5
- import eruditConfig from '#erudit/config';
6
-
7
- // TODO: Consola has buggy behaviour when called inside Nitro
8
- // @see https://github.com/nitrojs/nitro/issues/3079
9
-
10
- export const logger = createConsola({
11
- defaults: {
12
- //tag: brandColorTitle + ' Server',
13
- message: chalk.gray(`[${brandColorTitle} Server]`),
14
- },
15
- });
16
-
17
- export const debug = createConsola({
18
- defaults: {
19
- //tag: brandColorTitle + ' Server Debug',
20
- message: chalk.gray(`[${brandColorTitle} Server Debug]`),
21
- level: eruditConfig?.debug?.log ? 3 : -999,
22
- },
23
- });
1
+ import chalk from 'chalk';
2
+ import { createConsola } from 'consola';
3
+ import { brandColorTitle } from 'erudit-cog/utils/brandNode';
4
+
5
+ import eruditConfig from '#erudit/config';
6
+
7
+ // TODO: Consola has buggy behaviour when called inside Nitro
8
+ // @see https://github.com/nitrojs/nitro/issues/3079
9
+
10
+ export const logger = createConsola({
11
+ defaults: {
12
+ //tag: brandColorTitle + ' Server',
13
+ message: chalk.gray(`[${brandColorTitle} Server]`),
14
+ },
15
+ });
16
+
17
+ export const debug = createConsola({
18
+ defaults: {
19
+ //tag: brandColorTitle + ' Server Debug',
20
+ message: chalk.gray(`[${brandColorTitle} Server Debug]`),
21
+ level: eruditConfig?.debug?.log ? 3 : -999,
22
+ },
23
+ });
@@ -1,26 +1,26 @@
1
- import type { ContentType } from 'erudit-cog/schema';
2
-
3
- export interface NavNode {
4
- type: ContentType;
5
- path: string;
6
- id: string;
7
- fullId: string;
8
- skip: boolean;
9
- children?: NavNode[];
10
- parent?: NavNode | RootNavNode;
11
- }
12
-
13
- export interface RootNavNode {
14
- type: '#root';
15
- children?: NavNode[];
16
- }
17
-
18
- export function isRootNode(node: NavNode | RootNavNode) {
19
- return node?.type === '#root';
20
- }
21
-
22
- export function createRootNode(): RootNavNode {
23
- return {
24
- type: '#root',
25
- };
26
- }
1
+ import type { ContentType } from 'erudit-cog/schema';
2
+
3
+ export interface NavNode {
4
+ type: ContentType;
5
+ path: string;
6
+ id: string;
7
+ fullId: string;
8
+ skip: boolean;
9
+ children?: NavNode[];
10
+ parent?: NavNode | RootNavNode;
11
+ }
12
+
13
+ export interface RootNavNode {
14
+ type: '#root';
15
+ children?: NavNode[];
16
+ }
17
+
18
+ export function isRootNode(node: NavNode | RootNavNode) {
19
+ return node?.type === '#root';
20
+ }
21
+
22
+ export function createRootNode(): RootNavNode {
23
+ return {
24
+ type: '#root',
25
+ };
26
+ }
@@ -1,129 +1,129 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
- import { isRootNode, type NavNode } from '@server/nav/node';
3
-
4
- export async function walkNav(
5
- step: (node: NavNode) => Promise<void | false>,
6
- from: NavNode | typeof ERUDIT_SERVER.NAV = ERUDIT_SERVER.NAV,
7
- ) {
8
- if (!from) return;
9
-
10
- const stepResult = isRootNode(from) ? true : await step(from);
11
-
12
- if (stepResult !== false)
13
- if (from.children)
14
- for (const child of from.children) await walkNav(step, child);
15
- }
16
-
17
- //
18
- //
19
- //
20
-
21
- export function getNavBookOf(target: string | NavNode): NavNode | undefined {
22
- const id = typeof target === 'string' ? target : target.id;
23
-
24
- if (!id || !ERUDIT_SERVER.NAV_BOOKS) return undefined;
25
-
26
- const idParts = id.split('/');
27
-
28
- while (idParts.length > 0) {
29
- const book = ERUDIT_SERVER.NAV_BOOKS[idParts.join('/')];
30
-
31
- if (book) return book;
32
-
33
- idParts.pop();
34
- }
35
-
36
- return undefined;
37
- }
38
-
39
- export async function getPreviousNextNav(contentId: string) {
40
- let previousNav: NavNode | undefined, nextNav: NavNode | undefined;
41
- let book: NavNode | undefined;
42
- let finish = false;
43
-
44
- await walkNav(async (navNode) => {
45
- if (navNode.id === contentId) {
46
- book = getNavBookOf(navNode);
47
- finish = true;
48
- return;
49
- }
50
-
51
- if (finish && !nextNav) {
52
- nextNav = navNode;
53
- return false;
54
- }
55
-
56
- if (!finish) previousNav = navNode;
57
- });
58
-
59
- if (book) {
60
- //
61
- // Can't lead out of current book (if givent content item is inside the book)
62
- //
63
-
64
- if (previousNav)
65
- if (getNavBookOf(previousNav)?.fullId !== book.fullId)
66
- previousNav = undefined;
67
-
68
- if (nextNav)
69
- if (getNavBookOf(nextNav)?.fullId !== book.fullId)
70
- nextNav = undefined;
71
- } else {
72
- //
73
- // If not inside the book and tries to lead inside a book, then force lead to book's about page
74
- //
75
-
76
- if (previousNav) previousNav = getNavBookOf(previousNav) || previousNav;
77
-
78
- if (nextNav) nextNav = getNavBookOf(nextNav) || nextNav;
79
- }
80
-
81
- return {
82
- previousNav,
83
- nextNav,
84
- };
85
- }
86
-
87
- export async function getNavNode(
88
- contentId: string,
89
- ): Promise<NavNode | undefined> {
90
- let navNode: NavNode | undefined;
91
-
92
- await walkNav(async (_navNode) => {
93
- if (_navNode.id === contentId) {
94
- navNode = _navNode;
95
- return false;
96
- }
97
- });
98
-
99
- return navNode;
100
- }
101
-
102
- export async function getIdsUp(contentId: string): Promise<string[]> {
103
- const startNavNode = await getNavNode(contentId);
104
-
105
- if (!startNavNode) return [];
106
-
107
- const ids: string[] = [];
108
-
109
- let currentNavNode: any = startNavNode;
110
- while (currentNavNode?.id) {
111
- ids.push(currentNavNode.id);
112
- currentNavNode = currentNavNode.parent;
113
- }
114
-
115
- return ids;
116
- }
117
-
118
- export async function isSkipId(contentId: string) {
119
- let hidden = false;
120
-
121
- await walkNav(async (navNode) => {
122
- if (navNode.id === contentId) {
123
- hidden = navNode.skip;
124
- return false;
125
- }
126
- });
127
-
128
- return hidden;
129
- }
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+ import { isRootNode, type NavNode } from '@server/nav/node';
3
+
4
+ export async function walkNav(
5
+ step: (node: NavNode) => Promise<void | false>,
6
+ from: NavNode | typeof ERUDIT_SERVER.NAV = ERUDIT_SERVER.NAV,
7
+ ) {
8
+ if (!from) return;
9
+
10
+ const stepResult = isRootNode(from) ? true : await step(from);
11
+
12
+ if (stepResult !== false)
13
+ if (from.children)
14
+ for (const child of from.children) await walkNav(step, child);
15
+ }
16
+
17
+ //
18
+ //
19
+ //
20
+
21
+ export function getNavBookOf(target: string | NavNode): NavNode | undefined {
22
+ const id = typeof target === 'string' ? target : target.id;
23
+
24
+ if (!id || !ERUDIT_SERVER.NAV_BOOKS) return undefined;
25
+
26
+ const idParts = id.split('/');
27
+
28
+ while (idParts.length > 0) {
29
+ const book = ERUDIT_SERVER.NAV_BOOKS[idParts.join('/')];
30
+
31
+ if (book) return book;
32
+
33
+ idParts.pop();
34
+ }
35
+
36
+ return undefined;
37
+ }
38
+
39
+ export async function getPreviousNextNav(contentId: string) {
40
+ let previousNav: NavNode | undefined, nextNav: NavNode | undefined;
41
+ let book: NavNode | undefined;
42
+ let finish = false;
43
+
44
+ await walkNav(async (navNode) => {
45
+ if (navNode.id === contentId) {
46
+ book = getNavBookOf(navNode);
47
+ finish = true;
48
+ return;
49
+ }
50
+
51
+ if (finish && !nextNav) {
52
+ nextNav = navNode;
53
+ return false;
54
+ }
55
+
56
+ if (!finish) previousNav = navNode;
57
+ });
58
+
59
+ if (book) {
60
+ //
61
+ // Can't lead out of current book (if givent content item is inside the book)
62
+ //
63
+
64
+ if (previousNav)
65
+ if (getNavBookOf(previousNav)?.fullId !== book.fullId)
66
+ previousNav = undefined;
67
+
68
+ if (nextNav)
69
+ if (getNavBookOf(nextNav)?.fullId !== book.fullId)
70
+ nextNav = undefined;
71
+ } else {
72
+ //
73
+ // If not inside the book and tries to lead inside a book, then force lead to book's about page
74
+ //
75
+
76
+ if (previousNav) previousNav = getNavBookOf(previousNav) || previousNav;
77
+
78
+ if (nextNav) nextNav = getNavBookOf(nextNav) || nextNav;
79
+ }
80
+
81
+ return {
82
+ previousNav,
83
+ nextNav,
84
+ };
85
+ }
86
+
87
+ export async function getNavNode(
88
+ contentId: string,
89
+ ): Promise<NavNode | undefined> {
90
+ let navNode: NavNode | undefined;
91
+
92
+ await walkNav(async (_navNode) => {
93
+ if (_navNode.id === contentId) {
94
+ navNode = _navNode;
95
+ return false;
96
+ }
97
+ });
98
+
99
+ return navNode;
100
+ }
101
+
102
+ export async function getIdsUp(contentId: string): Promise<string[]> {
103
+ const startNavNode = await getNavNode(contentId);
104
+
105
+ if (!startNavNode) return [];
106
+
107
+ const ids: string[] = [];
108
+
109
+ let currentNavNode: any = startNavNode;
110
+ while (currentNavNode?.id) {
111
+ ids.push(currentNavNode.id);
112
+ currentNavNode = currentNavNode.parent;
113
+ }
114
+
115
+ return ids;
116
+ }
117
+
118
+ export async function isSkipId(contentId: string) {
119
+ let hidden = false;
120
+
121
+ await walkNav(async (navNode) => {
122
+ if (navNode.id === contentId) {
123
+ hidden = navNode.skip;
124
+ return false;
125
+ }
126
+ });
127
+
128
+ return hidden;
129
+ }
@@ -1,21 +1,21 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
- import { getNavBookOf } from '@server/nav/utils';
3
- import { DbContent } from '@server/db/entities/Content';
4
-
5
- export async function getContentBookFor(contentId: string) {
6
- const navBook = getNavBookOf(contentId);
7
-
8
- if (!navBook) return undefined;
9
-
10
- const bookId = navBook.id;
11
-
12
- const dbContent = await ERUDIT_SERVER.DB.manager.findOne(DbContent, {
13
- select: ['title'],
14
- where: { contentId: bookId },
15
- });
16
-
17
- return {
18
- contentId: bookId,
19
- title: dbContent?.title || bookId,
20
- };
21
- }
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+ import { getNavBookOf } from '@server/nav/utils';
3
+ import { DbContent } from '@server/db/entities/Content';
4
+
5
+ export async function getContentBookFor(contentId: string) {
6
+ const navBook = getNavBookOf(contentId);
7
+
8
+ if (!navBook) return undefined;
9
+
10
+ const bookId = navBook.id;
11
+
12
+ const dbContent = await ERUDIT_SERVER.DB.manager.findOne(DbContent, {
13
+ select: ['title'],
14
+ where: { contentId: bookId },
15
+ });
16
+
17
+ return {
18
+ contentId: bookId,
19
+ title: dbContent?.title || bookId,
20
+ };
21
+ }