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

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 +112 -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 +210 -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 +9 -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,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,18 @@
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 { 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,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/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,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
+ }