erudit 3.0.0-dev.6 → 3.0.0-dev.7

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 (48) hide show
  1. package/app/components/SiteMain.vue +2 -3
  2. package/app/components/aside/minor/topic/TopicToc.vue +1 -1
  3. package/app/components/bitran/BitranContent.vue +10 -3
  4. package/app/components/main/topic/MainTopic.vue +1 -2
  5. package/app/components/main/utils/Breadcrumb.vue +1 -6
  6. package/app/components/main/utils/ContentPopovers.vue +11 -5
  7. package/app/components/preview/display/Unique.vue +7 -1
  8. package/app/composables/bitran.ts +37 -33
  9. package/app/composables/bitranContent.ts +16 -4
  10. package/app/composables/bitranLocation.ts +1 -1
  11. package/app/pages/group/[...groupId].vue +3 -4
  12. package/app/scripts/preview/data/unique.ts +6 -5
  13. package/bin/erudit.mjs +2 -0
  14. package/module/index.ts +4 -5
  15. package/package.json +11 -7
  16. package/server/api/aside/major/nav/global.ts +1 -1
  17. package/server/api/aside/minor/path.ts +1 -2
  18. package/server/api/preview/page/[...parts].ts +3 -2
  19. package/server/api/preview/unique/[location].ts +6 -3
  20. package/server/plugin/bitran/content.ts +49 -42
  21. package/server/plugin/bitran/location.ts +1 -1
  22. package/server/plugin/bitran/products/include.ts +13 -15
  23. package/server/plugin/bitran/products/link.ts +12 -12
  24. package/server/plugin/bitran/toc.ts +21 -29
  25. package/server/plugin/bitran/transpiler.ts +15 -19
  26. package/server/plugin/build/jobs/content/parse.ts +19 -10
  27. package/server/plugin/build/setup.ts +1 -0
  28. package/server/plugin/content/absoluteId.ts +1 -1
  29. package/server/plugin/content/context.ts +1 -1
  30. package/shared/aside/minor.ts +2 -1
  31. package/shared/bitran/stringContent.ts +6 -0
  32. package/shared/icons.ts +1 -1
  33. package/shared/link.ts +5 -2
  34. package/tsconfig.json +1 -1
  35. package/shared/bitran/context.ts +0 -8
  36. package/shared/bitran/default.ts +0 -46
  37. package/shared/bitran/link/Link.vue +0 -166
  38. package/shared/bitran/link/factory.ts +0 -24
  39. package/shared/bitran/link/icon.svg +0 -3
  40. package/shared/bitran/link/languages/en.ts +0 -7
  41. package/shared/bitran/link/languages/ru.ts +0 -7
  42. package/shared/bitran/link/renderer.ts +0 -21
  43. package/shared/bitran/link/shared.ts +0 -17
  44. package/shared/bitran/link/target.ts +0 -134
  45. package/shared/bitran/link/transpiler.ts +0 -10
  46. package/shared/bitran/location.ts +0 -166
  47. package/test/bitran/link/target.test.ts +0 -141
  48. package/test/bitran/location.test.ts +0 -143
@@ -11,7 +11,6 @@
11
11
 
12
12
  <style lang="scss" module>
13
13
  @use '$/def/bp';
14
- @use '@bitran-js/renderer-vue/scss/def' as bitranDef;
15
14
 
