erudit 2.0.0-dev.7 → 2.0.0-dev.9
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.
- package/.nuxtrc +1 -1
- package/app/app.vue +172 -172
- package/app/components/Loading.vue +23 -23
- package/app/components/SiteAside.vue +382 -382
- package/app/components/SiteMain.vue +35 -35
- package/app/components/ads/BannerTemplate.vue +51 -51
- package/app/components/ads/BottomBanner.vue +45 -45
- package/app/components/ads/LeftBanner.vue +50 -50
- package/app/components/aside/AsideListItem.vue +74 -74
- package/app/components/aside/AsideMajor.vue +56 -56
- package/app/components/aside/AsideMinor.vue +71 -71
- package/app/components/aside/major/PaneContentScroll.vue +23 -23
- package/app/components/aside/major/PaneSwitch.vue +54 -54
- package/app/components/aside/major/PaneSwitchButton.vue +63 -63
- package/app/components/aside/major/SiteInfo.vue +85 -85
- package/app/components/aside/major/panes/Language.vue +79 -79
- package/app/components/aside/major/panes/Pages.vue +34 -34
- package/app/components/aside/major/panes/Search.vue +2 -2
- package/app/components/aside/major/panes/nav/Nav.vue +91 -91
- package/app/components/aside/major/panes/nav/NavBook.vue +86 -86
- package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
- package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
- package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
- package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
- package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
- package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
- package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
- package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
- package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
- package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
- package/app/components/aside/major/panes/other/ItemGenerator.vue +15 -15
- package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
- package/app/components/aside/major/panes/other/Other.vue +16 -16
- package/app/components/aside/minor/AsideMinorContributor.vue +4 -4
- package/app/components/aside/minor/AsideMinorNews.vue +11 -11
- package/app/components/aside/minor/AsideMinorPane.vue +15 -15
- package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
- package/app/components/aside/minor/Contribute.vue +145 -145
- package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
- package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
- package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
- package/app/components/aside/minor/topic/TopicNav.vue +49 -49
- package/app/components/aside/minor/topic/TopicToc.vue +203 -202
- package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
- package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
- package/app/components/bitran/BitranContent.vue +63 -64
- package/app/components/bitran/RenderWrapper.vue +10 -12
- package/app/components/contributor/ContributorAvatar.vue +43 -43
- package/app/components/contributor/ContributorListItem.vue +35 -35
- package/app/components/main/topic/MainTopic.vue +79 -79
- package/app/components/main/topic/TopicPartSwitch.vue +118 -118
- package/app/components/main/utils/Breadcrumb.vue +75 -75
- package/app/components/main/utils/ContentDecoration.vue +29 -29
- package/app/components/main/utils/ContentDescription.vue +19 -19
- package/app/components/main/utils/ContentFlag.vue +15 -15
- package/app/components/main/utils/ContentPopover.vue +176 -176
- package/app/components/main/utils/ContentPopovers.vue +105 -105
- package/app/components/main/utils/ContentReferences.vue +75 -75
- package/app/components/main/utils/ContentSection.vue +41 -41
- package/app/components/main/utils/ContentTitle.vue +36 -36
- package/app/components/main/utils/reference/ReferenceGroup.vue +40 -40
- package/app/components/main/utils/reference/ReferenceItem.vue +63 -63
- package/app/components/main/utils/reference/ReferenceSource.vue +109 -109
- package/app/components/preview/Preview.vue +177 -177
- package/app/components/preview/PreviewDisplay.vue +139 -139
- package/app/components/preview/PreviewFooterAction.vue +73 -73
- package/app/components/preview/PreviewLoading.vue +14 -14
- package/app/components/preview/PreviewScreen.vue +99 -99
- package/app/components/preview/display/Alert.vue +50 -50
- package/app/components/preview/display/Custom.vue +18 -18
- package/app/components/preview/display/GenericLink.vue +48 -48
- package/app/components/preview/display/PageLink.vue +20 -20
- package/app/components/preview/display/Unique.vue +49 -49
- package/app/components/transition/Fade.vue +21 -21
- package/app/components/tree/TreeContainer.vue +11 -11
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/bitran.ts +98 -103
- package/app/composables/bitranContent.ts +2 -1
- package/app/composables/contentPage.ts +1 -1
- package/app/composables/phrases.ts +80 -80
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +2 -2
- package/app/pages/book/[...bookId].vue +47 -47
- package/app/pages/group/[...groupId].vue +65 -64
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +6 -6
- package/app/pages/practice/[...practice].vue +2 -2
- package/app/pages/summary/[...summaryId].vue +2 -2
- package/app/public/favicon/article.svg +9 -9
- package/app/public/favicon/default.svg +9 -9
- package/app/public/favicon/practice.svg +9 -9
- package/app/public/favicon/summary.svg +9 -9
- package/app/public/logotype.svg +16 -16
- package/app/public/user.svg +9 -9
- package/app/scripts/_immediate.js +3 -3
- package/app/scripts/flag.ts +28 -28
- package/app/scripts/og.ts +27 -27
- package/app/scripts/preview/data/unique.ts +3 -3
- package/app/scripts/preview/display.ts +5 -7
- package/app/scripts/preview/request.ts +2 -2
- package/app/styles/_immediate.css +2 -2
- package/app/styles/_util.scss +49 -49
- package/app/styles/_utils.scss +44 -44
- package/app/styles/default.scss +84 -84
- package/app/styles/partials/_darkMagic.scss +6 -6
- package/app/styles/partials/_fnav.scss +17 -17
- package/app/styles/partials/_preview.scss +6 -6
- package/globalPath.ts +21 -24
- package/globals/bitran.ts +21 -13
- package/globals/erudit.ts +5 -5
- package/globals/register.ts +18 -18
- package/languages/en.ts +95 -95
- package/languages/ru.ts +99 -99
- package/module/config.ts +34 -34
- package/module/imports.ts +46 -46
- package/module/index.ts +47 -35
- package/module/logger.ts +10 -10
- package/module/restart.ts +61 -61
- package/nuxt.config.ts +107 -96
- package/package.json +9 -6
- package/server/api/aside/major/nav/bookIds.ts +5 -5
- package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
- package/server/api/aside/major/nav/global.ts +7 -7
- package/server/api/aside/minor/news.ts +7 -7
- package/server/api/aside/minor/path.ts +78 -78
- package/server/api/bitran/content/[location].ts +7 -7
- package/server/api/bitran/toc/[location].ts +7 -7
- package/server/api/content/data.ts +72 -72
- package/server/api/fake/content.ts +10 -10
- package/server/api/fake/shared/languages.ts +12 -12
- package/server/api/language/functions.ts +12 -12
- package/server/api/language/phrase/[phraseId].ts +19 -19
- package/server/api/language/phraseIds.ts +8 -8
- package/server/api/preview/page/[...parts].ts +51 -51
- package/server/api/preview/unique/[location].ts +55 -55
- package/server/plugin/bitran/content.ts +55 -44
- package/server/plugin/bitran/products/include.ts +28 -27
- package/server/plugin/bitran/products/link.ts +11 -9
- package/server/plugin/bitran/setup.ts +0 -1
- package/server/plugin/bitran/toc.ts +25 -24
- package/server/plugin/bitran/transpiler.ts +46 -0
- package/server/plugin/build/close.ts +10 -10
- package/server/plugin/build/jobs/content/parse.ts +37 -27
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/process.ts +25 -25
- package/server/plugin/build/rebuild.ts +55 -55
- package/server/plugin/build/setup.ts +21 -21
- package/server/plugin/global.ts +18 -18
- package/server/plugin/importer.ts +12 -12
- package/server/plugin/index.ts +9 -9
- package/server/plugin/logger.ts +23 -23
- package/server/tsconfig.json +7 -7
- package/shared/bitran/context.ts +3 -2
- package/shared/bitran/default.ts +46 -0
- package/shared/bitran/{products/link/render → link}/Link.vue +7 -14
- package/shared/bitran/link/factory.ts +24 -0
- package/shared/bitran/link/languages/en.ts +7 -0
- package/shared/bitran/link/languages/ru.ts +7 -0
- package/shared/bitran/link/renderer.ts +21 -0
- package/shared/bitran/link/shared.ts +17 -0
- package/shared/bitran/{products/link → link}/target.ts +1 -1
- package/shared/bitran/link/transpiler.ts +10 -0
- package/shared/content/context.ts +9 -9
- package/shared/content/data/base.ts +32 -32
- package/shared/content/data/index.ts +5 -5
- package/shared/content/data/type/book.ts +5 -5
- package/shared/content/data/type/group.ts +6 -6
- package/shared/content/data/type/topic.ts +11 -11
- package/shared/content/previousNext.ts +9 -9
- package/shared/link.ts +25 -25
- package/shared/types/language.ts +75 -75
- package/test/bitran/{products/link → link}/target.test.ts +5 -2
- package/tsconfig.json +8 -8
- package/utils/stress.ts +9 -9
- package/server/plugin/bitran/core.ts +0 -51
- package/shared/bitran/alias.ts +0 -17
- package/shared/bitran/products/alias/core/factory.ts +0 -46
- package/shared/bitran/products/alias/core/index.ts +0 -13
- package/shared/bitran/products/alias/render/Alias.vue +0 -10
- package/shared/bitran/products/alias/render/icon.svg +0 -3
- package/shared/bitran/products/alias/render/index.ts +0 -17
- package/shared/bitran/products/alias/render/languages/en.ts +0 -5
- package/shared/bitran/products/alias/render/languages/ru.ts +0 -5
- package/shared/bitran/products/alias/shared.ts +0 -11
- package/shared/bitran/products/heading/core/factory.ts +0 -53
- package/shared/bitran/products/heading/core/index.ts +0 -19
- package/shared/bitran/products/heading/render/Heading.vue +0 -47
- package/shared/bitran/products/heading/render/icon.svg +0 -3
- package/shared/bitran/products/heading/render/index.ts +0 -17
- package/shared/bitran/products/heading/render/languages/en.ts +0 -5
- package/shared/bitran/products/heading/render/languages/ru.ts +0 -5
- package/shared/bitran/products/heading/shared.ts +0 -13
- package/shared/bitran/products/include/core/factory.ts +0 -61
- package/shared/bitran/products/include/core/index.ts +0 -13
- package/shared/bitran/products/include/render/Include.vue +0 -13
- package/shared/bitran/products/include/render/icon.svg +0 -3
- package/shared/bitran/products/include/render/index.ts +0 -18
- package/shared/bitran/products/include/render/languages/en.ts +0 -5
- package/shared/bitran/products/include/render/languages/ru.ts +0 -5
- package/shared/bitran/products/include/shared.ts +0 -15
- package/shared/bitran/products/link/core/factory.ts +0 -20
- package/shared/bitran/products/link/core/index.ts +0 -17
- package/shared/bitran/products/link/render/index.ts +0 -17
- package/shared/bitran/products/link/render/languages/en.ts +0 -5
- package/shared/bitran/products/link/render/languages/ru.ts +0 -5
- package/shared/bitran/products/link/shared.ts +0 -15
- package/test/bitran/alias.test.ts +0 -44
- package/test/bitran/products/alias.test.ts +0 -83
- package/test/bitran/products/heading.test.ts +0 -119
- package/test/bitran/products/include.test.ts +0 -77
- package/test/bitran/products/link/factory.test.ts +0 -30
- /package/shared/bitran/{products/link/render → link}/icon.svg +0 -0
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import chokidar, { type FSWatcher } from 'chokidar';
|
|
2
|
-
|
|
3
|
-
import { ERUDIT_DIR, PROJECT_DIR } from '#erudit/globalPaths';
|
|
4
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
-
import { logger } from '@server/logger';
|
|
6
|
-
import { build } from '@server/build/process';
|
|
7
|
-
import { stress } from '@erudit/utils/stress';
|
|
8
|
-
|
|
9
|
-
const watchTargets: string[] = [
|
|
10
|
-
// Languages
|
|
11
|
-
ERUDIT_DIR + '/languages',
|
|
12
|
-
// Content directory
|
|
13
|
-
PROJECT_DIR + '/content',
|
|
14
|
-
// Contributors directory
|
|
15
|
-
PROJECT_DIR + '/contributors',
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
const ignoreTargets: string[] = [];
|
|
19
|
-
|
|
20
|
-
const rebuildDelay = 300;
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
let watcher: FSWatcher;
|
|
27
|
-
let rebuildTimeout: any;
|
|
28
|
-
let rebuildRequested = false;
|
|
29
|
-
|
|
30
|
-
export async function setupRebuildWatcher() {
|
|
31
|
-
if (watcher) return;
|
|
32
|
-
|
|
33
|
-
watcher = chokidar.watch(watchTargets, {
|
|
34
|
-
ignored: ignoreTargets,
|
|
35
|
-
ignoreInitial: true,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
watcher.on('all', (event, path) =>
|
|
39
|
-
requestServerRebuild(`File change: ${stress(path)}`),
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export async function requestServerRebuild(reason?: string) {
|
|
44
|
-
if (rebuildRequested) return;
|
|
45
|
-
|
|
46
|
-
clearTimeout(rebuildTimeout);
|
|
47
|
-
rebuildTimeout = setTimeout(async () => {
|
|
48
|
-
rebuildRequested = true;
|
|
49
|
-
await ERUDIT_SERVER.BUILD_PROMISE;
|
|
50
|
-
console.log('\n');
|
|
51
|
-
logger.info(`Rebuilding server data!${reason ? ` ${reason}` : ''}\n\n`);
|
|
52
|
-
await build();
|
|
53
|
-
rebuildRequested = false;
|
|
54
|
-
}, rebuildDelay);
|
|
55
|
-
}
|
|
1
|
+
import chokidar, { type FSWatcher } from 'chokidar';
|
|
2
|
+
|
|
3
|
+
import { ERUDIT_DIR, PROJECT_DIR } from '#erudit/globalPaths';
|
|
4
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
+
import { logger } from '@server/logger';
|
|
6
|
+
import { build } from '@server/build/process';
|
|
7
|
+
import { stress } from '@erudit/utils/stress';
|
|
8
|
+
|
|
9
|
+
const watchTargets: string[] = [
|
|
10
|
+
// Languages
|
|
11
|
+
ERUDIT_DIR + '/languages',
|
|
12
|
+
// Content directory
|
|
13
|
+
PROJECT_DIR + '/content',
|
|
14
|
+
// Contributors directory
|
|
15
|
+
PROJECT_DIR + '/contributors',
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const ignoreTargets: string[] = [];
|
|
19
|
+
|
|
20
|
+
const rebuildDelay = 300;
|
|
21
|
+
|
|
22
|
+
//
|
|
23
|
+
//
|
|
24
|
+
//
|
|
25
|
+
|
|
26
|
+
let watcher: FSWatcher;
|
|
27
|
+
let rebuildTimeout: any;
|
|
28
|
+
let rebuildRequested = false;
|
|
29
|
+
|
|
30
|
+
export async function setupRebuildWatcher() {
|
|
31
|
+
if (watcher) return;
|
|
32
|
+
|
|
33
|
+
watcher = chokidar.watch(watchTargets, {
|
|
34
|
+
ignored: ignoreTargets,
|
|
35
|
+
ignoreInitial: true,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
watcher.on('all', (event, path) =>
|
|
39
|
+
requestServerRebuild(`File change: ${stress(path)}`),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function requestServerRebuild(reason?: string) {
|
|
44
|
+
if (rebuildRequested) return;
|
|
45
|
+
|
|
46
|
+
clearTimeout(rebuildTimeout);
|
|
47
|
+
rebuildTimeout = setTimeout(async () => {
|
|
48
|
+
rebuildRequested = true;
|
|
49
|
+
await ERUDIT_SERVER.BUILD_PROMISE;
|
|
50
|
+
console.log('\n');
|
|
51
|
+
logger.info(`Rebuilding server data!${reason ? ` ${reason}` : ''}\n\n`);
|
|
52
|
+
await build();
|
|
53
|
+
rebuildRequested = false;
|
|
54
|
+
}, rebuildDelay);
|
|
55
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import eruditConfig from '#erudit/config';
|
|
2
|
-
|
|
3
|
-
import { registerGlobals } from '@erudit/globals/register';
|
|
4
|
-
import { debug } from '@server/logger';
|
|
5
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
6
|
-
|
|
7
|
-
import { setupRebuildWatcher } from './rebuild';
|
|
8
|
-
import { setupDatabase } from '../db/setup';
|
|
9
|
-
import { setupBitranConfig } from '../bitran/setup';
|
|
10
|
-
|
|
11
|
-
export async function setup() {
|
|
12
|
-
debug.start('Running initial setup procedures...');
|
|
13
|
-
|
|
14
|
-
if (import.meta.dev) await setupRebuildWatcher();
|
|
15
|
-
|
|
16
|
-
registerGlobals();
|
|
17
|
-
ERUDIT_SERVER.CONFIG = eruditConfig;
|
|
18
|
-
|
|
19
|
-
await setupBitranConfig();
|
|
20
|
-
await setupDatabase();
|
|
21
|
-
}
|
|
1
|
+
import eruditConfig from '#erudit/config';
|
|
2
|
+
|
|
3
|
+
import { registerGlobals } from '@erudit/globals/register';
|
|
4
|
+
import { debug } from '@server/logger';
|
|
5
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
6
|
+
|
|
7
|
+
import { setupRebuildWatcher } from './rebuild';
|
|
8
|
+
import { setupDatabase } from '../db/setup';
|
|
9
|
+
import { setupBitranConfig } from '../bitran/setup';
|
|
10
|
+
|
|
11
|
+
export async function setup() {
|
|
12
|
+
debug.start('Running initial setup procedures...');
|
|
13
|
+
|
|
14
|
+
if (import.meta.dev) await setupRebuildWatcher();
|
|
15
|
+
|
|
16
|
+
registerGlobals();
|
|
17
|
+
ERUDIT_SERVER.CONFIG = eruditConfig;
|
|
18
|
+
|
|
19
|
+
await setupBitranConfig();
|
|
20
|
+
await setupDatabase();
|
|
21
|
+
}
|
package/server/plugin/global.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import type { DataSource } from 'typeorm';
|
|
2
|
-
import type { EruditConfig } from 'erudit-cog/schema';
|
|
3
|
-
|
|
4
|
-
import type { EruditPhrases } from '@shared/types/language';
|
|
5
|
-
import type { NavNode, RootNavNode } from '@server/nav/node';
|
|
6
|
-
import type { EruditBitranConfig } from '@erudit/globals/bitran';
|
|
7
|
-
|
|
8
|
-
interface EruditServer {
|
|
9
|
-
BUILD_PROMISE: Promise<void>;
|
|
10
|
-
CONFIG: Partial<EruditConfig>;
|
|
11
|
-
LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
|
|
12
|
-
DB: DataSource;
|
|
13
|
-
NAV?: RootNavNode;
|
|
14
|
-
NAV_BOOKS?: Record<string, NavNode>;
|
|
15
|
-
BITRAN_CONFIG?: Partial<EruditBitranConfig>;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const ERUDIT_SERVER: EruditServer = {} as any;
|
|
1
|
+
import type { DataSource } from 'typeorm';
|
|
2
|
+
import type { EruditConfig } from 'erudit-cog/schema';
|
|
3
|
+
|
|
4
|
+
import type { EruditPhrases } from '@shared/types/language';
|
|
5
|
+
import type { NavNode, RootNavNode } from '@server/nav/node';
|
|
6
|
+
import type { EruditBitranConfig } from '@erudit/globals/bitran';
|
|
7
|
+
|
|
8
|
+
interface EruditServer {
|
|
9
|
+
BUILD_PROMISE: Promise<void>;
|
|
10
|
+
CONFIG: Partial<EruditConfig>;
|
|
11
|
+
LANGUAGE: { phrases: EruditPhrases; functions: Record<string, Function> };
|
|
12
|
+
DB: DataSource;
|
|
13
|
+
NAV?: RootNavNode;
|
|
14
|
+
NAV_BOOKS?: Record<string, NavNode>;
|
|
15
|
+
BITRAN_CONFIG?: Partial<EruditBitranConfig>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const ERUDIT_SERVER: EruditServer = {} as any;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { createJiti } from 'jiti';
|
|
2
|
-
import { ERUDIT_DIR } from '#erudit/globalPaths';
|
|
3
|
-
|
|
4
|
-
const jiti = createJiti(ERUDIT_DIR, {
|
|
5
|
-
// Enable reimporting same files during process in development mode
|
|
6
|
-
fsCache: !import.meta.dev,
|
|
7
|
-
moduleCache: !import.meta.dev,
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
export async function IMPORT(...args: Parameters<typeof jiti.import>) {
|
|
11
|
-
return jiti.import(...args) as Promise<any>;
|
|
12
|
-
}
|
|
1
|
+
import { createJiti } from 'jiti';
|
|
2
|
+
import { ERUDIT_DIR } from '#erudit/globalPaths';
|
|
3
|
+
|
|
4
|
+
const jiti = createJiti(ERUDIT_DIR, {
|
|
5
|
+
// Enable reimporting same files during process in development mode
|
|
6
|
+
fsCache: !import.meta.dev,
|
|
7
|
+
moduleCache: !import.meta.dev,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export async function IMPORT(...args: Parameters<typeof jiti.import>) {
|
|
11
|
+
return jiti.import(...args) as Promise<any>;
|
|
12
|
+
}
|
package/server/plugin/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ERUDIT_SERVER } from './global';
|
|
2
|
-
import { build } from './build/process';
|
|
3
|
-
import { close } from './build/close';
|
|
4
|
-
|
|
5
|
-
export default defineNitroPlugin((_nitro) => {
|
|
6
|
-
ERUDIT_SERVER.BUILD_PROMISE = build();
|
|
7
|
-
_nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
|
|
8
|
-
_nitro.hooks.hook('close', close);
|
|
9
|
-
});
|
|
1
|
+
import { ERUDIT_SERVER } from './global';
|
|
2
|
+
import { build } from './build/process';
|
|
3
|
+
import { close } from './build/close';
|
|
4
|
+
|
|
5
|
+
export default defineNitroPlugin((_nitro) => {
|
|
6
|
+
ERUDIT_SERVER.BUILD_PROMISE = build();
|
|
7
|
+
_nitro.hooks.hook('request', async () => await ERUDIT_SERVER.BUILD_PROMISE);
|
|
8
|
+
_nitro.hooks.hook('close', close);
|
|
9
|
+
});
|
package/server/plugin/logger.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { createConsola } from 'consola';
|
|
3
|
-
import { brandColorTitle } from 'erudit-cog/utils/brand';
|
|
4
|
-
|
|
5
|
-
import eruditConfig from '#erudit/config';
|
|
6
|
-
|
|
7
|
-
// TODO: Consola has buggy behaviour when called inside Nitro
|
|
8
|
-
// @see https://github.com/nitrojs/nitro/issues/3079
|
|
9
|
-
|
|
10
|
-
export const logger = createConsola({
|
|
11
|
-
defaults: {
|
|
12
|
-
//tag: brandColorTitle + ' Server',
|
|
13
|
-
message: chalk.gray(`[${brandColorTitle} Server]`),
|
|
14
|
-
},
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export const debug = createConsola({
|
|
18
|
-
defaults: {
|
|
19
|
-
//tag: brandColorTitle + ' Server Debug',
|
|
20
|
-
message: chalk.gray(`[${brandColorTitle} Server Debug]`),
|
|
21
|
-
level: eruditConfig?.debug?.log ? 3 : -999,
|
|
22
|
-
},
|
|
23
|
-
});
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createConsola } from 'consola';
|
|
3
|
+
import { brandColorTitle } from 'erudit-cog/utils/brand';
|
|
4
|
+
|
|
5
|
+
import eruditConfig from '#erudit/config';
|
|
6
|
+
|
|
7
|
+
// TODO: Consola has buggy behaviour when called inside Nitro
|
|
8
|
+
// @see https://github.com/nitrojs/nitro/issues/3079
|
|
9
|
+
|
|
10
|
+
export const logger = createConsola({
|
|
11
|
+
defaults: {
|
|
12
|
+
//tag: brandColorTitle + ' Server',
|
|
13
|
+
message: chalk.gray(`[${brandColorTitle} Server]`),
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const debug = createConsola({
|
|
18
|
+
defaults: {
|
|
19
|
+
//tag: brandColorTitle + ' Server Debug',
|
|
20
|
+
message: chalk.gray(`[${brandColorTitle} Server Debug]`),
|
|
21
|
+
level: eruditConfig?.debug?.log ? 3 : -999,
|
|
22
|
+
},
|
|
23
|
+
});
|
package/server/tsconfig.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"verbatimModuleSyntax": true
|
|
5
|
-
},
|
|
6
|
-
"exclude": ["../module/**/*", "../globalPath.ts"]
|
|
7
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"verbatimModuleSyntax": true
|
|
5
|
+
},
|
|
6
|
+
"exclude": ["../module/**/*", "../globalPath.ts"]
|
|
7
|
+
}
|
package/shared/bitran/context.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Aliases } from '@erudit-js/bitran-elements/aliases/shared';
|
|
2
|
+
|
|
2
3
|
import type { BitranLocation } from './location';
|
|
3
4
|
|
|
4
5
|
export interface BitranContext {
|
|
5
6
|
location: BitranLocation;
|
|
6
|
-
aliases:
|
|
7
|
+
aliases: Aliases;
|
|
7
8
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineBitranElement,
|
|
3
|
+
type BitranElements,
|
|
4
|
+
} from '@erudit/globals/bitran';
|
|
5
|
+
|
|
6
|
+
// Erudit Default Elements
|
|
7
|
+
import {
|
|
8
|
+
aliasesName,
|
|
9
|
+
type AliasesSchema,
|
|
10
|
+
} from '@erudit-js/bitran-elements/aliases/shared';
|
|
11
|
+
import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
|
|
12
|
+
import { aliasesRenderer } from '@erudit-js/bitran-elements/aliases/renderer';
|
|
13
|
+
import {
|
|
14
|
+
includeName,
|
|
15
|
+
type IncludeSchema,
|
|
16
|
+
} from '@erudit-js/bitran-elements/include/shared';
|
|
17
|
+
import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
|
|
18
|
+
import { includeRenderer } from '@erudit-js/bitran-elements/include/renderer';
|
|
19
|
+
import {
|
|
20
|
+
headingName,
|
|
21
|
+
type HeadingSchema,
|
|
22
|
+
} from '@erudit-js/bitran-elements/heading/shared';
|
|
23
|
+
import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
|
|
24
|
+
import { headingRenderer } from '@erudit-js/bitran-elements/heading/renderer';
|
|
25
|
+
import { linkName, type LinkSchema } from '@erudit/shared/bitran/link/shared';
|
|
26
|
+
import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
|
|
27
|
+
import { linkRenderer } from '@erudit/shared/bitran/link/renderer';
|
|
28
|
+
|
|
29
|
+
export const defaultElements: BitranElements = {
|
|
30
|
+
[aliasesName]: defineBitranElement<AliasesSchema>({
|
|
31
|
+
transpiler: async () => aliasesTranspiler,
|
|
32
|
+
renderer: async () => aliasesRenderer,
|
|
33
|
+
}),
|
|
34
|
+
[includeName]: defineBitranElement<IncludeSchema>({
|
|
35
|
+
transpiler: async () => includeTranspiler,
|
|
36
|
+
renderer: async () => includeRenderer,
|
|
37
|
+
}),
|
|
38
|
+
[headingName]: defineBitranElement<HeadingSchema>({
|
|
39
|
+
transpiler: async () => headingTranspiler,
|
|
40
|
+
renderer: async () => headingRenderer,
|
|
41
|
+
}),
|
|
42
|
+
[linkName]: defineBitranElement<LinkSchema>({
|
|
43
|
+
transpiler: async () => linkTranspiler,
|
|
44
|
+
renderer: async () => linkRenderer,
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import {
|
|
2
|
+
import type { ElementProps } from '@bitran-js/renderer-vue';
|
|
3
3
|
import { isContentType, isTopicPart } from 'erudit-cog/schema';
|
|
4
4
|
|
|
5
5
|
import { CONTENT_TYPE_ICON, ICON, TOPIC_PART_ICON } from '@erudit/shared/icons';
|
|
6
|
-
import type {
|
|
6
|
+
import type { LinkSchema } from './shared';
|
|
7
7
|
import { MyIcon, MyRuntimeIcon } from '#components';
|
|
8
8
|
import { showPreview, togglePreview } from '@erudit/app/scripts/preview/state';
|
|
9
9
|
import { PreviewRequestType } from '@erudit/app/scripts/preview/request';
|
|
10
10
|
import { encodeBitranLocation } from '@erudit/shared/bitran/location';
|
|
11
11
|
|
|
12
|
-
const { node } = defineProps<
|
|
13
|
-
const { label } =
|
|
14
|
-
const linkTarget =
|
|
12
|
+
const { node } = defineProps<ElementProps<LinkSchema>>();
|
|
13
|
+
const { label } = node.parseData;
|
|
14
|
+
const linkTarget = node.renderData;
|
|
15
15
|
|
|
16
16
|
const baseUrlPath = useBaseUrlPath();
|
|
17
17
|
const formatText = useFormatText();
|
|
@@ -22,7 +22,7 @@ const Icon = await (async () => {
|
|
|
22
22
|
if (type === 'unique') {
|
|
23
23
|
return h(MyRuntimeIcon, {
|
|
24
24
|
name: 'link-icon',
|
|
25
|
-
svg: await
|
|
25
|
+
svg: await useBitranElementIcon(linkTarget._productName!),
|
|
26
26
|
});
|
|
27
27
|
} else if (type === 'absolute') {
|
|
28
28
|
return h(MyIcon, { name: 'link' });
|
|
@@ -96,7 +96,7 @@ function linkClick(e: Event) {
|
|
|
96
96
|
|
|
97
97
|
showPreview({
|
|
98
98
|
type: PreviewRequestType.Link,
|
|
99
|
-
linkData:
|
|
99
|
+
linkData: node.parseData,
|
|
100
100
|
linkTarget,
|
|
101
101
|
});
|
|
102
102
|
|
|
@@ -158,13 +158,6 @@ function linkClick(e: Event) {
|
|
|
158
158
|
|
|
159
159
|
text-decoration: none;
|
|
160
160
|
color: color-mix(in srgb, var(--linkColor), transparent 10%);
|
|
161
|
-
|
|
162
|
-
// &,
|
|
163
|
-
// & svg {
|
|
164
|
-
// width: #{$iconSize};
|
|
165
|
-
// height: #{$iconSize};
|
|
166
|
-
// fill: currentColor;
|
|
167
|
-
// }
|
|
168
161
|
}
|
|
169
162
|
|
|
170
163
|
.label {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RegexpInlinerParseFactory,
|
|
3
|
+
StringifyFactory,
|
|
4
|
+
} from '@bitran-js/transpiler';
|
|
5
|
+
|
|
6
|
+
import type { LinkNode, LinkSchema } from './shared';
|
|
7
|
+
|
|
8
|
+
export class LinkParser extends RegexpInlinerParseFactory<LinkSchema> {
|
|
9
|
+
regexp = /\[(.+?)\]\((.+?)\)/gm;
|
|
10
|
+
|
|
11
|
+
override async parseDataFromRegexp(match: RegExpExecArray) {
|
|
12
|
+
return {
|
|
13
|
+
label: match[1]!,
|
|
14
|
+
target: match[2]!,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class LinkStringifier extends StringifyFactory<LinkSchema> {
|
|
20
|
+
override async stringifyElement(elementNode: LinkNode): Promise<string> {
|
|
21
|
+
const parseData = elementNode.parseData;
|
|
22
|
+
return `[${parseData.label}](${parseData.target})`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineElementVueRenderer,
|
|
3
|
+
defineComponent,
|
|
4
|
+
defineIcon,
|
|
5
|
+
defineLanguages,
|
|
6
|
+
} from '@bitran-js/renderer-vue';
|
|
7
|
+
|
|
8
|
+
import { LinkNode, type LinkSchema } from './shared';
|
|
9
|
+
|
|
10
|
+
export const linkRenderer = defineElementVueRenderer<LinkSchema>({
|
|
11
|
+
Node: LinkNode,
|
|
12
|
+
component: defineComponent(() => import('./Link.vue')),
|
|
13
|
+
icon: defineIcon(() => import('./icon.svg?raw')),
|
|
14
|
+
languages: defineLanguages({
|
|
15
|
+
en: () => import('./languages/en'),
|
|
16
|
+
ru: () => import('./languages/ru'),
|
|
17
|
+
}),
|
|
18
|
+
createRenderData: async () => {
|
|
19
|
+
throw Error('Render data for Links must be built only on server side!');
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InlinerNode, type DefineElementSchema } from '@bitran-js/core';
|
|
2
|
+
|
|
3
|
+
import type { LinkTarget } from './target';
|
|
4
|
+
|
|
5
|
+
export const linkName = 'link';
|
|
6
|
+
|
|
7
|
+
export interface LinkParseData {
|
|
8
|
+
target: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type LinkSchema = DefineElementSchema<{
|
|
13
|
+
ParseData: LinkParseData;
|
|
14
|
+
RenderData: LinkTarget;
|
|
15
|
+
}>;
|
|
16
|
+
|
|
17
|
+
export class LinkNode extends InlinerNode<LinkSchema> {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isTopicPart } from 'erudit-cog/schema';
|
|
2
|
+
import { tryReplaceAlias } from '@erudit-js/bitran-elements/aliases/shared';
|
|
2
3
|
|
|
3
4
|
import type { BitranContext } from '@shared/bitran/context';
|
|
4
|
-
import { tryReplaceAlias } from '@shared/bitran/alias';
|
|
5
5
|
import {
|
|
6
6
|
bitranLocationTypes,
|
|
7
7
|
parsePartialBitranLocation,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { defineElementTranspiler } from '@bitran-js/transpiler';
|
|
2
|
+
|
|
3
|
+
import { LinkNode, type LinkSchema } from './shared';
|
|
4
|
+
import { LinkParser, LinkStringifier } from './factory';
|
|
5
|
+
|
|
6
|
+
export const linkTranspiler = defineElementTranspiler<LinkSchema>({
|
|
7
|
+
Node: LinkNode,
|
|
8
|
+
Parsers: [LinkParser],
|
|
9
|
+
Stringifier: LinkStringifier,
|
|
10
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export interface ContextItem {
|
|
2
|
-
type: string;
|
|
3
|
-
icon: string;
|
|
4
|
-
title: string;
|
|
5
|
-
href: string;
|
|
6
|
-
hidden: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export type Context = ContextItem[];
|
|
1
|
+
export interface ContextItem {
|
|
2
|
+
type: string;
|
|
3
|
+
icon: string;
|
|
4
|
+
title: string;
|
|
5
|
+
href: string;
|
|
6
|
+
hidden: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type Context = ContextItem[];
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ContentFlag,
|
|
3
|
-
ContentReferences,
|
|
4
|
-
ContentSeo,
|
|
5
|
-
ContentType,
|
|
6
|
-
TopicPart,
|
|
7
|
-
} from 'erudit-cog/schema';
|
|
8
|
-
|
|
9
|
-
import type { Context } from '@shared/content/context';
|
|
10
|
-
import type { PreviousNext } from '@shared/content/previousNext';
|
|
11
|
-
import type { ImageData } from '@shared/image';
|
|
12
|
-
|
|
13
|
-
export interface ContentGenericData {
|
|
14
|
-
contentId: string;
|
|
15
|
-
title?: string;
|
|
16
|
-
description?: string;
|
|
17
|
-
decoration?: string;
|
|
18
|
-
type: ContentType;
|
|
19
|
-
context: Context;
|
|
20
|
-
flags: Record<ContentFlag, boolean>;
|
|
21
|
-
topicPart?: TopicPart;
|
|
22
|
-
seo?: Partial<ContentSeo>;
|
|
23
|
-
ogImage?: ImageData;
|
|
24
|
-
previousNext: PreviousNext;
|
|
25
|
-
dependencies?: Record<string, string>;
|
|
26
|
-
references?: ContentReferences;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ContentBaseData {
|
|
30
|
-
type: ContentType;
|
|
31
|
-
generic: ContentGenericData;
|
|
32
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
ContentFlag,
|
|
3
|
+
ContentReferences,
|
|
4
|
+
ContentSeo,
|
|
5
|
+
ContentType,
|
|
6
|
+
TopicPart,
|
|
7
|
+
} from 'erudit-cog/schema';
|
|
8
|
+
|
|
9
|
+
import type { Context } from '@shared/content/context';
|
|
10
|
+
import type { PreviousNext } from '@shared/content/previousNext';
|
|
11
|
+
import type { ImageData } from '@shared/image';
|
|
12
|
+
|
|
13
|
+
export interface ContentGenericData {
|
|
14
|
+
contentId: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
decoration?: string;
|
|
18
|
+
type: ContentType;
|
|
19
|
+
context: Context;
|
|
20
|
+
flags: Record<ContentFlag, boolean>;
|
|
21
|
+
topicPart?: TopicPart;
|
|
22
|
+
seo?: Partial<ContentSeo>;
|
|
23
|
+
ogImage?: ImageData;
|
|
24
|
+
previousNext: PreviousNext;
|
|
25
|
+
dependencies?: Record<string, string>;
|
|
26
|
+
references?: ContentReferences;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ContentBaseData {
|
|
30
|
+
type: ContentType;
|
|
31
|
+
generic: ContentGenericData;
|
|
32
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ContentTopicData } from './type/topic';
|
|
2
|
-
import type { ContentGroupData } from './type/group';
|
|
3
|
-
import type { ContentBookData } from './type/book';
|
|
4
|
-
|
|
5
|
-
export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
|
|
1
|
+
import type { ContentTopicData } from './type/topic';
|
|
2
|
+
import type { ContentGroupData } from './type/group';
|
|
3
|
+
import type { ContentBookData } from './type/book';
|
|
4
|
+
|
|
5
|
+
export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ContentBaseData } from '../base';
|
|
2
|
-
|
|
3
|
-
export interface ContentBookData extends ContentBaseData {
|
|
4
|
-
type: 'book';
|
|
5
|
-
}
|
|
1
|
+
import type { ContentBaseData } from '../base';
|
|
2
|
+
|
|
3
|
+
export interface ContentBookData extends ContentBaseData {
|
|
4
|
+
type: 'book';
|
|
5
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ContentBaseData } from '../base';
|
|
2
|
-
|
|
3
|
-
export interface ContentGroupData extends ContentBaseData {
|
|
4
|
-
type: 'group';
|
|
5
|
-
bookTitle?: string;
|
|
6
|
-
}
|
|
1
|
+
import type { ContentBaseData } from '../base';
|
|
2
|
+
|
|
3
|
+
export interface ContentGroupData extends ContentBaseData {
|
|
4
|
+
type: 'group';
|
|
5
|
+
bookTitle?: string;
|
|
6
|
+
}
|