erudit 3.0.0-dev.15 → 3.0.0-dev.17

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 +191 -195
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -393
  4. package/app/components/SiteMain.vue +32 -32
  5. package/app/components/ads/Ads.vue +35 -0
  6. package/app/components/ads/AdsBannerAside.vue +61 -0
  7. package/app/components/ads/AdsBannerBottom.vue +22 -0
  8. package/app/components/ads/AdsProviderCustom.vue +35 -0
  9. package/app/components/ads/AdsProviderYandex.vue +54 -0
  10. package/app/components/ads/AdsReplacer.vue +73 -0
  11. package/app/components/aside/AsideListItem.vue +74 -74
  12. package/app/components/aside/AsideMajor.vue +56 -56
  13. package/app/components/aside/AsideMinor.vue +73 -71
  14. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  15. package/app/components/aside/major/PaneSwitch.vue +54 -54
  16. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  17. package/app/components/aside/major/SiteInfo.vue +85 -85
  18. package/app/components/aside/major/panes/Language.vue +79 -79
  19. package/app/components/aside/major/panes/Pages.vue +34 -34
  20. package/app/components/aside/major/panes/Search.vue +11 -11
  21. package/app/components/aside/major/panes/nav/Nav.vue +92 -92
  22. package/app/components/aside/major/panes/nav/NavBook.vue +95 -95
  23. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  24. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  25. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  26. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  27. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  28. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  29. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  30. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  31. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  32. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  33. package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -13
  34. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  35. package/app/components/aside/major/panes/other/Other.vue +16 -16
  36. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  37. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  38. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  39. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  40. package/app/components/aside/minor/Contribute.vue +145 -145
  41. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  42. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  43. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  44. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  45. package/app/components/aside/minor/topic/TopicToc.vue +214 -214
  46. package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
  47. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  48. package/app/components/bitran/BitranContent.vue +91 -91
  49. package/app/components/bitran/RenderWrapper.vue +10 -10
  50. package/app/components/contributor/ContributorAvatar.vue +45 -45
  51. package/app/components/contributor/ContributorListItem.vue +35 -35
  52. package/app/components/main/topic/MainTopic.vue +88 -78
  53. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  54. package/app/components/main/utils/Breadcrumb.vue +74 -70
  55. package/app/components/main/utils/ContentDecoration.vue +29 -29
  56. package/app/components/main/utils/ContentDescription.vue +19 -19
  57. package/app/components/main/utils/ContentPopover.vue +188 -188
  58. package/app/components/main/utils/ContentPopovers.vue +111 -111
  59. package/app/components/main/utils/ContentReferences.vue +70 -70
  60. package/app/components/main/utils/ContentSection.vue +45 -45
  61. package/app/components/main/utils/ContentTitle.vue +63 -63
  62. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  63. package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
  64. package/app/components/main/utils/reference/ReferenceSource.vue +120 -118
  65. package/app/components/preview/Preview.vue +186 -186
  66. package/app/components/preview/PreviewDisplay.vue +139 -139
  67. package/app/components/preview/PreviewFooterAction.vue +73 -73
  68. package/app/components/preview/PreviewLoading.vue +14 -14
  69. package/app/components/preview/PreviewScreen.vue +141 -141
  70. package/app/components/preview/display/Alert.vue +50 -50
  71. package/app/components/preview/display/Custom.vue +18 -18
  72. package/app/components/preview/display/GenericLink.vue +48 -48
  73. package/app/components/preview/display/PageLink.vue +22 -20
  74. package/app/components/preview/display/Unique.vue +55 -55
  75. package/app/components/transition/Fade.vue +19 -19
  76. package/app/components/tree/TreeContainer.vue +11 -11
  77. package/app/components/tree/TreeItem.vue +89 -89
  78. package/app/composables/bitran.ts +108 -108
  79. package/app/composables/bitranContent.ts +92 -92
  80. package/app/composables/bitranLocation.ts +7 -7
  81. package/app/composables/contentData.ts +38 -38
  82. package/app/composables/contentPage.ts +158 -158
  83. package/app/composables/contentRoute.ts +45 -45
  84. package/app/composables/darkMagic.ts +24 -24
  85. package/app/composables/externalApi.ts +69 -63
  86. package/app/composables/favicon.ts +8 -8
  87. package/app/composables/formatText.ts +99 -99
  88. package/app/composables/majorPane.ts +60 -60
  89. package/app/composables/phrases.ts +65 -65
  90. package/app/composables/theme.ts +29 -29
  91. package/app/composables/url.ts +33 -33
  92. package/app/pages/_test/preview.vue +110 -110
  93. package/app/pages/article/[...articleId].vue +3 -3
  94. package/app/pages/book/[...bookId].vue +47 -47
  95. package/app/pages/group/[...groupId].vue +66 -64
  96. package/app/pages/index.vue +32 -32
  97. package/app/pages/members.vue +6 -6
  98. package/app/pages/practice/[...practice].vue +3 -3
  99. package/app/pages/summary/[...summaryId].vue +3 -3
  100. package/app/plugins/analytics.ts +87 -0
  101. package/app/plugins/prerender.server.ts +22 -22
  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 +76 -76
  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 +23 -23
  114. package/app/scripts/preview/data/unique.ts +72 -72
  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 +49 -49
  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 -2
  132. package/const.ts +4 -4
  133. package/globalPath.ts +21 -21
  134. package/globals/bitran.ts +1 -1
  135. package/globals/content.ts +27 -27
  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 -94
  140. package/languages/ru.ts +98 -98
  141. package/module/bitran.ts +66 -66
  142. package/module/config.ts +35 -35
  143. package/module/imports.ts +67 -67
  144. package/module/index.ts +47 -49
  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 +131 -134
  149. package/package.json +8 -7
  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 +82 -82
  155. package/server/api/bitran/content/[...location].ts +10 -10
  156. package/server/api/bitran/toc/[...location].ts +9 -9
  157. package/server/api/content/data.ts +75 -75
  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/prerender.ts +120 -120
  165. package/server/api/preview/page/[...parts].ts +78 -78
  166. package/server/api/preview/unique/[...location].ts +61 -61
  167. package/server/api/problem/generator/[...path].ts +26 -0
  168. package/server/plugin/bitran/content.ts +190 -190
  169. package/server/plugin/bitran/elements/include.ts +229 -229
  170. package/server/plugin/bitran/location.ts +39 -39
  171. package/server/plugin/bitran/toc.ts +94 -94
  172. package/server/plugin/bitran/transpiler.ts +18 -18
  173. package/server/plugin/build/close.ts +12 -12
  174. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  175. package/server/plugin/build/jobs/content/generic.ts +191 -191
  176. package/server/plugin/build/jobs/content/parse.ts +113 -113
  177. package/server/plugin/build/jobs/content/path.ts +6 -6
  178. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  179. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  180. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  181. package/server/plugin/build/jobs/contributors.ts +66 -66
  182. package/server/plugin/build/jobs/language.ts +36 -36
  183. package/server/plugin/build/jobs/nav.ts +345 -265
  184. package/server/plugin/build/process.ts +32 -32
  185. package/server/plugin/build/rebuild.ts +66 -66
  186. package/server/plugin/build/setup.ts +19 -19
  187. package/server/plugin/content/context.ts +119 -119
  188. package/server/plugin/db/entities/Book.ts +7 -7
  189. package/server/plugin/db/entities/Content.ts +45 -45
  190. package/server/plugin/db/entities/Contribution.ts +10 -10
  191. package/server/plugin/db/entities/Contributor.ts +16 -16
  192. package/server/plugin/db/entities/File.ts +10 -10
  193. package/server/plugin/db/entities/Group.ts +14 -14
  194. package/server/plugin/db/entities/Hash.ts +15 -15
  195. package/server/plugin/db/entities/Topic.ts +20 -20
  196. package/server/plugin/db/entities/Unique.ts +21 -21
  197. package/server/plugin/db/reset.ts +12 -12
  198. package/server/plugin/db/setup.ts +49 -49
  199. package/server/plugin/global.ts +16 -16
  200. package/server/plugin/importer.ts +16 -16
  201. package/server/plugin/index.ts +9 -9
  202. package/server/plugin/logger.ts +23 -23
  203. package/server/plugin/nav/node.ts +27 -27
  204. package/server/plugin/nav/utils.ts +175 -175
  205. package/server/plugin/repository/book.ts +21 -21
  206. package/server/plugin/repository/content.ts +240 -240
  207. package/server/plugin/repository/contentId.ts +40 -40
  208. package/server/plugin/repository/contributor.ts +8 -8
  209. package/server/plugin/repository/file.ts +10 -10
  210. package/server/plugin/repository/frontNav.ts +145 -145
  211. package/server/plugin/repository/topic.ts +35 -35
  212. package/server/tsconfig.json +9 -9
  213. package/shared/aside/minor.ts +51 -51
  214. package/shared/asset.ts +22 -22
  215. package/shared/bitran/contentId.ts +56 -56
  216. package/shared/bitran/stringContent.ts +6 -6
  217. package/shared/bitran/toc.ts +8 -8
  218. package/shared/content/bookId.ts +12 -12
  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 +28 -28
  231. package/shared/popover.ts +8 -8
  232. package/shared/types/language.ts +74 -74
  233. package/shared/utils/objectsEqual.ts +4 -4
  234. package/shared/utils/stringColor.ts +9 -9
  235. package/test/contentId.test.ts +91 -91
  236. package/tsconfig.json +8 -8
  237. package/utils/contentPath.ts +67 -67
  238. package/utils/slash.ts +11 -11
  239. package/utils/stress.ts +9 -9
  240. package/app/components/ads/BannerTemplate.vue +0 -51
  241. package/app/components/ads/BottomBanner.vue +0 -45
  242. package/app/components/ads/LeftBanner.vue +0 -50
  243. package/module/problemGenerators.ts +0 -46