16
15
  .main {
17
16
  --_pMainBase: var(--gapBig);
@@ -24,8 +23,8 @@
24
23
  font-size: 18px;
25
24
 
26
25
  @include bp.below('mobile') {
27
- --_pMainBase: #{bitranDef.$asideWidth};
28
- font-size: 15px;
26
+ --_pMainBase: var(--_bitran_asideWidth);
27
+ font-size: 14px;
29
28
  }
30
29
 
31
30
  .mainInner {
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
  import { headingName } from '@erudit-js/bitran-elements/heading/shared';
3
3
 
4
- import { stringifyBitranLocation } from '@shared/bitran/location';
4
+ import { stringifyBitranLocation } from '@erudit-js/cog/schema';
5
5
  import type { TocItem } from '@erudit/shared/bitran/toc';
6
6
  import { topicLocation } from '@app/scripts/aside/minor/topic';
7
7
  import { injectAsideData } from '@app/scripts/aside/minor/state';
@@ -1,7 +1,8 @@
1
1
  <script lang="ts" setup>
2
2
  import { Bitran, type BitranContent } from '@bitran-js/renderer-vue';
3
+ import type { BitranContext } from '@erudit-js/cog/schema';
3
4
 
4
- import type { BitranContext } from '@shared/bitran/context';
5
+ import eruditConfig from '#erudit/config';
5
6
 
6
7
  import RenderWrapper from './RenderWrapper.vue';
7
8
 
@@ -36,15 +37,16 @@ const isServer = import.meta.server;
36
37
  :RenderWrapper
37
38
  :isDev
38
39
  :isServer
40
+ :language="eruditConfig.language"
39
41
  />
40
42
  </template>
41
43
 
42
44
  <style lang="scss" module>
43
- @use '@bitran-js/renderer-vue/scss/def' as bitranDef;
45
+ @use '$/def/bp';
44
46
 
45
47
  .eruditBitranContainer {
46
48
  padding: var(--_pMainY) var(--_pMainX);
47
- padding-left: calc(var(--_pMainX) - #{bitranDef.$asideWidth});
49
+ padding-left: calc(var(--_pMainX) - var(--_bitran_asideWidth));
48
50
 
49
51
  // Setting up Bitran
50
52
 
@@ -64,7 +66,12 @@ const isServer = import.meta.server;
64
66
  --bitran_textMuted: var(--textMuted);
65
67
  --bitran_textDimmed: var(--textDimmed);
66
68
  --bitran_textDisabled: var(--textDisabled);
69
+ --bitran_textDeep: var(--textDeep);
67
70
 
68
71
  --bitran_colorBrand: var(--brand);
72
+
73
+ @include bp.below('mobile') {
74
+ --bitran_gapBlocks: calc(22px);
75
+ }
69
76
  }
70
77
  </style>
@@ -1,6 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import type { TopicPart } from '@erudit-js/cog/schema';
3
- import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
2
+ import { NO_ALIASES, type TopicPart } from '@erudit-js/cog/schema';
4
3
 
5
4
  import eruditConfig from '#erudit/config';
6
5
 
@@ -56,18 +56,13 @@ function getIcon(contextIcon: string) {
56
56
 
57
57
  @include transition(color);
58
58
 
59
- // [my-icon]
60
- // {
61
- // position: relative;
62
- // top: .6px;
63
- // }
64
-
65
59
  &:hover {
66
60
  color: var(--textMuted);
67
61
  }
68
62
  }
69
63
 
70
64
  .sep {
65
+ flex-shrink: 0;
71
66
  position: relative;
72
67
  top: 0.5px;
73
68
  }
@@ -24,7 +24,7 @@ const phrase = await usePhrases(
24
24
 
25
25
  const flagData: Record<ContentFlag, PopoverData> = {
26
26
  dev: {
27
- icon: <MyIconName>'alert',
27
+ icon: <MyIconName>'construction',
28
28
  color: 'var(--warn)',
29
29
  title: phrase.flag_dev,
30
30
  description: phrase.flag_dev_description,
@@ -70,6 +70,7 @@ const hasPopovers = computed(() => {
70
70
  <ContentPopover v-if="generic?.dependencies" :data="dependenciesData">
71
71
  <ul :class="$style.dependenciesList">
72
72
  <li v-for="(value, key) in generic.dependencies">
73
+ <MyIcon :name="'arrow-left'" wrapper="span" />
73
74
  <NuxtLink :prefetch="false" :to="key">{{ value }}</NuxtLink>
74
75
  </li>
75
76
  </ul>
@@ -87,18 +88,23 @@ const hasPopovers = computed(() => {
87
88
 
88
89
  .dependenciesList {
89
90
  margin-top: var(--gapSmall);
90
- list-style-type: square;
91
+ list-style-type: none;
91
92
  list-style-position: inside;
92
93
  padding-inline-start: 0;
93
94
 
94
95
  li {
95
- &::marker {
96
- content: '↪';
96
+ display: flex;
97
+ gap: var(--gapSmall);
98
+ align-items: center;
99
+
100
+ [my-icon] {
101
+ flex-shrink: 0;
102
+ font-size: 0.95em;
103
+ transform: scaleX(-1);
97
104
  }
98
105
 
99
106
  a {
100
107
  color: inherit;
101
- padding-left: var(--gapSmall);
102
108
  }
103
109
  }
104
110
  }
@@ -5,6 +5,9 @@ import type { PreviewDataUnique } from '@app/scripts/preview/data/unique';
5
5
  import type { PreviewDisplayProps } from '@app/scripts/preview/display';
6
6
 
7
7
  const { data } = defineProps<PreviewDisplayProps<PreviewDataUnique>>();
8
+
9
+ const bitranTranspiler = await useBitranTranspiler();
10
+ const root = await bitranTranspiler.parser.parse(data.bitran.content.biCode);
8
11
  </script>
9
12
 
10
13
  <template>
@@ -16,7 +19,10 @@ const { data } = defineProps<PreviewDisplayProps<PreviewDataUnique>>();
16
19
  ]"
17
20
  >
18
21
  <BitranContent
19
- :content="data.bitran.content"
22
+ :content="{
23
+ root,
24
+ preRenderData: data.bitran.content.preRenderData,
25
+ }"
20
26
  :context="data.bitran.context"
21
27
  />
22
28
  </div>
@@ -1,9 +1,6 @@
1
- import eruditConfig from '#erudit/config';
2
- import bitranConfig from '#erudit/client/bitran';
3
-
4
1
  import {
5
2
  createPhraseCaller,
6
- getDefaultRenderers,
3
+ getDefaultRenderers as getDefaultBitranRenderers,
7
4
  getElementIcon,
8
5
  type ElementVueRenderers,
9
6
  } from '@bitran-js/renderer-vue';
@@ -12,22 +9,23 @@ import {
12
9
  type BitranTranspiler,
13
10
  type ElementTranspilers,
14
11
  } from '@bitran-js/transpiler';
15
- import { aliasesName } from '@erudit-js/bitran-elements/aliases/shared';
16
- import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
17
- import { headingName } from '@erudit-js/bitran-elements/heading/shared';
18
- import { defineHeadingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
19
- import { includeName } from '@erudit-js/bitran-elements/include/shared';
20
- import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
21
- import { linkName } from '@erudit/shared/bitran/link/shared';
22
- import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
23
- import { aliasesRenderer } from '@erudit-js/bitran-elements/aliases/renderer';
24
- import { headingRenderer } from '@erudit-js/bitran-elements/heading/renderer';
25
- import { includeRenderer } from '@erudit-js/bitran-elements/include/renderer';
26
- import { linkRenderer } from '@erudit/shared/bitran/link/renderer';
12
+ import type { BitranElements } from '@erudit-js/cog/schema';
13
+ import { eruditDefaultElements } from '@erudit-js/bitran-elements/default';
14
+
15
+ import eruditConfig from '#erudit/config';
16
+ import bitranConfig from '#erudit/client/bitran';
27
17
 
18
+ let defaultElements!: BitranElements;
28
19
  let bitranTranspiler!: BitranTranspiler;
29
20
  let bitranRenderers!: ElementVueRenderers;
30
21
 
22
+ globalThis.useEruditConfig = () => eruditConfig;
23
+
24
+ export function getDefaultElements() {
25
+ if (!defaultElements) defaultElements = eruditDefaultElements();
26
+ return defaultElements;
27
+ }
28
+
31
29
  //
32
30
  // Transpiler
33
31
  //
@@ -36,15 +34,7 @@ export async function useBitranTranspiler() {
36
34
  if (bitranTranspiler) return bitranTranspiler;
37
35
 
38
36
  const projectTranspilers = await getProjectTranspilers();
39
-
40
- const defaultTranspilers = {
41
- [aliasesName]: aliasesTranspiler,
42
- [includeName]: includeTranspiler,
43
- [headingName]: defineHeadingTranspiler({
44
- language: eruditConfig?.language,
45
- }),
46
- [linkName]: linkTranspiler,
47
- };
37
+ const defaultTranspilers = await getDefaultTranspilers();
48
38
 
49
39
  bitranTranspiler = defineBitranTranspiler({
50
40
  ...projectTranspilers,
@@ -66,6 +56,16 @@ async function getProjectTranspilers(): Promise<ElementTranspilers> {
66
56
  return projectTranspilers;
67
57
  }
68
58
 
59
+ async function getDefaultTranspilers(): Promise<ElementTranspilers> {
60
+ const defaultElements = getDefaultElements();
61
+ const defaultTranspilers: ElementTranspilers = {};
62
+
63
+ for (const [name, bitranElement] of Object.entries(defaultElements))
64
+ defaultTranspilers[name] = await bitranElement.transpiler();
65
+
66
+ return defaultTranspilers;
67
+ }
68
+
69
69
  //
70
70
  // Renderers
71
71
  //
@@ -74,13 +74,7 @@ export async function useBitranRenderers() {
74
74
  if (bitranRenderers) return bitranRenderers;
75
75
 
76
76
  const projectRenderers = await getProjectRenderers();
77
-
78
- const defaultRenderers = {
79
- [aliasesName]: aliasesRenderer,
80
- [includeName]: includeRenderer,
81
- [headingName]: headingRenderer,
82
- [linkName]: linkRenderer,
83
- };
77
+ const defaultRenderers = await getDefaultRenderers();
84
78
 
85
79
  // @ts-ignore
86
80
  bitranRenderers = {
@@ -103,6 +97,16 @@ async function getProjectRenderers() {
103
97
  return projectRenderers;
104
98
  }
105
99
 
100
+ async function getDefaultRenderers() {
101
+ const defaultElements = getDefaultElements();
102
+ const defaultRenderers: ElementVueRenderers = {};
103
+
104
+ for (const [name, bitranElement] of Object.entries(defaultElements))
105
+ defaultRenderers[name] = await bitranElement.renderer();
106
+
107
+ return defaultRenderers;
108
+ }
109
+
106
110
  //
107
111
  // Utils
108
112
  //
@@ -110,7 +114,7 @@ async function getProjectRenderers() {
110
114
  export async function useBitranElementRenderer(productName: string) {
111
115
  const renderer =
112
116
  (await useBitranRenderers())[productName] ||
113
- getDefaultRenderers()[productName];
117
+ getDefaultBitranRenderers()[productName];
114
118
 
115
119
  if (!renderer)
116
120
  throw new Error(`Missing Bitran product render "${productName}"!`);
@@ -1,11 +1,11 @@
1
1
  import type { ShallowRef } from 'vue';
2
2
  import type { BitranContent } from '@bitran-js/renderer-vue';
3
-
4
3
  import {
5
4
  encodeBitranLocation,
6
5
  stringifyBitranLocation,
7
6
  type BitranLocation,
8
- } from '@erudit/shared/bitran/location';
7
+ } from '@erudit-js/cog/schema';
8
+ import type { StringBitranContent } from '@erudit/shared/bitran/stringContent';
9
9
 
10
10
  export async function useBitranContent(
11
11
  location: Ref<BitranLocation | undefined>,
@@ -26,11 +26,23 @@ export async function useBitranContent(
26
26
 
27
27
  const apiRoute = `/api/bitran/content/${encodeBitranLocation(stringifyBitranLocation(location.value!))}`;
28
28
  nuxtApp.runWithContext(() => prerenderRoutes(apiRoute));
29
+
29
30
  // @ts-ignore
30
31
  contentPromise = (async () => {
31
- content.value = (await $fetch(apiRoute, {
32
+ const stringContent = (await $fetch(apiRoute, {
32
33
  responseType: 'json',
33
- })) as BitranContent;
34
+ })) as StringBitranContent;
35
+
36
+ const bitranTranspiler = await useBitranTranspiler();
37
+ const root = await bitranTranspiler.parser.parse(
38
+ stringContent.biCode,
39
+ );
40
+
41
+ content.value = {
42
+ root,
43
+ preRenderData: stringContent.preRenderData,
44
+ };
45
+
34
46
  return content;
35
47
  })();
36
48
  });
@@ -1,4 +1,4 @@
1
- import { locationFromPath, type BitranLocation } from '@shared/bitran/location';
1
+ import { locationFromPath, type BitranLocation } from '@erudit-js/cog/schema';
2
2
 
3
3
  export function useBitranLocation(): ComputedRef<BitranLocation | undefined> {
4
4
  const route = useRoute();
@@ -1,16 +1,15 @@
1
1
  <script lang="ts" setup>
2
- import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
3
-
4
- import { type ContentGroupData } from '@shared/content/data/type/group';
2
+ import { NO_ALIASES } from '@erudit-js/cog/schema';
5
3
  import eruditConfig from '#erudit/config';
6
4
 
5
+ import { type ContentGroupData } from '@shared/content/data/type/group';
6
+ import { locationIcon } from '@erudit/shared/icons';
7
7
  import ContentDecoration from '@app/components/main/utils/ContentDecoration.vue';
8
8
  import Breadcrumb from '@app/components/main/utils/Breadcrumb.vue';
9
9
  import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
10
10
  import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
11
11
  import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
12
12
  import ContentSection from '@app/components/main/utils/ContentSection.vue';
13
- import { locationIcon } from '@erudit/shared/icons';
14
13
 
15
14
  const location = useBitranLocation();
16
15
 
@@ -1,18 +1,19 @@
1
- import type { BitranContent } from 'bitran';
2
-
3
- import type { BitranContext } from '@erudit/shared/bitran/context';
1
+ import {
2
+ encodeBitranLocation,
3
+ type BitranContext,
4
+ } from '@erudit-js/cog/schema';
4
5
 
5
6
  import { PreviewDataType, type PreviewDataBase } from '../data';
6
7
  import type { PreviewFooter } from '../footer';
7
8
  import { PreviewRequestType, type PreviewRequest } from '../request';
8
- import { encodeBitranLocation } from '@erudit/shared/bitran/location';
9
+ import type { StringBitranContent } from '@erudit/shared/bitran/stringContent';
9
10
 
10
11
  export interface PreviewDataUnique extends PreviewDataBase {
11
12
  type: PreviewDataType.Unique;
12
13
  productName: string;
13
14
  bitran: {
14
15
  context: BitranContext;
15
- content: BitranContent;
16
+ content: StringBitranContent;
16
17
  };
17
18
  footer: PreviewFooter;
18
19
  }
package/bin/erudit.mjs ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '@erudit-js/cli/cli';
package/module/index.ts CHANGED
@@ -28,15 +28,14 @@ export default defineNuxtModule({
28
28
  }
29
29
 
30
30
  {
31
- // Handle sub dependencies
32
- const subDeps = eruditConfig.subDeps || [];
33
-
34
31
  const transpile = (_nuxt.options.build.transpile ||= []);
35
32
  const optimizeDeps = _nuxt.options.vite.optimizeDeps || {};
36
33
  const optimizeDepsInclude = (optimizeDeps.include ||= []);
37
34
 
38
- transpile.push(...subDeps);
39
- optimizeDepsInclude.push(...subDeps);
35
+ transpile.push(...(eruditConfig.nuxt?.transpile || []));
36
+ optimizeDepsInclude.push(
37
+ ...(eruditConfig.nuxt?.optimizeDeps || []),
38
+ );
40
39
  }
41
40
 
42
41
  // TODO: Watch for contributors folder and create/update template with their IDs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erudit",
3
- "version": "3.0.0-dev.6",
3
+ "version": "3.0.0-dev.7",
4
4
  "type": "module",
5
5
  "description": "🤓 CMS for perfect educational sites.",
6
6
  "license": "MIT",
@@ -10,15 +10,19 @@
10
10
  "url": "git+https://github.com/erudit-js/erudit.git",
11
11
  "directory": "packages/erudit"
12
12
  },
13
+ "bin": {
14
+ "erudit-cli": "bin/erudit.mjs",
15
+ "erudit": "bin/erudit.mjs"
16
+ },
13
17
  "peerDependencies": {
14
- "@erudit-js/bitran-elements": "3.0.0-dev.6"
18
+ "@erudit-js/bitran-elements": "3.0.0-dev.7"
15
19
  },
16
20
  "dependencies": {
17
- "@bitran-js/core": "1.0.0-dev.8",
18
- "@bitran-js/renderer-vue": "1.0.0-dev.8",
19
- "@bitran-js/transpiler": "1.0.0-dev.8",
20
- "@erudit-js/cli": "3.0.0-dev.6",
21
- "@erudit-js/cog": "3.0.0-dev.6",
21
+ "@bitran-js/core": "1.0.0-dev.10",
22
+ "@bitran-js/renderer-vue": "1.0.0-dev.10",
23
+ "@bitran-js/transpiler": "1.0.0-dev.10",
24
+ "@erudit-js/cli": "3.0.0-dev.7",
25
+ "@erudit-js/cog": "3.0.0-dev.7",
22
26
  "@floating-ui/vue": "^1.1.6",
23
27
  "chalk": "^5.4.1",
24
28
  "chokidar": "^4.0.3",
@@ -3,5 +3,5 @@ import { ERUDIT_SERVER } from '@server/global';
3
3
  import { createGlobalFrontNav } from '@server/repository/frontNav';
4
4
 
5
5
  export default defineEventHandler(async () => {
6
- return (await createGlobalFrontNav(ERUDIT_SERVER.NAV, false)) as FrontNav;
6
+ return (await createGlobalFrontNav(ERUDIT_SERVER.NAV)) as FrontNav;
7
7
  });
@@ -1,4 +1,4 @@
1
- import { isTopicPart } from '@erudit-js/cog/schema';
1
+ import { isTopicPart, locationFromPath } from '@erudit-js/cog/schema';
2
2
 
3
3
  import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
4
4
  import { getBitranToc } from '@erudit/server/plugin/bitran/toc';
@@ -8,7 +8,6 @@ import {
8
8
  getPreviousNext,
9
9
  } from '@erudit/server/plugin/repository/content';
10
10
  import { getTopicPartsLinks } from '@erudit/server/plugin/repository/topic';
11
- import { locationFromPath } from '@erudit/shared/bitran/location';
12
11
 
13
12
  export default defineEventHandler(async (event) => {
14
13
  const query = getQuery<{ path: string }>(event);
@@ -4,8 +4,9 @@ import {
4
4
  getContributorContext,
5
5
  } from '@erudit/server/plugin/content/context';
6
6
 
7
+ import type { LinkTargetPageType } from '@erudit-js/bitran-elements/link/target';
8
+
7
9
  import type { PreviewDataPageLink } from '@app/scripts/preview/data/pageLink';
8
- import type { LinkTargetPageType } from '@erudit/shared/bitran/link/target';
9
10
  import type { Context, ContextItem } from '@erudit/shared/content/context';
10
11
 
11
12
  export default defineEventHandler<Promise<PreviewDataPageLink>>(
@@ -27,7 +28,7 @@ export default defineEventHandler<Promise<PreviewDataPageLink>>(
27
28
  return await getContributorContext(contentId);
28
29
  }
29
30
 
30
- throw createError(`Can't handle "${pageType}" page type!`);
31
+ throw createError(`Can't handle "${pageType as any}" page type!`);
31
32
  })();
32
33
 
33
34
  const lastContextItem = context.pop() as ContextItem;
@@ -1,3 +1,7 @@
1
+ import {
2
+ stringifyBitranLocation,
3
+ type BitranContext,
4
+ } from '@erudit-js/cog/schema';
1
5
  import type { BitranContent } from '@bitran-js/renderer-vue';
2
6
 
3
7
  import { parseUrlLocation } from '@server/bitran/location';
@@ -7,8 +11,7 @@ import { DbUnique } from '@server/db/entities/Unique';
7
11
  import { getBitranContent } from '@server/bitran/content';
8
12
 
9
13
  import type { Context } from '@shared/content/context';
10
- import type { BitranContext } from '@shared/bitran/context';
11
- import { stringifyBitranLocation } from '@shared/bitran/location';
14
+ import type { StringBitranContent } from '@erudit/shared/bitran/stringContent';
12
15
 
13
16
  interface ReturnType {
14
17
  context: Context;
@@ -16,7 +19,7 @@ interface ReturnType {
16
19
  bitran: {
17
20
  productName: string;
18
21
  context: BitranContext;
19
- content: BitranContent;
22
+ content: StringBitranContent;
20
23
  };
21
24
  }
22
25
 
@@ -1,12 +1,17 @@
1
- import { isTopicPart, type TopicPart } from '@erudit-js/cog/schema';
2
1
  import { createPreRenderData, type PreRenderData } from '@bitran-js/transpiler';
3
2
  import { BlockNode, BlocksNode } from '@bitran-js/core';
4
- import { type BitranContent } from '@bitran-js/renderer-vue';
3
+
5
4
  import {
6
- AliasesNode,
5
+ isTopicPart,
7
6
  mergeAliases,
8
7
  NO_ALIASES,
9
- } from '@erudit-js/bitran-elements/aliases/shared';
8
+ stringifyBitranLocation,
9
+ type BitranContext,
10
+ type BitranLocation,
11
+ type TopicPart,
12
+ } from '@erudit-js/cog/schema';
13
+ import { LinkNode } from '@erudit-js/bitran-elements/link/shared';
14
+ import { AliasesNode } from '@erudit-js/bitran-elements/aliases/shared';
10
15
  import { IncludeNode } from '@erudit-js/bitran-elements/include/shared';
11
16
 
12
17
  import { ERUDIT_SERVER } from '@server/global';
@@ -17,12 +22,7 @@ import { resolveLinkTarget } from '@server/bitran/products/link';
17
22
  import { traverseInclude } from '@server/bitran/products/include';
18
23
  import { createBitranTranspiler } from '@server/bitran/transpiler';
19
24
 
20
- import type { BitranContext } from '@erudit/shared/bitran/context';
21
- import {
22
- stringifyBitranLocation,
23
- type BitranLocation,
24
- } from '@erudit/shared/bitran/location';
25
- import { LinkNode } from '@erudit/shared/bitran/link/shared';
25
+ import type { StringBitranContent } from '@shared/bitran/stringContent';
26
26
 
27
27
  interface RawBitranContent {
28
28
  context: BitranContext;
@@ -31,11 +31,13 @@ interface RawBitranContent {
31
31
 
32
32
  export async function getBitranContent(
33
33
  location: BitranLocation,
34
- ): Promise<BitranContent> {
34
+ generatePrerenderData: boolean = true,
35
+ ): Promise<StringBitranContent> {
35
36
  const rawContent = await getRawBitranContent(location);
36
37
  const bitranContent = await createBitranContent(
37
38
  rawContent.context,
38
39
  rawContent.biCode,
40
+ generatePrerenderData,
39
41
  );
40
42
  return bitranContent;
41
43
  }
@@ -99,7 +101,8 @@ export async function getRawBitranContent(
99
101
  async function createBitranContent(
100
102
  context: BitranContext,
101
103
  biCode: string,
102
- ): Promise<BitranContent> {
104
+ generatePrerenderData: boolean = true,
105
+ ): Promise<StringBitranContent> {
103
106
  const bitranTranspiler = await createBitranTranspiler();
104
107
 
105
108
  const root = await bitranTranspiler.parser.parse(biCode, {
@@ -120,38 +123,42 @@ async function createBitranContent(
120
123
 
121
124
  // Building render data
122
125
  const preRenderDataMap: Record<string, PreRenderData> = {};
123
- await bitranTranspiler.parser.parse(finalContent, {
124
- step: async (node) => {
125
- const id = node.autoId;
126
- const elementTranspiler = bitranTranspiler.transpilers[node.name]!;
127
-
128
- if (node instanceof LinkNode) {
129
- try {
130
- preRenderDataMap[id] = {
131
- type: 'success',
132
- data: await resolveLinkTarget(node.parseData, {
133
- location: context.location,
134
- aliases: context.aliases ?? {},
135
- }),
136
- };
137
- } catch (error: any) {
138
- preRenderDataMap[id] = {
139
- type: 'error',
140
- message: error?.message || String(error),
141
- };
126
+
127
+ if (generatePrerenderData) {
128
+ await bitranTranspiler.parser.parse(finalContent, {
129
+ step: async (node) => {
130
+ const id = node.autoId;
131
+ const elementTranspiler =
132
+ bitranTranspiler.transpilers[node.name]!;
133
+
134
+ if (node instanceof LinkNode) {
135
+ try {
136
+ preRenderDataMap[id] = {
137
+ type: 'success',
138
+ data: await resolveLinkTarget(node.parseData, {
139
+ location: context.location,
140
+ aliases: context.aliases ?? {},
141
+ }),
142
+ };
143
+ } catch (error: any) {
144
+ preRenderDataMap[id] = {
145
+ type: 'error',
146
+ message: error?.message || String(error),
147
+ };
148
+ }
149
+ return;
142
150
  }
143
- return;
144
- }
145
151
 
146
- if (id) {
147
- const preRenderData = await createPreRenderData(
148
- node,
149
- elementTranspiler,
150
- );
151
- if (preRenderData) preRenderDataMap[id] = preRenderData;
152
- }
153
- },
154
- });
152
+ if (id) {
153
+ const preRenderData = await createPreRenderData(
154
+ node,
155
+ elementTranspiler,
156
+ );
157
+ if (preRenderData) preRenderDataMap[id] = preRenderData;
158
+ }
159
+ },
160
+ });
161
+ }
155
162
 
156
163
  return {
157
164
  biCode: finalContent,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  decodeBitranLocation,
3
3
  parseBitranLocation,
4
- } from '@erudit/shared/bitran/location';
4
+ } from '@erudit-js/cog/schema';
5
5
 
6
6
  export function parseUrlLocation(urlLocation: string) {
7
7
  urlLocation = decodeURIComponent(urlLocation);