@rspress/shared 0.1.1 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -126,6 +126,10 @@ interface Config$1 {
126
126
  * Whether to hide the navbar
127
127
  */
128
128
  hideNavbar?: boolean;
129
+ /**
130
+ * Whether to enable the animation for translation pages
131
+ */
132
+ enableContentAnimation?: boolean;
129
133
  }
130
134
  /**
131
135
  * locale config
@@ -339,6 +343,7 @@ interface RouteMeta {
339
343
  relativePath: string;
340
344
  pageName: string;
341
345
  lang: string;
346
+ version: string;
342
347
  }
343
348
  interface ReplaceRule {
344
349
  search: string | RegExp;
@@ -455,12 +460,30 @@ interface UserConfig<ThemeConfig = Config$1> {
455
460
  * Add some extra builder plugins
456
461
  */
457
462
  builderPlugins?: BuilderPlugin[];
463
+ /**
464
+ * Multi version config
465
+ */
466
+ multiVersion?: {
467
+ /**
468
+ * The default version
469
+ */
470
+ default?: string;
471
+ /**
472
+ * The version list, such as ['v1', 'v2']
473
+ */
474
+ versions: string[];
475
+ };
458
476
  }
459
477
  type BaseRuntimePageInfo = Omit<PageIndexInfo, 'id' | 'content' | 'domain'>;
