erudit 4.0.0-dev.4 → 4.0.0

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 (336) hide show
  1. package/.nuxtrc +1 -1
  2. package/app/app.vue +34 -34
  3. package/app/components/EruditLink.ts +7 -7
  4. package/app/components/FancyBold.vue +16 -16
  5. package/app/components/FancyCard.vue +52 -58
  6. package/app/components/FancyCardTag.vue +16 -16
  7. package/app/components/Loading.vue +7 -7
  8. package/app/components/Prose.vue +55 -52
  9. package/app/components/ScrollHolder.vue +13 -13
  10. package/app/components/SmartMedia.vue +107 -112
  11. package/app/components/ads/Ads.vue +17 -17
  12. package/app/components/ads/AdsBannerAside.vue +29 -29
  13. package/app/components/ads/AdsBannerBottom.vue +6 -6
  14. package/app/components/ads/AdsReplacer.vue +19 -21
  15. package/app/components/ads/provider/Custom.vue +9 -9
  16. package/app/components/ads/provider/Yandex.vue +56 -56
  17. package/app/components/aside/AsideListItem.vue +47 -52
  18. package/app/components/aside/AsideMajor.vue +6 -6
  19. package/app/components/aside/AsideMinor.vue +47 -52
  20. package/app/components/aside/AsidePlainMessage.vue +9 -9
  21. package/app/components/aside/AsideSwitch.vue +53 -54
  22. package/app/components/aside/major/PaneHolder.vue +61 -61
  23. package/app/components/aside/major/PaneSwitcher.vue +50 -55
  24. package/app/components/aside/major/PaneSwitcherButton.vue +24 -24
  25. package/app/components/aside/major/PaneTemplate.vue +3 -3
  26. package/app/components/aside/major/SiteInfo.vue +40 -42
  27. package/app/components/aside/major/contentNav/PaneBookNav.vue +107 -116
  28. package/app/components/aside/major/contentNav/PaneGlobalNav.vue +19 -19
  29. package/app/components/aside/major/contentNav/items/ContentNavBook.vue +8 -8
  30. package/app/components/aside/major/contentNav/items/ContentNavFolder.vue +55 -56
  31. package/app/components/aside/major/contentNav/items/ContentNavItem.vue +16 -16
  32. package/app/components/aside/major/contentNav/items/ContentNavPage.vue +2 -6
  33. package/app/components/aside/major/contentNav/items/ContentNavSeparator.vue +34 -35
  34. package/app/components/aside/major/contentNav/items/ContentNavTopic.vue +6 -6
  35. package/app/components/aside/major/contentNav/items/Flags.vue +31 -33
  36. package/app/components/aside/major/contentNav/items/ItemTemplate.vue +13 -13
  37. package/app/components/aside/major/languages/PaneLanguages.vue +40 -40
  38. package/app/components/aside/major/pages/PanePages.vue +45 -45
  39. package/app/components/aside/major/search/PaneSearch.vue +109 -100
  40. package/app/components/aside/major/search/SearchInput.vue +52 -53
  41. package/app/components/aside/major/search/SearchResult.vue +123 -75
  42. package/app/components/aside/major/search/SearchStatus.vue +28 -28
  43. package/app/components/aside/major/search/search.worker.ts +129 -129
  44. package/app/components/aside/major/settings/BuildTime.vue +15 -15
  45. package/app/components/aside/major/settings/EngineVersion.vue +8 -7
  46. package/app/components/aside/major/settings/PaneSettings.vue +8 -8
  47. package/app/components/aside/major/settings/ThemeSwitcher.vue +36 -36
  48. package/app/components/aside/major/settings/repository/Repository.vue +18 -18
  49. package/app/components/aside/major/settings/repository/SecondaryGitHub.vue +47 -47
  50. package/app/components/aside/minor/AsideMinorPane.vue +5 -5
  51. package/app/components/aside/minor/AsideMinorPlainHeader.vue +20 -20
  52. package/app/components/aside/minor/content/AsideMinorContentContributions.vue +47 -51
  53. package/app/components/aside/minor/content/AsideMinorContentPage.vue +37 -37
  54. package/app/components/aside/minor/content/AsideMinorContentTopic.vue +61 -66
  55. package/app/components/aside/minor/content/ButtonPaneContributions.vue +101 -114
  56. package/app/components/aside/minor/content/ButtonPaneImprove.vue +112 -123
  57. package/app/components/aside/minor/content/Contribution.vue +36 -36
  58. package/app/components/aside/minor/content/Toc.vue +163 -163
  59. package/app/components/aside/minor/content/TocItem.vue +91 -91
  60. package/app/components/aside/minor/content/TopicPartButton.vue +35 -35
  61. package/app/components/aside/minor/contributor/AsideMinorContributor.vue +36 -39
  62. package/app/components/aside/minor/contributor/ItemBook.vue +33 -39
  63. package/app/components/aside/minor/contributor/ItemContent.vue +17 -17
  64. package/app/components/aside/minor/news/AsideMinorNews.vue +132 -132
  65. package/app/components/aside/minor/news/NewsItem.vue +69 -69
  66. package/app/components/aside/minor/news/RenderNewsElement.vue +42 -42
  67. package/app/components/aside/minor/news/elements/Mix.vue +11 -11
  68. package/app/components/aside/minor/news/elements/P.vue +14 -14
  69. package/app/components/aside/minor/news/elements/Ref.vue +59 -58
  70. package/app/components/aside/minor/news/elements/Text.vue +18 -18
  71. package/app/components/indexPage/IndexPagePersons.vue +116 -117
  72. package/app/components/main/MainAction.vue +26 -26
  73. package/app/components/main/MainBreadcrumbs.vue +28 -28
  74. package/app/components/main/MainContentChild.vue +44 -47
  75. package/app/components/main/MainContentChildren.vue +13 -14
  76. package/app/components/main/MainDecoration.vue +15 -15
  77. package/app/components/main/MainDescription.vue +13 -13
  78. package/app/components/main/MainFlag.vue +129 -133
  79. package/app/components/main/MainFlags.vue +17 -17
  80. package/app/components/main/MainGlow.vue +12 -12
  81. package/app/components/main/MainQuickLink.vue +90 -91
  82. package/app/components/main/MainQuickLinks.vue +40 -40
  83. package/app/components/main/MainQuote.vue +149 -161
  84. package/app/components/main/MainQuoteLoader.vue +86 -86
  85. package/app/components/main/MainSection.vue +44 -44
  86. package/app/components/main/MainSectionPreamble.vue +5 -5
  87. package/app/components/main/MainSubTitle.vue +11 -12
  88. package/app/components/main/MainTitle.vue +32 -32
  89. package/app/components/main/MainTopicPartPage.vue +88 -88
  90. package/app/components/main/MainTopicPartSwitch.vue +67 -71
  91. package/app/components/main/connections/Deps.vue +30 -34
  92. package/app/components/main/connections/Externals.vue +80 -104
  93. package/app/components/main/connections/MainConnections.vue +90 -94
  94. package/app/components/main/connections/MainConnectionsButton.vue +81 -81
  95. package/app/components/main/connections/ScrollPane.vue +10 -10
  96. package/app/components/main/contentStats/Item.vue +28 -34
  97. package/app/components/main/contentStats/ItemElement.vue +19 -19
  98. package/app/components/main/contentStats/ItemMaterials.vue +11 -11
  99. package/app/components/main/contentStats/MainContentStats.vue +50 -53
  100. package/app/components/preview/Preview.vue +110 -118
  101. package/app/components/preview/PreviewError.vue +4 -4
  102. package/app/components/preview/PreviewLoading.vue +3 -3
  103. package/app/components/preview/PreviewScreen.vue +48 -48
  104. package/app/components/preview/PreviewScreenButton.vue +27 -27
  105. package/app/components/preview/screen/ContentPage.vue +27 -30
  106. package/app/components/preview/screen/DirectLink.vue +13 -13
  107. package/app/components/preview/screen/Unique.vue +31 -32
  108. package/app/components/site/SiteAside.vue +50 -51
  109. package/app/components/site/SiteAsideOverlay.vue +8 -8
  110. package/app/components/site/SiteMain.vue +11 -11
  111. package/app/components/transition/Fade.vue +16 -16
  112. package/app/components/transition/Slide.vue +27 -27
  113. package/app/components/tree/TreeContainer.vue +3 -3
  114. package/app/components/tree/TreeItem.vue +27 -31
  115. package/app/composables/ads.ts +11 -11
  116. package/app/composables/analytics.ts +102 -102
  117. package/app/composables/appElements.ts +21 -21
  118. package/app/composables/aside.ts +15 -15
  119. package/app/composables/asideMajorPane.ts +82 -82
  120. package/app/composables/asideMinor.ts +109 -109
  121. package/app/composables/contentNav.ts +7 -7
  122. package/app/composables/favicon.ts +103 -108
  123. package/app/composables/file.ts +4 -3
  124. package/app/composables/formatText.ts +100 -100
  125. package/app/composables/loading.ts +26 -26
  126. package/app/composables/mainContent.ts +22 -22
  127. package/app/composables/og.ts +184 -182
  128. package/app/composables/phrases.ts +98 -98
  129. package/app/composables/preview.ts +44 -44
  130. package/app/composables/route.ts +4 -2
  131. package/app/composables/theme.ts +47 -51
  132. package/app/composables/url.ts +19 -11
  133. package/app/formatters/ru.ts +14 -14
  134. package/app/pages/article/[...articleId].vue +12 -12
  135. package/app/pages/book/[...bookId].vue +56 -56
  136. package/app/pages/contributor/[contributorId].vue +144 -150
  137. package/app/pages/contributors.vue +95 -102
  138. package/app/pages/group/[...groupId].vue +58 -58
  139. package/app/pages/index.vue +113 -117
  140. package/app/pages/page/[...pageId].vue +60 -60
  141. package/app/pages/practice/[...practiceId].vue +12 -12
  142. package/app/pages/sponsors.vue +88 -92
  143. package/app/pages/summary/[...summaryId].vue +12 -12
  144. package/app/plugins/appSetup/client/htmlBranding.ts +6 -6
  145. package/app/plugins/appSetup/client/welcome.ts +37 -35
  146. package/app/plugins/appSetup/config.ts +6 -6
  147. package/app/plugins/appSetup/global.ts +3 -3
  148. package/app/plugins/appSetup/index.ts +27 -28
  149. package/app/plugins/prerender.server.ts +40 -40
  150. package/app/router.options.ts +5 -5
  151. package/app/scripts/theme.js +21 -24
  152. package/app/styles/main.css +128 -124
  153. package/bin/erudit.js +12 -0
  154. package/modules/erudit/env.ts +8 -0
  155. package/modules/erudit/globals/content.ts +4 -4
  156. package/modules/erudit/globals/contributor.ts +1 -1
  157. package/modules/erudit/globals/eruditConfig.ts +5 -10
  158. package/modules/erudit/globals/problem.ts +1 -1
  159. package/modules/erudit/globals/prose.ts +5 -1
  160. package/modules/erudit/globals/public.ts +18 -18
  161. package/modules/erudit/index.ts +50 -60
  162. package/modules/erudit/logger.ts +10 -10
  163. package/modules/erudit/setup/elements/appTemplate.ts +44 -45
  164. package/modules/erudit/setup/elements/globalTemplate.ts +82 -82
  165. package/modules/erudit/setup/elements/globalTypes.ts +259 -273
  166. package/modules/erudit/setup/elements/setup.ts +163 -167
  167. package/modules/erudit/setup/elements/shared.ts +10 -10
  168. package/modules/erudit/setup/elements/tagsTable.ts +28 -28
  169. package/modules/erudit/setup/fullRestart.ts +61 -71
  170. package/modules/erudit/setup/globals.ts +210 -196
  171. package/modules/erudit/setup/publicAssets.ts +43 -52
  172. package/modules/erudit/setup/runtimeConfig.ts +106 -58
  173. package/modules/erudit/watcher.ts +20 -27
  174. package/nuxt.config.ts +102 -84
  175. package/package.json +51 -55
  176. package/server/api/aside/major/frontNav/book/[...shortId].ts +10 -10
  177. package/server/api/aside/major/frontNav/global.ts +5 -5
  178. package/server/api/aside/major/pages.ts +6 -6
  179. package/server/api/contributor/list.ts +60 -61
  180. package/server/api/contributor/page/[contributorId].ts +68 -68
  181. package/server/api/indexPage.ts +81 -81
  182. package/server/api/language/functions.ts +11 -11
  183. package/server/api/language/phrase/[phraseKey].ts +35 -35
  184. package/server/api/main/content/[...contentTypePath].ts +149 -153
  185. package/server/api/news/batch/[batchIndex].ts +5 -5
  186. package/server/api/pageSponsors.ts +56 -58
  187. package/server/api/prerender/content.ts +79 -82
  188. package/server/api/prerender/default.ts +35 -35
  189. package/server/api/prerender/files.ts +10 -10
  190. package/server/api/prerender/frontNav.ts +13 -13
  191. package/server/api/prerender/language.ts +7 -7
  192. package/server/api/prerender/news.ts +8 -8
  193. package/server/api/prerender/quotes.ts +15 -15
  194. package/server/api/preview/contentPage/[...contentTypePath].ts +63 -63
  195. package/server/api/preview/contentUnique/[...contentTypePathUnique].ts +73 -81
  196. package/server/api/problemScript/[...problemScriptPath].ts +88 -92
  197. package/server/api/quote/data/[quoteId].ts +84 -87
  198. package/server/api/quote/ids.ts +3 -3
  199. package/server/erudit/build.ts +132 -137
  200. package/server/erudit/cameos/build.ts +161 -161
  201. package/server/erudit/config.ts +13 -13
  202. package/server/erudit/content/global/build.ts +300 -297
  203. package/server/erudit/content/global/singleton.ts +5 -5
  204. package/server/erudit/content/nav/build.ts +459 -463
  205. package/server/erudit/content/nav/front.ts +125 -127
  206. package/server/erudit/content/nav/repository/books.ts +37 -40
  207. package/server/erudit/content/nav/repository/get.ts +33 -33
  208. package/server/erudit/content/nav/repository/hasChildren.ts +5 -5
  209. package/server/erudit/content/nav/repository/hasNav.ts +3 -3
  210. package/server/erudit/content/nav/repository/hasParent.ts +5 -5
  211. package/server/erudit/content/nav/repository/id.ts +9 -9
  212. package/server/erudit/content/nav/repository/index.ts +9 -9
  213. package/server/erudit/content/nav/repository/order.ts +14 -14
  214. package/server/erudit/content/nav/repository/previousNext.ts +35 -35
  215. package/server/erudit/content/nav/repository/walk.ts +127 -127
  216. package/server/erudit/content/nav/setup.ts +13 -13
  217. package/server/erudit/content/nav/types.ts +24 -24
  218. package/server/erudit/content/repository/breadcrumbs.ts +24 -24
  219. package/server/erudit/content/repository/children.ts +47 -47
  220. package/server/erudit/content/repository/connections.ts +35 -35
  221. package/server/erudit/content/repository/contentLink.ts +16 -16
  222. package/server/erudit/content/repository/decoration.ts +23 -23
  223. package/server/erudit/content/repository/deps.ts +121 -84
  224. package/server/erudit/content/repository/description.ts +11 -11
  225. package/server/erudit/content/repository/elementSnippets.ts +105 -105
  226. package/server/erudit/content/repository/externals.ts +50 -50
  227. package/server/erudit/content/repository/flags.ts +33 -33
  228. package/server/erudit/content/repository/seo.ts +12 -12
  229. package/server/erudit/content/repository/stats.ts +97 -97
  230. package/server/erudit/content/repository/title.ts +27 -27
  231. package/server/erudit/content/repository/topicParts.ts +39 -39
  232. package/server/erudit/content/repository/unique.ts +76 -76
  233. package/server/erudit/content/resolve/book.ts +29 -32
  234. package/server/erudit/content/resolve/group.ts +34 -39
  235. package/server/erudit/content/resolve/index.ts +272 -290
  236. package/server/erudit/content/resolve/page.ts +80 -87
  237. package/server/erudit/content/resolve/topic.ts +220 -246
  238. package/server/erudit/content/resolve/utils/contentError.ts +10 -10
  239. package/server/erudit/content/resolve/utils/insertContentItem.ts +113 -122
  240. package/server/erudit/content/resolve/utils/insertContentResolved.ts +126 -132
  241. package/server/erudit/content/search.ts +146 -163
  242. package/server/erudit/contributors/build.ts +158 -166
  243. package/server/erudit/contributors/global.ts +3 -3
  244. package/server/erudit/contributors/repository/avatarUrl.ts +10 -10
  245. package/server/erudit/contributors/repository/contributions.ts +171 -178
  246. package/server/erudit/contributors/repository/count.ts +3 -3
  247. package/server/erudit/contributors/search.ts +34 -34
  248. package/server/erudit/db/repository/pushFile.ts +23 -26
  249. package/server/erudit/db/repository/pushProblemScript.ts +19 -19
  250. package/server/erudit/db/repository/pushProseLink.ts +40 -40
  251. package/server/erudit/db/schema/cameos.ts +7 -7
  252. package/server/erudit/db/schema/content.ts +18 -18
  253. package/server/erudit/db/schema/contentContributions.ts +15 -15
  254. package/server/erudit/db/schema/contentDeps.ts +21 -21
  255. package/server/erudit/db/schema/contentElementStats.ts +20 -20
  256. package/server/erudit/db/schema/contentProseLinks.ts +23 -23
  257. package/server/erudit/db/schema/contentSnippets.ts +15 -15
  258. package/server/erudit/db/schema/contentToc.ts +16 -16
  259. package/server/erudit/db/schema/contentUniques.ts +19 -25
  260. package/server/erudit/db/schema/contributors.ts +12 -12
  261. package/server/erudit/db/schema/files.ts +11 -11
  262. package/server/erudit/db/schema/groups.ts +6 -6
  263. package/server/erudit/db/schema/index.ts +17 -17
  264. package/server/erudit/db/schema/news.ts +7 -7
  265. package/server/erudit/db/schema/pages.ts +7 -7
  266. package/server/erudit/db/schema/problemScripts.ts +14 -14
  267. package/server/erudit/db/schema/sponsors.ts +9 -9
  268. package/server/erudit/db/schema/topics.ts +9 -9
  269. package/server/erudit/db/setup.ts +62 -62
  270. package/server/erudit/db/types.ts +10 -10
  271. package/server/erudit/global.ts +38 -33
  272. package/server/erudit/importer.ts +94 -97
  273. package/server/erudit/index.ts +96 -90
  274. package/server/erudit/language/list/en.ts +116 -116
  275. package/server/erudit/language/list/ru.ts +120 -120
  276. package/server/erudit/language/list.ts +6 -6
  277. package/server/erudit/language/setup.ts +36 -36
  278. package/server/erudit/language/types.ts +16 -16
  279. package/server/erudit/logger.ts +73 -77
  280. package/server/erudit/news/build.ts +112 -114
  281. package/server/erudit/news/repository/batch.ts +61 -61
  282. package/server/erudit/path.ts +19 -0
  283. package/server/erudit/prose/repository/finalize.ts +68 -68
  284. package/server/erudit/prose/repository/get.ts +54 -54
  285. package/server/erudit/prose/repository/resolve.ts +17 -17
  286. package/server/erudit/prose/storage/callout.ts +16 -14
  287. package/server/erudit/prose/storage/image.ts +22 -20
  288. package/server/erudit/prose/storage/link.ts +222 -226
  289. package/server/erudit/prose/storage/problemScript.ts +23 -21
  290. package/server/erudit/prose/storage/video.ts +16 -14
  291. package/server/erudit/prose/transform/bundleProblemScript.ts +6 -6
  292. package/server/erudit/prose/transform/extensions.ts +15 -15
  293. package/server/erudit/quote/repository/ids.ts +31 -31
  294. package/server/erudit/repository.ts +96 -96
  295. package/server/erudit/sponsors/build.ts +161 -165
  296. package/server/erudit/sponsors/repository/avatarUrl.ts +10 -10
  297. package/server/erudit/sponsors/repository/count.ts +4 -4
  298. package/server/erudit/staticFile.ts +28 -28
  299. package/server/plugins/augmentCss.ts +17 -17
  300. package/server/plugins/lang.ts +5 -7
  301. package/server/plugins/metaViewport.ts +15 -15
  302. package/server/plugins/theme.ts +13 -13
  303. package/server/routes/file/[...path].ts +18 -18
  304. package/server/routes/robots.txt.ts +9 -9
  305. package/server/routes/search.json.gz.ts +76 -75
  306. package/server/routes/sitemap.xml.ts +83 -81
  307. package/shared/search/encoders.ts +10 -10
  308. package/shared/types/asideMajorPages.ts +2 -2
  309. package/shared/types/breadcrumbs.ts +3 -3
  310. package/shared/types/contentChildren.ts +10 -10
  311. package/shared/types/contentConnections.ts +27 -27
  312. package/shared/types/contentStats.ts +6 -6
  313. package/shared/types/elementSnippet.ts +14 -14
  314. package/shared/types/frontContentNav.ts +17 -17
  315. package/shared/types/indexPage.ts +20 -20
  316. package/shared/types/language.ts +174 -174
  317. package/shared/types/mainContent.ts +40 -40
  318. package/shared/types/news.ts +13 -13
  319. package/shared/types/preview.ts +28 -28
  320. package/shared/types/runtimeConfig.ts +29 -48
  321. package/shared/types/search.ts +32 -32
  322. package/shared/utils/contentTypePath.ts +44 -44
  323. package/shared/utils/icons.ts +7 -7
  324. package/shared/utils/pages.ts +19 -20
  325. package/shared/utils/stringColor.ts +8 -8
  326. package/shared/utils/toStringEqual.ts +13 -13
  327. package/shared/utils/zip.ts +64 -64
  328. package/test/shared/utils/zip.test.ts +8 -8
  329. package/tsconfig.json +15 -15
  330. package/bin/erudit.mjs +0 -2
  331. package/modules/erudit/setup/aliases.ts +0 -17
  332. package/modules/erudit/setup/baseUrl.ts +0 -19
  333. package/modules/erudit/setup/nuxtConfig.ts +0 -62
  334. package/modules/erudit/setup/projectConfig.ts +0 -115
  335. package/shared/utils/slasher.ts +0 -64
  336. package/test/shared/utils/slasher.test.ts +0 -75