package/nuxt.config.ts CHANGED
@@ -1,134 +1,131 @@
1
- import {
2
- PUBLIC_CONTENT_ASSET,
3
- PUBLIC_CONTRIBUTOR_ASSET,
4
- PUBLIC_ERUDIT_ASSET,
5
- PUBLIC_USER_ASSET,
6
- } from './const';
7
- import { eruditPath, projectPath } from './globalPath';
8
-
9
- export default defineNuxtConfig({
10
- compatibilityDate: '2025-01-01',
11
- devtools: { enabled: true },
12
- future: { compatibilityVersion: 4 },
13
- ssr: true,
14
- alias: {
15
- '@erudit': eruditPath(),
16
- '@module': eruditPath('module'),
17
- '@server': eruditPath('server/plugin'),
18
- '@shared': eruditPath('shared'),
19
- '@app': eruditPath('app'),
20
- $: eruditPath('app/styles'),
21
- //
22
- '#project': projectPath(),
23
- '#content': projectPath('content'),
24
- },
25
- modules: [eruditPath('module'), 'nuxt-my-icons'],
26
- myicons: {
27
- iconsDir: eruditPath('app/assets/icons'),
28
- },
29
- features: {
30
- inlineStyles: false,
31
- },
32
- typescript: {
33
- tsConfig: {
34
- include: [eruditPath('**/*'), projectPath('**/*')],
35
- },
36
- },
37
- build: {
38
- transpile: [
39
- 'yaml',
40
- 'photoswipe',
41
- '@bitran-js/renderer-vue',
42
- '@erudit-js/bitran-elements',
43
- ],
44
- },
45
- ignore: [
46
- // Content assets
47
- ...[
48
- '**/{book,group,topic}.{js,ts}',
49
- '**/{article,summary,practice,content}.bi',
50
- ].map((pattern) => projectPath(`content/${pattern}`)),
51
- // Contributors assets
52
- ...['*/contributor.{js,ts}', '*/description.bi'].map((pattern) =>
53
- projectPath(`contributors/${pattern}`),
54
- ),
55
- ],
56
- nitro: {
57
- preset: 'github-pages',
58
- plugins: [eruditPath('server/plugin')],
59
- prerender: {
60
- crawlLinks: true,
61
- failOnError: false,
62
- concurrency: 10,
63
- ignore: [
64
- (path: string) => {
65
- const regexps = [/\?element=/gm, /#/gm, /\.json\?/gm];
66
- const shouldIgnore = regexps.some((re) => re.test(path));
67
- return shouldIgnore;
68
- },
69
- ],
70
- },
71
- output: {
72
- publicDir: projectPath('dist'),
73
- },
74
- externals: {
75
- inline: [/bitran-elements/],
76
- },
77
- publicAssets: [
78
- {
79
- baseURL: PUBLIC_ERUDIT_ASSET,
80
- dir: eruditPath('app/public'),
81
- maxAge: 60 * 60 * 24 * 30,
82
- },
83
- {
84
- baseURL: PUBLIC_USER_ASSET,
85
- dir: projectPath('public'),
86
- maxAge: 60 * 60 * 24 * 30,
87
- },
88
- {
89
- baseURL: PUBLIC_CONTENT_ASSET,
90
- dir: projectPath('content'),
91
- maxAge: 60 * 60 * 24 * 30,
92
- },
93
- {
94
- baseURL: PUBLIC_CONTRIBUTOR_ASSET,
95
- dir: projectPath('contributors'),
96
- maxAge: 60 * 60 * 24 * 30,
97
- },
98
- ],
99
- esbuild: {
100
- options: {
101
- charset: 'utf8',
102
- tsconfigRaw: {
103
- compilerOptions: {
104
- experimentalDecorators: true, // Make TypeORM work with Nuxt,
105
- },
106
- },
107
- },
108
- },
109
- },
110
- vite: {
111
- optimizeDeps: {
112
- include: [
113
- 'yaml',
114
- 'photoswipe',
115
- '@floating-ui/vue',
116
- '@bitran-js/core',
117
- '@bitran-js/transpiler',
118
- '@bitran-js/renderer-vue',
119
- '@erudit-js/bitran-elements',
120
- ],
121
- },
122
- server: {
123
- fs: { strict: false },
124
- },
125
- css: {
126
- preprocessorOptions: {
127
- scss: {
128
- api: 'modern-compiler',
129
- additionalData: `@use '$/utils' as *;`,
130
- },
131
- },
132
- },
133
- },
134
- });
1
+ import {
2
+ PUBLIC_CONTENT_ASSET,
3
+ PUBLIC_CONTRIBUTOR_ASSET,
4
+ PUBLIC_ERUDIT_ASSET,
5
+ PUBLIC_USER_ASSET,
6
+ } from './const';
7
+ import { eruditPath, projectPath } from './globalPath';
8
+
9
+ export default defineNuxtConfig({
10
+ compatibilityDate: '2025-01-01',
11
+ devtools: { enabled: true },
12
+ future: { compatibilityVersion: 4 },
13
+ ssr: true,
14
+ alias: {
15
+ '@erudit': eruditPath(),
16
+ '@module': eruditPath('module'),
17
+ '@server': eruditPath('server/plugin'),
18
+ '@shared': eruditPath('shared'),
19
+ '@app': eruditPath('app'),
20
+ $: eruditPath('app/styles'),
21
+ },
22
+ modules: [eruditPath('module'), 'nuxt-my-icons'],
23
+ myicons: {
24
+ iconsDir: eruditPath('app/assets/icons'),
25
+ },
26
+ features: {
27
+ inlineStyles: false,
28
+ },
29
+ typescript: {
30
+ tsConfig: {
31
+ include: [eruditPath('**/*'), projectPath('**/*')],
32
+ },
33
+ },
34
+ build: {
35
+ transpile: [
36
+ 'yaml',
37
+ 'photoswipe',
38
+ '@bitran-js/renderer-vue',
39
+ '@erudit-js/bitran-elements',
40
+ ],
41
+ },
42
+ ignore: [
43
+ // Content assets
44
+ ...[
45
+ '**/{book,group,topic}.{js,ts}',
46
+ '**/{article,summary,practice,content}.bi',
47
+ ].map((pattern) => projectPath(`content/${pattern}`)),
48
+ // Contributors assets
49
+ ...['*/contributor.{js,ts}', '*/description.bi'].map((pattern) =>
50
+ projectPath(`contributors/${pattern}`),
51
+ ),
52
+ ],
53
+ nitro: {
54
+ preset: 'github-pages',
55
+ plugins: [eruditPath('server/plugin')],
56
+ prerender: {
57
+ crawlLinks: true,
58
+ failOnError: false,
59
+ concurrency: 10,
60
+ ignore: [
61
+ (path: string) => {
62
+ const regexps = [/\?element=/gm, /#/gm, /\.json\?/gm];
63
+ const shouldIgnore = regexps.some((re) => re.test(path));
64
+ return shouldIgnore;
65
+ },
66
+ ],
67
+ },
68
+ output: {
69
+ publicDir: projectPath('dist'),
70
+ },
71
+ externals: {
72
+ inline: [/bitran-elements/],
73
+ },
74
+ publicAssets: [
75
+ {
76
+ baseURL: PUBLIC_ERUDIT_ASSET,
77
+ dir: eruditPath('app/public'),
78
+ maxAge: 60 * 60 * 24 * 30,
79
+ },
80
+ {
81
+ baseURL: PUBLIC_USER_ASSET,
82
+ dir: projectPath('public'),
83
+ maxAge: 60 * 60 * 24 * 30,
84
+ },
85
+ {
86
+ baseURL: PUBLIC_CONTENT_ASSET,
87
+ dir: projectPath('content'),
88
+ maxAge: 60 * 60 * 24 * 30,
89
+ },
90
+ {
91
+ baseURL: PUBLIC_CONTRIBUTOR_ASSET,
92
+ dir: projectPath('contributors'),
93
+ maxAge: 60 * 60 * 24 * 30,
94
+ },
95
+ ],
96
+ esbuild: {
97
+ options: {
98
+ charset: 'utf8',
99
+ tsconfigRaw: {
100
+ compilerOptions: {
101
+ experimentalDecorators: true, // Make TypeORM work with Nuxt,
102
+ },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ vite: {
108
+ optimizeDeps: {
109
+ include: [
110
+ 'yaml',
111
+ 'photoswipe',
112
+ '@floating-ui/vue',
113
+ '@bitran-js/core',
114
+ '@bitran-js/transpiler',
115
+ '@bitran-js/renderer-vue',
116
+ '@erudit-js/bitran-elements',
117
+ ],
118
+ },
119
+ server: {
120
+ fs: { strict: false },
121
+ },
122
+ css: {
123
+ preprocessorOptions: {
124
+ scss: {
125
+ api: 'modern-compiler',
126
+ additionalData: `@use '$/utils' as *;`,
127
+ },
128
+ },
129
+ },
130
+ },
131
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erudit",
3
- "version": "3.0.0-dev.15",
3
+ "version": "3.0.0-dev.17",
4
4
  "type": "module",
5
5
  "description": "🤓 CMS for perfect educational sites.",
6
6
  "license": "MIT",
@@ -15,9 +15,9 @@
15
15
  "erudit": "bin/erudit.mjs"
16
16
  },
17
17
  "peerDependencies": {
18
- "@erudit-js/cog": "3.0.0-dev.15",
19
- "@erudit-js/cli": "3.0.0-dev.15",
20
- "@erudit-js/bitran-elements": "3.0.0-dev.15"
18
+ "@erudit-js/cog": "3.0.0-dev.17",
19
+ "@erudit-js/cli": "3.0.0-dev.17",
20
+ "@erudit-js/bitran-elements": "3.0.0-dev.17"
21
21
  },
22
22
  "dependencies": {
23
23
  "@bitran-js/core": "1.0.0-dev.13",
@@ -27,14 +27,15 @@
27
27
  "chalk": "^5.4.1",
28
28
  "chokidar": "^4.0.3",
29
29
  "consola": "^3.4.2",
30
- "glob": "^11.0.1",
30
+ "esbuild": "^0.25.4",
31
+ "glob": "^11.0.2",
31
32
  "image-size": "^2.0.2",
32
33
  "jiti": "^2.4.2",
33
34
  "nuxt": "3.17.2",
34
35
  "nuxt-my-icons": "1.1.1",
35
- "sass": "^1.86.2",
36
+ "sass": "^1.87.0",
36
37
  "sqlite3": "^5.1.7",
37
- "typeorm": "^0.3.22",
38
+ "typeorm": "^0.3.23",
38
39
  "vue": "latest",
39
40
  "vue-router": "latest"
40
41
  }
@@ -1,5 +1,5 @@
1
- import { getNavBookIds } from '@server/nav/utils';
2
-
3
- export default defineEventHandler(() => {
4
- return getNavBookIds('short');
5
- });
1
+ import { getNavBookIds } from '@server/nav/utils';
2
+
3
+ export default defineEventHandler(() => {
4
+ return getNavBookIds('short');
5
+ });
@@ -1,20 +1,20 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
- import { createBookFrontNav } from '@server/repository/frontNav';
3
-
4
- export default defineEventHandler(async (event) => {
5
- const bookId = getRouterParam(event, 'bookId');
6
-
7
- if (
8
- !bookId ||
9
- !ERUDIT_SERVER.NAV_BOOKS ||
10
- !(bookId in ERUDIT_SERVER.NAV_BOOKS)
11
- )
12
- throw createError({
13
- statusCode: 400,
14
- statusText: `Unknown book id "${bookId}"!`,
15
- });
16
-
17
- const bookNode = ERUDIT_SERVER.NAV_BOOKS[bookId]!;
18
-
19
- return await createBookFrontNav(bookNode);
20
- });
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+ import { createBookFrontNav } from '@server/repository/frontNav';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const bookId = getRouterParam(event, 'bookId');
6
+
7
+ if (
8
+ !bookId ||
9
+ !ERUDIT_SERVER.NAV_BOOKS ||
10
+ !(bookId in ERUDIT_SERVER.NAV_BOOKS)
11
+ )
12
+ throw createError({
13
+ statusCode: 400,
14
+ statusText: `Unknown book id "${bookId}"!`,
15
+ });
16
+
17
+ const bookNode = ERUDIT_SERVER.NAV_BOOKS[bookId]!;
18
+
19
+ return await createBookFrontNav(bookNode);
20
+ });
@@ -1,7 +1,7 @@
1
- import type { FrontNav } from '@erudit/shared/frontNav';
2
- import { ERUDIT_SERVER } from '@server/global';
3
- import { createGlobalFrontNav } from '@server/repository/frontNav';
4
-
5
- export default defineEventHandler(async () => {
6
- return (await createGlobalFrontNav(ERUDIT_SERVER.NAV)) as FrontNav;
7
- });
1
+ import type { FrontNav } from '@erudit/shared/frontNav';
2
+ import { ERUDIT_SERVER } from '@server/global';
3
+ import { createGlobalFrontNav } from '@server/repository/frontNav';
4
+
5
+ export default defineEventHandler(async () => {
6
+ return (await createGlobalFrontNav(ERUDIT_SERVER.NAV)) as FrontNav;
7
+ });
@@ -1,7 +1,7 @@
1
- import type { AsideMinorNews } from '@shared/aside/minor';
2
-
3
- export default defineEventHandler(async () => {
4
- return <AsideMinorNews>{
5
- type: 'news',
6
- };
7
- });
1
+ import type { AsideMinorNews } from '@shared/aside/minor';
2
+
3
+ export default defineEventHandler(async () => {
4
+ return <AsideMinorNews>{
5
+ type: 'news',
6
+ };
7
+ });
@@ -1,82 +1,82 @@
1
- import { isTopicPart, locationFromPath } from '@erudit-js/cog/schema';
2
-
3
- import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
4
- import { getBitranToc } from '@server/bitran/toc';
5
- import {
6
- getContentContributors,
7
- getPreviousNext,
8
- } from '@server/repository/content';
9
- import { getTopicPartsLinks } from '@server/repository/topic';
10
- import { getFullContentId } from '@server/repository/contentId';
11
-
12
- export default defineEventHandler(async (event) => {
13
- const query = getQuery<{ path: string }>(event);
14
-
15
- if (!query.path) {
16
- throw createError({
17
- statusCode: 400,
18
- statusText: 'Missing "path" query parameter!',
19
- });
20
- }
21
-
22
- const path = query.path.substring(1);
23
- const pathStart = path.split('/')[0];
24
-
25
- if (isTopicPart(pathStart)) return await createTopicData(path);
26
-
27
- if (['book', 'group'].includes(pathStart))
28
- return await createContentData(pathStart, path);
29
-
30
- return 'news';
31
- });
32
-
33
- async function createTopicData(path: string): Promise<AsideMinorTopic> {
34
- const location = locationFromPath(path);
35
-
36
- if (!location) {
37
- throw createError({
38
- statusCode: 400,
39
- statusText: `Provided path "${path}" is not a valid topic location!`,
40
- });
41
- }
42
-
43
- if (location.path) {
44
- location.path = await getFullContentId(location.path);
45
- }
46
-
47
- const contentId = location.path;
48
-
49
- const toc = await getBitranToc(location);
50
- const previousNext = await getPreviousNext(contentId);
51
- const topicPartsLinks = await getTopicPartsLinks(contentId);
52
- const contributors = await getContentContributors(contentId);
53
-
54
- return {
55
- type: 'topic',
56
- topicId: contentId,
57
- location,
58
- toc,
59
- nav: {
60
- ...previousNext,
61
- ...topicPartsLinks,
62
- },
63
- contributors,
64
- };
65
- }
66
-
67
- async function createContentData(
68
- type: string,
69
- path: string,
70
- ): Promise<AsideMinorContent> {
71
- const rawContentId = path.split('/').slice(1).join('/');
72
- const contentId = getFullContentId(rawContentId);
73
- const previousNext = await getPreviousNext(contentId);
74
- const contributors = await getContentContributors(contentId);
75
-
76
- return {
77
- type: type as any,
78
- contentId,
79
- nav: previousNext,
80
- contributors,
81
- };
82
- }
1
+ import { isTopicPart, locationFromPath } from '@erudit-js/cog/schema';
2
+
3
+ import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
4
+ import { getBitranToc } from '@server/bitran/toc';
5
+ import {
6
+ getContentContributors,
7
+ getPreviousNext,
8
+ } from '@server/repository/content';
9
+ import { getTopicPartsLinks } from '@server/repository/topic';
10
+ import { getFullContentId } from '@server/repository/contentId';
11
+
12
+ export default defineEventHandler(async (event) => {
13
+ const query = getQuery<{ path: string }>(event);
14
+
15
+ if (!query.path) {
16
+ throw createError({
17
+ statusCode: 400,
18
+ statusText: 'Missing "path" query parameter!',
19
+ });
20
+ }
21
+
22
+ const path = query.path.substring(1);
23
+ const pathStart = path.split('/')[0];
24
+
25
+ if (isTopicPart(pathStart)) return await createTopicData(path);
26
+
27
+ if (['book', 'group'].includes(pathStart))
28
+ return await createContentData(pathStart, path);
29
+
30
+ return 'news';
31
+ });
32
+
33
+ async function createTopicData(path: string): Promise<AsideMinorTopic> {
34
+ const location = locationFromPath(path);
35
+
36
+ if (!location) {
37
+ throw createError({
38
+ statusCode: 400,
39
+ statusText: `Provided path "${path}" is not a valid topic location!`,
40
+ });
41
+ }
42
+
43
+ if (location.path) {
44
+ location.path = await getFullContentId(location.path);
45
+ }
46
+
47
+ const contentId = location.path;
48
+
49
+ const toc = await getBitranToc(location);
50
+ const previousNext = await getPreviousNext(contentId);
51
+ const topicPartsLinks = await getTopicPartsLinks(contentId);
52
+ const contributors = await getContentContributors(contentId);
53
+
54
+ return {
55
+ type: 'topic',
56
+ topicId: contentId,
57
+ location,
58
+ toc,
59
+ nav: {
60
+ ...previousNext,
61
+ ...topicPartsLinks,
62
+ },
63
+ contributors,
64
+ };
65
+ }
66
+
67
+ async function createContentData(
68
+ type: string,
69
+ path: string,
70
+ ): Promise<AsideMinorContent> {
71
+ const rawContentId = path.split('/').slice(1).join('/');
72
+ const contentId = getFullContentId(rawContentId);
73
+ const previousNext = await getPreviousNext(contentId);
74
+ const contributors = await getContentContributors(contentId);
75
+
76
+ return {
77
+ type: type as any,
78
+ contentId,
79
+ nav: previousNext,
80
+ contributors,
81
+ };
82
+ }
@@ -1,10 +1,10 @@
1
- import { parseClientBitranLocation } from '@server/bitran/location';
2
- import { getBitranContent } from '@server/bitran/content';
3
-
4
- export default defineEventHandler(async (event) => {
5
- setResponseHeader(event, 'Content-Type', 'application/json; charset=utf-8');
6
- const location = await parseClientBitranLocation(
7
- event.context.params!.location,
8
- );
9
- return await getBitranContent(location);
10
- });
1
+ import { parseClientBitranLocation } from '@server/bitran/location';
2
+ import { getBitranContent } from '@server/bitran/content';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ setResponseHeader(event, 'Content-Type', 'application/json; charset=utf-8');
6
+ const location = await parseClientBitranLocation(
7
+ event.context.params!.location,
8
+ );
9
+ return await getBitranContent(location);
10
+ });
@@ -1,9 +1,9 @@
1
- import { parseClientBitranLocation } from '@server/bitran/location';
2
- import { getBitranToc } from '@server/bitran/toc';
3
-
4
- export default defineEventHandler(async (event) => {
5
- const location = await parseClientBitranLocation(
6
- event.context.params!.location,
7
- );
8
- return await getBitranToc(location);
9
- });
1
+ import { parseClientBitranLocation } from '@server/bitran/location';
2
+ import { getBitranToc } from '@server/bitran/toc';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const location = await parseClientBitranLocation(
6
+ event.context.params!.location,
7
+ );
8
+ return await getBitranToc(location);
9
+ });