460
478
  interface SiteData<ThemeConfig = NormalizedConfig> {
461
479
  root: string;
462
480
  base: string;
463
481
  lang: string;
482
+ route: RouteOptions;
483
+ locales: {
484
+ lang: string;
485
+ label: string;
486
+ }[];
464
487
  title: string;
465
488
  description: string;
466
489
  icon: string;
@@ -474,6 +497,10 @@ interface SiteData<ThemeConfig = NormalizedConfig> {
474
497
  markdown: {
475
498
  showLineNumbers: boolean;
476
499
  };
500
+ multiVersion: {
501
+ default: string;
502
+ versions: string[];
503
+ };
477
504
  }
478
505
  type PageIndexInfo = {
479
506
  id: number;
@@ -483,6 +510,7 @@ type PageIndexInfo = {
483
510
  content: string;
484
511
  frontmatter: Record<string, unknown>;
485
512
  lang: string;
513
+ version: string;
486
514
  domain: string;
487
515
  _filepath: string;
488
516
  _relativePath: string;
@@ -545,14 +573,6 @@ interface PageData {
545
573
  };
546
574
  }
547
575
  interface RouteOptions {
548
- /**
549
- * The directory to search for pages
550
- */
551
- root?: string;
552
- /**
553
- * The basename of the site
554
- */
555
- prefix?: string;
556
576
  /**
557
577
  * The extension name of the filepath that will be converted to a route
558
578
  * @default ['js','jsx','ts','tsx','md','mdx']
@@ -566,6 +586,10 @@ interface RouteOptions {
566
586
  * Exclude files from being converted to routes
567
587
  */
568
588
  exclude?: string[];
589
+ /**
590
+ * use links without .html files
591
+ */
592
+ cleanUrls?: boolean;
569
593
  }
570
594
  interface SearchHooks {
571
595
  /**
@@ -616,7 +640,14 @@ declare function removeLeadingSlash(url: string): string;
616
640
  declare function removeTrailingSlash(url: string): string;
617
641
  declare function normalizeSlash(url: string): string;
618
642
  declare function isExternalUrl(url: string): boolean;
619
- declare function replaceLang(rawUrl: string, targetLang: string, defaultLang: string, langs: string[], base?: string): string;
643
+ declare function replaceLang(rawUrl: string, lang: {
644
+ current: string;
645
+ target: string;
646
+ default: string;
647
+ }, version: {
648
+ current: string;
649
+ default: string;
650
+ }, base?: string): string;
620
651
  declare const omit: (obj: Record<string, unknown>, keys: string[]) => {
621
652
  [x: string]: unknown;
622
653
  };
@@ -624,7 +655,7 @@ declare const parseUrl: (url: string) => {
624
655
  url: string;
625
656
  hash: string;
626
657
  };
627
- declare function normalizeHref(url?: string): string;
658
+ declare function normalizeHref(url?: string, cleanUrls?: boolean): string;
628
659
  declare function withoutLang(path: string, langs: string[]): string;
629
660
  declare function withoutBase(path: string, base?: string): string;
630
661
  declare function withBase(url?: string, base?: string): string;
package/dist/index.js CHANGED
@@ -1159,26 +1159,36 @@ function normalizeSlash(url) {
1159
1159
  function isExternalUrl(url) {
1160
1160
  return url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:") || url.startsWith("tel:");
1161
1161
  }
1162
- function replaceLang(rawUrl, targetLang, defaultLang, langs, base = "") {
1162
+ function replaceLang(rawUrl, lang, version, base = "") {
1163
1163
  let url = removeBase(rawUrl, base);
1164
1164
  if (!url) {
1165
1165
  url = "/index.html";
1166
1166
  }
1167
- const originalLang = url.split("/")[1];
1168
- const inDefaultLang = !langs.includes(originalLang);
1169
- let result;
1170
- if (inDefaultLang) {
1171
- if (targetLang === defaultLang) {
1172
- result = url;
1173
- } else {
1174
- result = addLeadingSlash(`${targetLang}${url}`);
1167
+ let versionPart = "";
1168
+ let langPart = "";
1169
+ let purePathPart = "";
1170
+ const parts = url.split("/").filter(Boolean);
1171
+ if (version.current && version.current !== version.default) {
1172
+ versionPart = parts.shift() || "";
1173
+ }
1174
+ if (lang.target !== lang.default) {
1175
+ langPart = lang.target;
1176
+ if (lang.current !== lang.default) {
1177
+ parts.shift();
1175
1178
  }
1176
- } else if (targetLang === defaultLang) {
1177
- result = url.replace(`/${originalLang}`, "");
1178
1179
  } else {
1179
- result = url.replace(originalLang, targetLang);
1180
+ parts.shift();
1181
+ }
1182
+ purePathPart = parts.join("/") || "";
1183
+ if ((versionPart || langPart) && !purePathPart) {
1184
+ purePathPart = "index.html";
1180
1185
  }
1181
- return withBase(result, base);
1186
+ return withBase(
1187
+ addLeadingSlash(
1188
+ [versionPart, langPart, purePathPart].filter(Boolean).join("/")
1189
+ ),
1190
+ base
1191
+ );
1182
1192
  }
1183
1193
  var omit = (obj, keys) => {
1184
1194
  const ret = { ...obj };
@@ -1194,7 +1204,7 @@ var parseUrl = (url) => {
1194
1204
  hash
1195
1205
  };
1196
1206
  };
1197
- function normalizeHref(url) {
1207
+ function normalizeHref(url, cleanUrls = false) {
1198
1208
  if (!url) {
1199
1209
  return "/";
1200
1210
  }
@@ -1205,7 +1215,7 @@ function normalizeHref(url) {
1205
1215
  if (url.startsWith("mailto:") || url.startsWith("tel:")) {
1206
1216
  return url;
1207
1217
  }
1208
- if (!cleanUrl2.endsWith(".html")) {
1218
+ if (!cleanUrls && !cleanUrl2.endsWith(".html")) {
1209
1219
  if (cleanUrl2.endsWith("/")) {
1210
1220
  cleanUrl2 += "index.html";
1211
1221
  } else {
package/dist/index.mjs CHANGED
@@ -1113,26 +1113,35 @@ function normalizeSlash(url) {
1113
1113
  function isExternalUrl(url) {
1114
1114
  return url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:") || url.startsWith("tel:");
1115
1115
  }
1116
- function replaceLang(rawUrl, targetLang, defaultLang, langs, base = "") {
1116
+ function replaceLang(rawUrl, lang, version, base = "") {
1117
1117
  let url = removeBase(rawUrl, base);
1118
1118
  if (!url) {
1119
1119
  url = "/index.html";
1120
1120
  }
1121
- const originalLang = url.split("/")[1];
1122
- const inDefaultLang = !langs.includes(originalLang);
1123
- let result;
1124
- if (inDefaultLang) {
1125
- if (targetLang === defaultLang) {
1126
- result = url;
1127
- } else {
1128
- result = addLeadingSlash(`${targetLang}${url}`);
1121
+ let versionPart = "";
1122
+ let langPart = "";
1123
+ let purePathPart = "";
1124
+ const parts = url.split("/").filter(Boolean);
1125
+ if (version.current && version.current !== version.default) {
1126
+ versionPart = parts.shift() || "";
1127
+ }
1128
+ if (lang.target !== lang.default) {
1129
+ langPart = lang.target;
1130
+ if (lang.current !== lang.default) {
1131
+ parts.shift();
1129
1132
  }
1130
- } else if (targetLang === defaultLang) {
1131
- result = url.replace(`/${originalLang}`, "");
1132
1133
  } else {
1133
- result = url.replace(originalLang, targetLang);
1134
+ parts.shift();
1135
+ }
1136
+ purePathPart = parts.join("/") || "";
1137
+ if ((versionPart || langPart) && !purePathPart) {
1138
+ purePathPart = "index.html";
1134
1139
  }
1135
- return withBase(result, base);
1140
+ return withBase(addLeadingSlash([
1141
+ versionPart,
1142
+ langPart,
1143
+ purePathPart
1144
+ ].filter(Boolean).join("/")), base);
1136
1145
  }
1137
1146
  var omit = (obj, keys) => {
1138
1147
  const ret = {
@@ -1150,7 +1159,7 @@ var parseUrl = (url) => {
1150
1159
  hash
1151
1160
  };
1152
1161
  };
1153
- function normalizeHref(url) {
1162
+ function normalizeHref(url, cleanUrls = false) {
1154
1163
  if (!url) {
1155
1164
  return "/";
1156
1165
  }
@@ -1161,7 +1170,7 @@ function normalizeHref(url) {
1161
1170
  if (url.startsWith("mailto:") || url.startsWith("tel:")) {
1162
1171
  return url;
1163
1172
  }
1164
- if (!cleanUrl2.endsWith(".html")) {
1173
+ if (!cleanUrls && !cleanUrl2.endsWith(".html")) {
1165
1174
  if (cleanUrl2.endsWith("/")) {
1166
1175
  cleanUrl2 += "index.html";
1167
1176
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rspress/shared",
3
- "version": "0.1.1",
3
+ "version": "1.0.0-beta.0",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",