@@ -1,226 +1,222 @@
1
- import {
2
- ProseError,
3
- uniqueName2Id,
4
- type GenericStorage,
5
- type ProseElement,
6
- } from '@jsprose/core';
7
-
8
- import { isTopicPart } from '@erudit-js/core/content/topic';
9
- import type { ContentPointer } from '@erudit-js/core/content/pointer';
10
- import type {
11
- referenceSchema,
12
- refSchema,
13
- } from '@erudit-js/prose/elements/link/reference/core';
14
- import type {
15
- dependencySchema,
16
- depSchema,
17
- } from '@erudit-js/prose/elements/link/dependency/core';
18
- import type { LinkStorage } from '@erudit-js/prose/elements/link/storage';
19
-
20
- export async function createLinkStorage(
21
- element:
22
- | ProseElement<typeof refSchema>
23
- | ProseElement<typeof referenceSchema>
24
- | ProseElement<typeof depSchema>
25
- | ProseElement<typeof dependencySchema>,
26
- storage: GenericStorage,
27
- ) {
28
- let linkStorage: LinkStorage | undefined;
29
-
30
- const storageKeyParts = element.storageKey!.split('/');
31
- const linkType = storageKeyParts[0];
32
- const strProseLink = storageKeyParts.slice(1).join('/');
33
-
34
- if (linkType === '<link:direct>') {
35
- linkStorage = {
36
- type: 'direct',
37
- resolvedHref: strProseLink,
38
- previewRequest: {
39
- type: 'direct-link',
40
- href: strProseLink,
41
- },
42
- };
43
- } else if (linkType === '<link:global>') {
44
- const proseLinkParts = strProseLink.split('/');
45
- const uniquePart = proseLinkParts.pop();
46
-
47
- if (uniquePart?.startsWith('$')) {
48
- //
49
- // Unique link
50
- //
51
-
52
- const contentPointer = await getContentPointerFor(
53
- proseLinkParts.join('/'),
54
- );
55
-
56
- const shortId = ERUDIT.contentNav.getNodeOrThrow(
57
- contentPointer.id,
58
- ).shortId;
59
-
60
- const contentTitle = await ERUDIT.repository.content.title(
61
- contentPointer.id,
62
- );
63
-
64
- const uniqueName = uniquePart.slice(1);
65
- const unique = await ERUDIT.repository.content.unique(
66
- contentPointer.id,
67
- contentPointer.type === 'topic' ? contentPointer.part : 'page',
68
- uniqueName,
69
- );
70
-
71
- if (contentPointer.type === 'topic') {
72
- linkStorage = {
73
- type: 'unique',
74
- schemaName: unique.prose.schemaName,
75
- elementTitle: unique.title || undefined,
76
- content: {
77
- contentType: 'topic',
78
- contentTitle,
79
- topicPart: contentPointer.part,
80
- },
81
- resolvedHref: PAGES.topic(
82
- contentPointer.part,
83
- shortId,
84
- uniqueName2Id(uniqueName),
85
- ),
86
- previewRequest: {
87
- type: 'unique',
88
- contentFullId: contentPointer.id,
89
- contentType: 'topic',
90
- topicPart: contentPointer.part,
91
- uniqueName: uniqueName,
92
- },
93
- };
94
- } else {
95
- linkStorage = {
96
- type: 'unique',
97
- schemaName: unique.prose.schemaName,
98
- elementTitle: unique.title || undefined,
99
- content: {
100
- contentType: contentPointer.type,
101
- contentTitle,
102
- },
103
- resolvedHref: PAGES.page(
104
- shortId,
105
- uniqueName2Id(uniqueName),
106
- ),
107
- previewRequest: {
108
- type: 'unique',
109
- contentFullId: contentPointer.id,
110
- contentType: 'page',
111
- uniqueName: uniqueName,
112
- },
113
- };
114
- }
115
- } else {
116
- //
117
- // Content item link
118
- //
119
-
120
- const contentPointer = await getContentPointerFor(strProseLink);
121
-
122
- const shortId = ERUDIT.contentNav.getNodeOrThrow(
123
- contentPointer.id,
124
- ).shortId;
125
-
126
- const contentTitle = await ERUDIT.repository.content.title(
127
- contentPointer.id,
128
- );
129
-
130
- if (contentPointer.type === 'topic') {
131
- linkStorage = {
132
- type: 'contentItem',
133
- content: {
134
- contentType: 'topic',
135
- contentTitle,
136
- topicPart: contentPointer.part,
137
- },
138
- resolvedHref: PAGES.topic(contentPointer.part, shortId),
139
- previewRequest: {
140
- type: 'content-page',
141
- contentType: 'topic',
142
- topicPart: contentPointer.part,
143
- fullId: contentPointer.id,
144
- },
145
- };
146
- } else {
147
- linkStorage = {
148
- type: 'contentItem',
149
- content: {
150
- contentType: contentPointer.type,
151
- contentTitle,
152
- },
153
- resolvedHref: PAGES[contentPointer.type](shortId),
154
- previewRequest: {
155
- type: 'content-page',
156
- contentType: contentPointer.type,
157
- fullId: contentPointer.id,
158
- },
159
- };
160
- }
161
- }
162
- }
163
-
164
- if (!linkStorage) {
165
- throw new ProseError(
166
- `Unable to create prose link storage for link: ${element.storageKey}`,
167
- );
168
- }
169
-
170
- storage[element.storageKey!] = linkStorage;
171
- }
172
-
173
- async function getContentPointerFor(
174
- contentId: string,
175
- ): Promise<ContentPointer> {
176
- if (!contentId) {
177
- throw new ProseError(`Invalid content ID: "${contentId}"!`);
178
- }
179
-
180
- const contentNavNode = ERUDIT.contentNav.getNode(contentId);
181
-
182
- if (contentNavNode) {
183
- if (contentNavNode.type === 'topic') {
184
- const defaultTopicPart =
185
- await ERUDIT.repository.content.defaultTopicPart(
186
- contentNavNode.fullId,
187
- );
188
-
189
- return {
190
- type: 'topic',
191
- id: contentNavNode.fullId,
192
- part: defaultTopicPart,
193
- };
194
- } else {
195
- return {
196
- type: contentNavNode.type,
197
- id: contentNavNode.fullId,
198
- };
199
- }
200
- }
201
-
202
- const contentIdParts = contentId.split('/');
203
- const maybeTopicPart = contentIdParts.pop()!;
204
-
205
- if (!isTopicPart(maybeTopicPart)) {
206
- throw new ProseError(
207
- `Prose link part "${contentId}" must be a valid topic part!`,
208
- );
209
- }
210
-
211
- const shortenedContentNavNode = ERUDIT.contentNav.getNode(
212
- contentIdParts.join('/'),
213
- );
214
-
215
- if (shortenedContentNavNode) {
216
- return {
217
- type: 'topic',
218
- id: shortenedContentNavNode.fullId,
219
- part: maybeTopicPart,
220
- };
221
- }
222
-
223
- throw new ProseError(
224
- `Unable to find content for prose link: "${contentId}"!`,
225
- );
226
- }
1
+ import {
2
+ ProseError,
3
+ uniqueName2Id,
4
+ type GenericStorage,
5
+ type ProseElement,
6
+ } from '@jsprose/core';
7
+
8
+ import { isTopicPart } from '@erudit-js/core/content/topic';
9
+ import type { ContentPointer } from '@erudit-js/core/content/pointer';
10
+ import type {
11
+ referenceSchema,
12
+ refSchema,
13
+ } from '@erudit-js/prose/elements/link/reference/core';
14
+ import type {
15
+ dependencySchema,
16
+ depSchema,
17
+ } from '@erudit-js/prose/elements/link/dependency/core';
18
+ import type { LinkStorage } from '@erudit-js/prose/elements/link/storage';
19
+
20
+ export async function createLinkStorage(
21
+ element:
22
+ | ProseElement<typeof refSchema>
23
+ | ProseElement<typeof referenceSchema>
24
+ | ProseElement<typeof depSchema>
25
+ | ProseElement<typeof dependencySchema>,
26
+ storage: GenericStorage,
27
+ ) {
28
+ let linkStorage: LinkStorage | undefined;
29
+
30
+ const storageKeyParts = element.storageKey!.split('/');
31
+ const linkType = storageKeyParts[0];
32
+ const strProseLink = storageKeyParts.slice(1).join('/');
33
+
34
+ if (linkType === '<link:direct>') {
35
+ linkStorage = {
36
+ type: 'direct',
37
+ resolvedHref: strProseLink,
38
+ previewRequest: {
39
+ type: 'direct-link',
40
+ href: strProseLink,
41
+ },
42
+ };
43
+ } else if (linkType === '<link:global>') {
44
+ const proseLinkParts = strProseLink.split('/');
45
+ const uniquePart = proseLinkParts.pop();
46
+
47
+ if (uniquePart?.startsWith('$')) {
48
+ //
49
+ // Unique link
50
+ //
51
+
52
+ const contentPointer = await getContentPointerFor(
53
+ proseLinkParts.join('/'),
54
+ );
55
+
56
+ const shortId = ERUDIT.contentNav.getNodeOrThrow(
57
+ contentPointer.id,
58
+ ).shortId;
59
+
60
+ const contentTitle = await ERUDIT.repository.content.title(
61
+ contentPointer.id,
62
+ );
63
+
64
+ const uniqueName = uniquePart.slice(1);
65
+ const unique = await ERUDIT.repository.content.unique(
66
+ contentPointer.id,
67
+ contentPointer.type === 'topic' ? contentPointer.part : 'page',
68
+ uniqueName,
69
+ );
70
+
71
+ if (contentPointer.type === 'topic') {
72
+ linkStorage = {
73
+ type: 'unique',
74
+ schemaName: unique.prose.schemaName,
75
+ elementTitle: unique.title || undefined,
76
+ content: {
77
+ contentType: 'topic',
78
+ contentTitle,
79
+ topicPart: contentPointer.part,
80
+ },
81
+ resolvedHref: PAGES.topic(
82
+ contentPointer.part,
83
+ shortId,
84
+ uniqueName2Id(uniqueName),
85
+ ),
86
+ previewRequest: {
87
+ type: 'unique',
88
+ contentFullId: contentPointer.id,
89
+ contentType: 'topic',
90
+ topicPart: contentPointer.part,
91
+ uniqueName: uniqueName,
92
+ },
93
+ };
94
+ } else {
95
+ linkStorage = {
96
+ type: 'unique',
97
+ schemaName: unique.prose.schemaName,
98
+ elementTitle: unique.title || undefined,
99
+ content: {
100
+ contentType: contentPointer.type,
101
+ contentTitle,
102
+ },
103
+ resolvedHref: PAGES.page(shortId, uniqueName2Id(uniqueName)),
104
+ previewRequest: {
105
+ type: 'unique',
106
+ contentFullId: contentPointer.id,
107
+ contentType: 'page',
108
+ uniqueName: uniqueName,
109
+ },
110
+ };
111
+ }
112
+ } else {
113
+ //
114
+ // Content item link
115
+ //
116
+
117
+ const contentPointer = await getContentPointerFor(strProseLink);
118
+
119
+ const shortId = ERUDIT.contentNav.getNodeOrThrow(
120
+ contentPointer.id,
121
+ ).shortId;
122
+
123
+ const contentTitle = await ERUDIT.repository.content.title(
124
+ contentPointer.id,
125
+ );
126
+
127
+ if (contentPointer.type === 'topic') {
128
+ linkStorage = {
129
+ type: 'contentItem',
130
+ content: {
131
+ contentType: 'topic',
132
+ contentTitle,
133
+ topicPart: contentPointer.part,
134
+ },
135
+ resolvedHref: PAGES.topic(contentPointer.part, shortId),
136
+ previewRequest: {
137
+ type: 'content-page',
138
+ contentType: 'topic',
139
+ topicPart: contentPointer.part,
140
+ fullId: contentPointer.id,
141
+ },
142
+ };
143
+ } else {
144
+ linkStorage = {
145
+ type: 'contentItem',
146
+ content: {
147
+ contentType: contentPointer.type,
148
+ contentTitle,
149
+ },
150
+ resolvedHref: PAGES[contentPointer.type](shortId),
151
+ previewRequest: {
152
+ type: 'content-page',
153
+ contentType: contentPointer.type,
154
+ fullId: contentPointer.id,
155
+ },
156
+ };
157
+ }
158
+ }
159
+ }
160
+
161
+ if (!linkStorage) {
162
+ throw new ProseError(
163
+ `Unable to create prose link storage for link: ${element.storageKey}`,
164
+ );
165
+ }
166
+
167
+ storage[element.storageKey!] = linkStorage;
168
+ }
169
+
170
+ async function getContentPointerFor(
171
+ contentId: string,
172
+ ): Promise<ContentPointer> {
173
+ if (!contentId) {
174
+ throw new ProseError(`Invalid content ID: "${contentId}"!`);
175
+ }
176
+
177
+ const contentNavNode = ERUDIT.contentNav.getNode(contentId);
178
+
179
+ if (contentNavNode) {
180
+ if (contentNavNode.type === 'topic') {
181
+ const defaultTopicPart = await ERUDIT.repository.content.defaultTopicPart(
182
+ contentNavNode.fullId,
183
+ );
184
+
185
+ return {
186
+ type: 'topic',
187
+ id: contentNavNode.fullId,
188
+ part: defaultTopicPart,
189
+ };
190
+ } else {
191
+ return {
192
+ type: contentNavNode.type,
193
+ id: contentNavNode.fullId,
194
+ };
195
+ }
196
+ }
197
+
198
+ const contentIdParts = contentId.split('/');
199
+ const maybeTopicPart = contentIdParts.pop()!;
200
+
201
+ if (!isTopicPart(maybeTopicPart)) {
202
+ throw new ProseError(
203
+ `Prose link part "${contentId}" must be a valid topic part!`,
204
+ );
205
+ }
206
+
207
+ const shortenedContentNavNode = ERUDIT.contentNav.getNode(
208
+ contentIdParts.join('/'),
209
+ );
210
+
211
+ if (shortenedContentNavNode) {
212
+ return {
213
+ type: 'topic',
214
+ id: shortenedContentNavNode.fullId,
215
+ part: maybeTopicPart,
216
+ };
217
+ }
218
+
219
+ throw new ProseError(
220
+ `Unable to find content for prose link: "${contentId}"!`,
221
+ );
222
+ }
@@ -1,21 +1,23 @@
1
- import type { GenericStorage, ProseElement } from '@jsprose/core';
2
- import type { problemSchema } from '@erudit-js/prose/elements/problem/problem';
3
- import type { subProblemSchema } from '@erudit-js/prose/elements/problem/problems';
4
- import { createProblemScriptStorage as _createProblemScriptStorage } from '@erudit-js/prose/elements/problem/storage';
5
-
6
- export async function createProblemScriptStorage(
7
- element:
8
- | ProseElement<typeof problemSchema>
9
- | ProseElement<typeof subProblemSchema>,
10
- storage: GenericStorage,
11
- ) {
12
- if (!element.storageKey) {
13
- return;
14
- }
15
-
16
- storage[element.storageKey!] = _createProblemScriptStorage(
17
- ERUDIT.config.paths.project,
18
- ERUDIT.config.public.project.baseUrl,
19
- element.storageKey.replace('problemScript:', ''),
20
- );
21
- }
1
+ import type { GenericStorage, ProseElement } from '@jsprose/core';
2
+ import type { problemSchema } from '@erudit-js/prose/elements/problem/problem';
3
+ import type { subProblemSchema } from '@erudit-js/prose/elements/problem/problems';
4
+ import { createProblemScriptStorage as _createProblemScriptStorage } from '@erudit-js/prose/elements/problem/storage';
5
+
6
+ export async function createProblemScriptStorage(
7
+ element:
8
+ | ProseElement<typeof problemSchema>
9
+ | ProseElement<typeof subProblemSchema>,
10
+ storage: GenericStorage,
11
+ ) {
12
+ if (!element.storageKey) {
13
+ return;
14
+ }
15
+
16
+ const runtimeConfig = useRuntimeConfig();
17
+
18
+ storage[element.storageKey!] = _createProblemScriptStorage(
19
+ ERUDIT.paths.project(),
20
+ runtimeConfig.app.baseURL,
21
+ element.storageKey.replace('problemScript:', ''),
22
+ );
23
+ }
@@ -1,14 +1,16 @@
1
- import type { GenericStorage, ProseElement } from '@jsprose/core';
2
- import type { videoSchema } from '@erudit-js/prose/elements/video/core';
3
- import { createVideoStorage as _createVideoStorage } from '@erudit-js/prose/elements/video/storage';
4
-
5
- export async function createVideoStorage(
6
- element: ProseElement<typeof videoSchema>,
7
- storage: GenericStorage,
8
- ) {
9
- storage[element.storageKey!] = _createVideoStorage(
10
- ERUDIT.config.paths.project,
11
- ERUDIT.config.public.project.baseUrl,
12
- element.data.src,
13
- );
14
- }
1
+ import type { GenericStorage, ProseElement } from '@jsprose/core';
2
+ import type { videoSchema } from '@erudit-js/prose/elements/video/core';
3
+ import { createVideoStorage as _createVideoStorage } from '@erudit-js/prose/elements/video/storage';
4
+
5
+ export async function createVideoStorage(
6
+ element: ProseElement<typeof videoSchema>,
7
+ storage: GenericStorage,
8
+ ) {
9
+ const runtimeConfig = useRuntimeConfig();
10
+
11
+ storage[element.storageKey!] = _createVideoStorage(
12
+ ERUDIT.paths.project(),
13
+ runtimeConfig.app.baseURL,
14
+ element.data.src,
15
+ );
16
+ }
@@ -1,6 +1,6 @@
1
- export async function bundleProblemScript(problemId: string) {
2
- // Создаем фейковый stdin для esbuild, в котором импортирует требуемый скрипт из файла, где он объявлен
3
- // Так на выходе получим только бандл скрипта, без лишних зависимостей
4
- }
5
-
6
- // Функция для вызова ESBuild бандлера, чтобы собирать problem скрипты и прочее
1
+ export async function bundleProblemScript(problemId: string) {
2
+ // Создаем фейковый stdin для esbuild, в котором импортирует требуемый скрипт из файла, где он объявлен
3
+ // Так на выходе получим только бандл скрипта, без лишних зависимостей
4
+ }
5
+
6
+ // Функция для вызова ESBuild бандлера, чтобы собирать problem скрипты и прочее
@@ -1,15 +1,15 @@
1
- export const CODE_EXTENSIONS = ['json', 'ts', 'tsx', 'js', 'jsx'];
2
-
3
- export const STATIC_ASSET_EXTENSIONS = [
4
- 'png',
5
- 'jpg',
6
- 'jpeg',
7
- 'gif',
8
- 'bmp',
9
- 'webp',
10
- 'svg',
11
- 'mp4',
12
- 'webm',
13
- ];
14
-
15
- export const EXTENSIONS = [...CODE_EXTENSIONS, ...STATIC_ASSET_EXTENSIONS];
1
+ export const CODE_EXTENSIONS = ['json', 'ts', 'tsx', 'js', 'jsx'];
2
+
3
+ export const STATIC_ASSET_EXTENSIONS = [
4
+ 'png',
5
+ 'jpg',
6
+ 'jpeg',
7
+ 'gif',
8
+ 'bmp',
9
+ 'webp',
10
+ 'svg',
11
+ 'mp4',
12
+ 'webm',
13
+ ];
14
+
15
+ export const EXTENSIONS = [...CODE_EXTENSIONS, ...STATIC_ASSET_EXTENSIONS];
@@ -1,31 +1,31 @@
1
- import { createQuoteId, type QuoteIds } from '@erudit-js/core/quote';
2
- import { eq } from 'drizzle-orm';
3
-
4
- export async function getQuoteIds(): Promise<QuoteIds> {
5
- const ids: QuoteIds = {};
6
-
7
- const dbCameos = await ERUDIT.db.query.cameos.findMany({
8
- columns: { cameoId: true },
9
- });
10
-
11
- if (dbCameos.length > 0) {
12
- ids.cameo = dbCameos.map((dbCameo) =>
13
- createQuoteId('cameo', dbCameo.cameoId),
14
- );
15
- }
16
-
17
- if (ERUDIT.config.public.project.sponsors?.enabled) {
18
- const dbSponsors = await ERUDIT.db.query.sponsors.findMany({
19
- columns: { sponsorId: true },
20
- where: eq(ERUDIT.db.schema.sponsors.hasMessages, true),
21
- });
22
-
23
- if (dbSponsors.length > 0) {
24
- ids.sponsor = dbSponsors.map((dbSponsor) =>
25
- createQuoteId('sponsor', dbSponsor.sponsorId),
26
- );
27
- }
28
- }
29
-
30
- return ids;
31
- }
1
+ import { createQuoteId, type QuoteIds } from '@erudit-js/core/quote';
2
+ import { eq } from 'drizzle-orm';
3
+
4
+ export async function getQuoteIds(): Promise<QuoteIds> {
5
+ const ids: QuoteIds = {};
6
+
7
+ const dbCameos = await ERUDIT.db.query.cameos.findMany({
8
+ columns: { cameoId: true },
9
+ });
10
+
11
+ if (dbCameos.length > 0) {
12
+ ids.cameo = dbCameos.map((dbCameo) =>
13
+ createQuoteId('cameo', dbCameo.cameoId),
14
+ );
15
+ }
16
+
17
+ if (ERUDIT.config.public.sponsors?.enabled) {
18
+ const dbSponsors = await ERUDIT.db.query.sponsors.findMany({
19
+ columns: { sponsorId: true },
20
+ where: eq(ERUDIT.db.schema.sponsors.hasMessages, true),
21
+ });
22
+
23
+ if (dbSponsors.length > 0) {
24
+ ids.sponsor = dbSponsors.map((dbSponsor) =>
25
+ createQuoteId('sponsor', dbSponsor.sponsorId),
26
+ );
27
+ }
28
+ }
29
+
30
+ return ids;
31
+ }