erudit 2.0.0-dev.9 → 3.0.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +11 -3
- 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 +5 -5
- package/app/components/aside/minor/AsideMinorNews.vue +11 -11
- package/app/components/aside/minor/AsideMinorPane.vue +15 -16
- 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 -203
- 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 -63
- package/app/components/bitran/RenderWrapper.vue +10 -10
- 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 -20
- package/app/components/main/utils/ContentFlag.vue +15 -16
- 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 +70 -76
- package/app/components/main/utils/ContentSection.vue +45 -42
- package/app/components/main/utils/ContentTitle.vue +39 -37
- package/app/components/main/utils/reference/ReferenceGroup.vue +38 -41
- package/app/components/main/utils/reference/ReferenceItem.vue +68 -64
- package/app/components/main/utils/reference/ReferenceSource.vue +116 -110
- 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 -15
- 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 +19 -22
- package/app/components/tree/TreeContainer.vue +11 -12
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/bitran.ts +127 -127
- package/app/composables/bitranContent.ts +37 -37
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +36 -36
- package/app/composables/contentPage.ts +156 -156
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +63 -63
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +86 -86
- package/app/composables/majorPane.ts +60 -60
- package/app/composables/phrases.ts +80 -80
- package/app/composables/theme.ts +29 -29
- package/app/composables/url.ts +33 -33
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +3 -3
- package/app/pages/book/[...bookId].vue +47 -47
- package/app/pages/group/[...groupId].vue +65 -65
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +6 -7
- package/app/pages/practice/[...practice].vue +3 -3
- package/app/pages/summary/[...summaryId].vue +3 -3
- package/app/scripts/_immediate.js +9 -4
- package/app/scripts/aside/index.ts +59 -59
- package/app/scripts/aside/major/nav.ts +26 -26
- package/app/scripts/aside/minor/state.ts +37 -37
- package/app/scripts/aside/minor/topic.ts +3 -3
- package/app/scripts/flag.ts +28 -28
- package/app/scripts/og.ts +27 -27
- package/app/scripts/preview/build.ts +73 -84
- package/app/scripts/preview/data/alert.ts +19 -19
- package/app/scripts/preview/data/custom.ts +8 -8
- package/app/scripts/preview/data/genericLink.ts +24 -24
- package/app/scripts/preview/data/pageLink.ts +20 -20
- package/app/scripts/preview/data/unique.ts +70 -70
- package/app/scripts/preview/data.ts +24 -26
- package/app/scripts/preview/display.ts +37 -37
- package/app/scripts/preview/footer.ts +9 -9
- package/app/scripts/preview/request.ts +51 -51
- package/app/scripts/preview/state.ts +63 -63
- package/app/styles/_immediate.css +7 -3
- package/app/styles/_util.scss +43 -50
- package/app/styles/_utils.scss +44 -44
- package/app/styles/app.scss +91 -91
- package/app/styles/def/_bp.scss +27 -24
- package/app/styles/def/_size.scss +7 -7
- package/app/styles/def/_z.scss +5 -5
- package/app/styles/default.scss +83 -85
- package/app/styles/normalize.scss +63 -63
- package/app/styles/partials/_darkMagic.scss +5 -7
- package/app/styles/partials/_fnav.scss +15 -18
- package/app/styles/partials/_preview.scss +5 -7
- package/globalPath.ts +21 -21
- package/globals/bitran.ts +47 -47
- package/globals/content.ts +22 -22
- package/globals/contributor.ts +5 -5
- 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/bitran.ts +34 -34
- package/module/config.ts +34 -34
- package/module/imports.ts +46 -46
- package/module/index.ts +47 -47
- package/module/logger.ts +10 -10
- package/module/paths.ts +22 -22
- package/module/restart.ts +61 -61
- package/nuxt.config.ts +112 -107
- package/package.json +3 -3
- 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/contributor/count.ts +6 -6
- package/server/api/fake/content.ts +11 -11
- 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 +187 -187
- package/server/plugin/bitran/location.ts +25 -25
- package/server/plugin/bitran/products/include.ts +230 -230
- package/server/plugin/bitran/products/link.ts +116 -116
- package/server/plugin/bitran/setup.ts +9 -9
- package/server/plugin/bitran/toc.ts +83 -83
- package/server/plugin/bitran/transpiler.ts +46 -46
- package/server/plugin/build/close.ts +10 -10
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +176 -176
- package/server/plugin/build/jobs/content/parse.ts +100 -100
- package/server/plugin/build/jobs/content/path.ts +6 -6
- package/server/plugin/build/jobs/content/type/book.ts +9 -9
- package/server/plugin/build/jobs/content/type/group.ts +37 -37
- package/server/plugin/build/jobs/content/type/topic.ts +36 -36
- package/server/plugin/build/jobs/contributors.ts +66 -66
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/jobs/nav.ts +210 -209
- 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/content/absoluteId.ts +94 -94
- package/server/plugin/content/context.ts +112 -112
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +49 -49
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +16 -16
- package/server/plugin/db/entities/Group.ts +14 -14
- package/server/plugin/db/entities/Hash.ts +15 -15
- package/server/plugin/db/entities/Topic.ts +20 -20
- package/server/plugin/db/entities/Unique.ts +21 -21
- package/server/plugin/db/setup.ts +34 -34
- 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/plugin/nav/node.ts +26 -26
- package/server/plugin/nav/utils.ts +129 -129
- package/server/plugin/repository/book.ts +21 -21
- package/server/plugin/repository/content.ts +238 -238
- package/server/plugin/repository/contributor.ts +8 -8
- package/server/plugin/repository/frontNav.ts +148 -148
- package/server/plugin/repository/topic.ts +32 -32
- package/server/tsconfig.json +9 -7
- package/shared/aside/minor.ts +50 -50
- package/shared/asset.ts +15 -15
- package/shared/bitran/context.ts +8 -8
- package/shared/bitran/default.ts +46 -46
- package/shared/bitran/link/Link.vue +167 -167
- package/shared/bitran/link/factory.ts +24 -24
- package/shared/bitran/link/languages/en.ts +7 -7
- package/shared/bitran/link/languages/ru.ts +7 -7
- package/shared/bitran/link/renderer.ts +21 -21
- package/shared/bitran/link/shared.ts +17 -17
- package/shared/bitran/link/target.ts +134 -134
- package/shared/bitran/link/transpiler.ts +10 -10
- package/shared/bitran/location.ts +166 -166
- package/shared/bitran/toc.ts +8 -8
- 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/contributor.ts +5 -5
- package/shared/frontNav.ts +41 -41
- package/shared/icons.ts +38 -38
- package/shared/image.ts +5 -5
- package/shared/link.ts +25 -25
- package/shared/types/language.ts +75 -75
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/bitran/link/target.test.ts +141 -141
- package/test/bitran/location.test.ts +143 -143
- package/tsconfig.json +8 -8
- package/utils/stress.ts +9 -9
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
|
2
|
-
import type { TopicPart } from 'erudit-cog/schema';
|
|
3
|
-
|
|
4
|
-
@Entity('topic')
|
|
5
|
-
export class DbTopic {
|
|
6
|
-
@PrimaryColumn('varchar')
|
|
7
|
-
contentId!: string;
|
|
8
|
-
|
|
9
|
-
@Column('simple-array')
|
|
10
|
-
parts!: TopicPart[];
|
|
11
|
-
|
|
12
|
-
@Column('text', { nullable: true })
|
|
13
|
-
article?: string;
|
|
14
|
-
|
|
15
|
-
@Column('text', { nullable: true })
|
|
16
|
-
summary?: string;
|
|
17
|
-
|
|
18
|
-
@Column('text', { nullable: true })
|
|
19
|
-
practice?: string;
|
|
20
|
-
}
|
|
1
|
+
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
|
2
|
+
import type { TopicPart } from 'erudit-cog/schema';
|
|
3
|
+
|
|
4
|
+
@Entity('topic')
|
|
5
|
+
export class DbTopic {
|
|
6
|
+
@PrimaryColumn('varchar')
|
|
7
|
+
contentId!: string;
|
|
8
|
+
|
|
9
|
+
@Column('simple-array')
|
|
10
|
+
parts!: TopicPart[];
|
|
11
|
+
|
|
12
|
+
@Column('text', { nullable: true })
|
|
13
|
+
article?: string;
|
|
14
|
+
|
|
15
|
+
@Column('text', { nullable: true })
|
|
16
|
+
summary?: string;
|
|
17
|
+
|
|
18
|
+
@Column('text', { nullable: true })
|
|
19
|
+
practice?: string;
|
|
20
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
|
2
|
-
|
|
3
|
-
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
4
|
-
|
|
5
|
-
@Entity('unique')
|
|
6
|
-
export class DbUnique {
|
|
7
|
-
@PrimaryColumn('varchar')
|
|
8
|
-
location!: string;
|
|
9
|
-
|
|
10
|
-
@Column('varchar')
|
|
11
|
-
productName!: string;
|
|
12
|
-
|
|
13
|
-
@Column('text')
|
|
14
|
-
content!: string;
|
|
15
|
-
|
|
16
|
-
@Column('simple-json')
|
|
17
|
-
context!: BitranContext;
|
|
18
|
-
|
|
19
|
-
@Column('varchar', { nullable: true })
|
|
20
|
-
title?: string;
|
|
21
|
-
}
|
|
1
|
+
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
4
|
+
|
|
5
|
+
@Entity('unique')
|
|
6
|
+
export class DbUnique {
|
|
7
|
+
@PrimaryColumn('varchar')
|
|
8
|
+
location!: string;
|
|
9
|
+
|
|
10
|
+
@Column('varchar')
|
|
11
|
+
productName!: string;
|
|
12
|
+
|
|
13
|
+
@Column('text')
|
|
14
|
+
content!: string;
|
|
15
|
+
|
|
16
|
+
@Column('simple-json')
|
|
17
|
+
context!: BitranContext;
|
|
18
|
+
|
|
19
|
+
@Column('varchar', { nullable: true })
|
|
20
|
+
title?: string;
|
|
21
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { DataSource } from 'typeorm';
|
|
2
|
-
|
|
3
|
-
import { PROJECT_DIR } from '#erudit/globalPaths';
|
|
4
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
-
|
|
6
|
-
// Database Entities
|
|
7
|
-
import { DbContributor } from './entities/Contributor';
|
|
8
|
-
import { DbBook } from './entities/Book';
|
|
9
|
-
import { DbContent } from './entities/Content';
|
|
10
|
-
import { DbContribution } from './entities/Contribution';
|
|
11
|
-
import { DbGroup } from './entities/Group';
|
|
12
|
-
import { DbHash } from './entities/Hash';
|
|
13
|
-
import { DbTopic } from './entities/Topic';
|
|
14
|
-
import { DbUnique } from './entities/Unique';
|
|
15
|
-
|
|
16
|
-
export async function setupDatabase() {
|
|
17
|
-
ERUDIT_SERVER.DB = new DataSource({
|
|
18
|
-
type: 'sqlite',
|
|
19
|
-
database: PROJECT_DIR + '/.erudit/data.sqlite',
|
|
20
|
-
synchronize: true,
|
|
21
|
-
entities: [
|
|
22
|
-
DbBook,
|
|
23
|
-
DbContent,
|
|
24
|
-
DbContribution,
|
|
25
|
-
DbContributor,
|
|
26
|
-
DbGroup,
|
|
27
|
-
DbHash,
|
|
28
|
-
DbTopic,
|
|
29
|
-
DbUnique,
|
|
30
|
-
],
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
await ERUDIT_SERVER.DB.initialize();
|
|
34
|
-
}
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
import { PROJECT_DIR } from '#erudit/globalPaths';
|
|
4
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
+
|
|
6
|
+
// Database Entities
|
|
7
|
+
import { DbContributor } from './entities/Contributor';
|
|
8
|
+
import { DbBook } from './entities/Book';
|
|
9
|
+
import { DbContent } from './entities/Content';
|
|
10
|
+
import { DbContribution } from './entities/Contribution';
|
|
11
|
+
import { DbGroup } from './entities/Group';
|
|
12
|
+
import { DbHash } from './entities/Hash';
|
|
13
|
+
import { DbTopic } from './entities/Topic';
|
|
14
|
+
import { DbUnique } from './entities/Unique';
|
|
15
|
+
|
|
16
|
+
export async function setupDatabase() {
|
|
17
|
+
ERUDIT_SERVER.DB = new DataSource({
|
|
18
|
+
type: 'sqlite',
|
|
19
|
+
database: PROJECT_DIR + '/.erudit/data.sqlite',
|
|
20
|
+
synchronize: true,
|
|
21
|
+
entities: [
|
|
22
|
+
DbBook,
|
|
23
|
+
DbContent,
|
|
24
|
+
DbContribution,
|
|
25
|
+
DbContributor,
|
|
26
|
+
DbGroup,
|
|
27
|
+
DbHash,
|
|
28
|
+
DbTopic,
|
|
29
|
+
DbUnique,
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
await ERUDIT_SERVER.DB.initialize();
|
|
34
|
+
}
|
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
|
+
});
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import type { ContentType } from 'erudit-cog/schema';
|
|
2
|
-
|
|
3
|
-
export interface NavNode {
|
|
4
|
-
type: ContentType;
|
|
5
|
-
path: string;
|
|
6
|
-
id: string;
|
|
7
|
-
fullId: string;
|
|
8
|
-
skip: boolean;
|
|
9
|
-
children?: NavNode[];
|
|
10
|
-
parent?: NavNode | RootNavNode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface RootNavNode {
|
|
14
|
-
type: '#root';
|
|
15
|
-
children?: NavNode[];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function isRootNode(node: NavNode | RootNavNode) {
|
|
19
|
-
return node?.type === '#root';
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function createRootNode(): RootNavNode {
|
|
23
|
-
return {
|
|
24
|
-
type: '#root',
|
|
25
|
-
};
|
|
26
|
-
}
|
|
1
|
+
import type { ContentType } from 'erudit-cog/schema';
|
|
2
|
+
|
|
3
|
+
export interface NavNode {
|
|
4
|
+
type: ContentType;
|
|
5
|
+
path: string;
|
|
6
|
+
id: string;
|
|
7
|
+
fullId: string;
|
|
8
|
+
skip: boolean;
|
|
9
|
+
children?: NavNode[];
|
|
10
|
+
parent?: NavNode | RootNavNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface RootNavNode {
|
|
14
|
+
type: '#root';
|
|
15
|
+
children?: NavNode[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function isRootNode(node: NavNode | RootNavNode) {
|
|
19
|
+
return node?.type === '#root';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createRootNode(): RootNavNode {
|
|
23
|
+
return {
|
|
24
|
+
type: '#root',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
-
import { isRootNode, type NavNode } from '@server/nav/node';
|
|
3
|
-
|
|
4
|
-
export async function walkNav(
|
|
5
|
-
step: (node: NavNode) => Promise<void | false>,
|
|
6
|
-
from: NavNode | typeof ERUDIT_SERVER.NAV = ERUDIT_SERVER.NAV,
|
|
7
|
-
) {
|
|
8
|
-
if (!from) return;
|
|
9
|
-
|
|
10
|
-
const stepResult = isRootNode(from) ? true : await step(from);
|
|
11
|
-
|
|
12
|
-
if (stepResult !== false)
|
|
13
|
-
if (from.children)
|
|
14
|
-
for (const child of from.children) await walkNav(step, child);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
export function getNavBookOf(target: string | NavNode): NavNode | undefined {
|
|
22
|
-
const id = typeof target === 'string' ? target : target.id;
|
|
23
|
-
|
|
24
|
-
if (!id || !ERUDIT_SERVER.NAV_BOOKS) return undefined;
|
|
25
|
-
|
|
26
|
-
const idParts = id.split('/');
|
|
27
|
-
|
|
28
|
-
while (idParts.length > 0) {
|
|
29
|
-
const book = ERUDIT_SERVER.NAV_BOOKS[idParts.join('/')];
|
|
30
|
-
|
|
31
|
-
if (book) return book;
|
|
32
|
-
|
|
33
|
-
idParts.pop();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export async function getPreviousNextNav(contentId: string) {
|
|
40
|
-
let previousNav: NavNode | undefined, nextNav: NavNode | undefined;
|
|
41
|
-
let book: NavNode | undefined;
|
|
42
|
-
let finish = false;
|
|
43
|
-
|
|
44
|
-
await walkNav(async (navNode) => {
|
|
45
|
-
if (navNode.id === contentId) {
|
|
46
|
-
book = getNavBookOf(navNode);
|
|
47
|
-
finish = true;
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (finish && !nextNav) {
|
|
52
|
-
nextNav = navNode;
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!finish) previousNav = navNode;
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
if (book) {
|
|
60
|
-
//
|
|
61
|
-
// Can't lead out of current book (if givent content item is inside the book)
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
if (previousNav)
|
|
65
|
-
if (getNavBookOf(previousNav)?.fullId !== book.fullId)
|
|
66
|
-
previousNav = undefined;
|
|
67
|
-
|
|
68
|
-
if (nextNav)
|
|
69
|
-
if (getNavBookOf(nextNav)?.fullId !== book.fullId)
|
|
70
|
-
nextNav = undefined;
|
|
71
|
-
} else {
|
|
72
|
-
//
|
|
73
|
-
// If not inside the book and tries to lead inside a book, then force lead to book's about page
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
if (previousNav) previousNav = getNavBookOf(previousNav) || previousNav;
|
|
77
|
-
|
|
78
|
-
if (nextNav) nextNav = getNavBookOf(nextNav) || nextNav;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return {
|
|
82
|
-
previousNav,
|
|
83
|
-
nextNav,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export async function getNavNode(
|
|
88
|
-
contentId: string,
|
|
89
|
-
): Promise<NavNode | undefined> {
|
|
90
|
-
let navNode: NavNode | undefined;
|
|
91
|
-
|
|
92
|
-
await walkNav(async (_navNode) => {
|
|
93
|
-
if (_navNode.id === contentId) {
|
|
94
|
-
navNode = _navNode;
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
return navNode;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export async function getIdsUp(contentId: string): Promise<string[]> {
|
|
103
|
-
const startNavNode = await getNavNode(contentId);
|
|
104
|
-
|
|
105
|
-
if (!startNavNode) return [];
|
|
106
|
-
|
|
107
|
-
const ids: string[] = [];
|
|
108
|
-
|
|
109
|
-
let currentNavNode: any = startNavNode;
|
|
110
|
-
while (currentNavNode?.id) {
|
|
111
|
-
ids.push(currentNavNode.id);
|
|
112
|
-
currentNavNode = currentNavNode.parent;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return ids;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export async function isSkipId(contentId: string) {
|
|
119
|
-
let hidden = false;
|
|
120
|
-
|
|
121
|
-
await walkNav(async (navNode) => {
|
|
122
|
-
if (navNode.id === contentId) {
|
|
123
|
-
hidden = navNode.skip;
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
return hidden;
|
|
129
|
-
}
|
|
1
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
+
import { isRootNode, type NavNode } from '@server/nav/node';
|
|
3
|
+
|
|
4
|
+
export async function walkNav(
|
|
5
|
+
step: (node: NavNode) => Promise<void | false>,
|
|
6
|
+
from: NavNode | typeof ERUDIT_SERVER.NAV = ERUDIT_SERVER.NAV,
|
|
7
|
+
) {
|
|
8
|
+
if (!from) return;
|
|
9
|
+
|
|
10
|
+
const stepResult = isRootNode(from) ? true : await step(from);
|
|
11
|
+
|
|
12
|
+
if (stepResult !== false)
|
|
13
|
+
if (from.children)
|
|
14
|
+
for (const child of from.children) await walkNav(step, child);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//
|
|
18
|
+
//
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
export function getNavBookOf(target: string | NavNode): NavNode | undefined {
|
|
22
|
+
const id = typeof target === 'string' ? target : target.id;
|
|
23
|
+
|
|
24
|
+
if (!id || !ERUDIT_SERVER.NAV_BOOKS) return undefined;
|
|
25
|
+
|
|
26
|
+
const idParts = id.split('/');
|
|
27
|
+
|
|
28
|
+
while (idParts.length > 0) {
|
|
29
|
+
const book = ERUDIT_SERVER.NAV_BOOKS[idParts.join('/')];
|
|
30
|
+
|
|
31
|
+
if (book) return book;
|
|
32
|
+
|
|
33
|
+
idParts.pop();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function getPreviousNextNav(contentId: string) {
|
|
40
|
+
let previousNav: NavNode | undefined, nextNav: NavNode | undefined;
|
|
41
|
+
let book: NavNode | undefined;
|
|
42
|
+
let finish = false;
|
|
43
|
+
|
|
44
|
+
await walkNav(async (navNode) => {
|
|
45
|
+
if (navNode.id === contentId) {
|
|
46
|
+
book = getNavBookOf(navNode);
|
|
47
|
+
finish = true;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (finish && !nextNav) {
|
|
52
|
+
nextNav = navNode;
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!finish) previousNav = navNode;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
if (book) {
|
|
60
|
+
//
|
|
61
|
+
// Can't lead out of current book (if givent content item is inside the book)
|
|
62
|
+
//
|
|
63
|
+
|
|
64
|
+
if (previousNav)
|
|
65
|
+
if (getNavBookOf(previousNav)?.fullId !== book.fullId)
|
|
66
|
+
previousNav = undefined;
|
|
67
|
+
|
|
68
|
+
if (nextNav)
|
|
69
|
+
if (getNavBookOf(nextNav)?.fullId !== book.fullId)
|
|
70
|
+
nextNav = undefined;
|
|
71
|
+
} else {
|
|
72
|
+
//
|
|
73
|
+
// If not inside the book and tries to lead inside a book, then force lead to book's about page
|
|
74
|
+
//
|
|
75
|
+
|
|
76
|
+
if (previousNav) previousNav = getNavBookOf(previousNav) || previousNav;
|
|
77
|
+
|
|
78
|
+
if (nextNav) nextNav = getNavBookOf(nextNav) || nextNav;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
previousNav,
|
|
83
|
+
nextNav,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export async function getNavNode(
|
|
88
|
+
contentId: string,
|
|
89
|
+
): Promise<NavNode | undefined> {
|
|
90
|
+
let navNode: NavNode | undefined;
|
|
91
|
+
|
|
92
|
+
await walkNav(async (_navNode) => {
|
|
93
|
+
if (_navNode.id === contentId) {
|
|
94
|
+
navNode = _navNode;
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
return navNode;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export async function getIdsUp(contentId: string): Promise<string[]> {
|
|
103
|
+
const startNavNode = await getNavNode(contentId);
|
|
104
|
+
|
|
105
|
+
if (!startNavNode) return [];
|
|
106
|
+
|
|
107
|
+
const ids: string[] = [];
|
|
108
|
+
|
|
109
|
+
let currentNavNode: any = startNavNode;
|
|
110
|
+
while (currentNavNode?.id) {
|
|
111
|
+
ids.push(currentNavNode.id);
|
|
112
|
+
currentNavNode = currentNavNode.parent;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return ids;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function isSkipId(contentId: string) {
|
|
119
|
+
let hidden = false;
|
|
120
|
+
|
|
121
|
+
await walkNav(async (navNode) => {
|
|
122
|
+
if (navNode.id === contentId) {
|
|
123
|
+
hidden = navNode.skip;
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return hidden;
|
|
129
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
-
import { getNavBookOf } from '@server/nav/utils';
|
|
3
|
-
import { DbContent } from '@server/db/entities/Content';
|
|
4
|
-
|
|
5
|
-
export async function getContentBookFor(contentId: string) {
|
|
6
|
-
const navBook = getNavBookOf(contentId);
|
|
7
|
-
|
|
8
|
-
if (!navBook) return undefined;
|
|
9
|
-
|
|
10
|
-
const bookId = navBook.id;
|
|
11
|
-
|
|
12
|
-
const dbContent = await ERUDIT_SERVER.DB.manager.findOne(DbContent, {
|
|
13
|
-
select: ['title'],
|
|
14
|
-
where: { contentId: bookId },
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
return {
|
|
18
|
-
contentId: bookId,
|
|
19
|
-
title: dbContent?.title || bookId,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
1
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
+
import { getNavBookOf } from '@server/nav/utils';
|
|
3
|
+
import { DbContent } from '@server/db/entities/Content';
|
|
4
|
+
|
|
5
|
+
export async function getContentBookFor(contentId: string) {
|
|
6
|
+
const navBook = getNavBookOf(contentId);
|
|
7
|
+
|
|
8
|
+
if (!navBook) return undefined;
|
|
9
|
+
|
|
10
|
+
const bookId = navBook.id;
|
|
11
|
+
|
|
12
|
+
const dbContent = await ERUDIT_SERVER.DB.manager.findOne(DbContent, {
|
|
13
|
+
select: ['title'],
|
|
14
|
+
where: { contentId: bookId },
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
contentId: bookId,
|
|
19
|
+
title: dbContent?.title || bookId,
|
|
20
|
+
};
|
|
21
|
+
}
|