@lonik/prestige 0.8.0 → 0.9.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/ui.d.ts +15 -15
- package/dist/vite.d.ts +3 -1
- package/dist/vite.js +69 -40
- package/dist/vite.js.map +1 -1
- package/package.json +2 -1
package/dist/ui.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as SidebarType } from "./content.types-Iwprk4Pj.js";
|
|
2
2
|
import { TocItem } from "remark-flexible-toc";
|
|
3
3
|
import React, { PropsWithChildren, ReactNode } from "react";
|
|
4
|
-
import * as
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
|
|
6
6
|
|
|
7
7
|
//#region src/ui/components/aside/aside.d.ts
|
|
@@ -17,7 +17,7 @@ declare function Aside({
|
|
|
17
17
|
children,
|
|
18
18
|
className,
|
|
19
19
|
...props
|
|
20
|
-
}: AsideProps):
|
|
20
|
+
}: AsideProps): react_jsx_runtime0.JSX.Element;
|
|
21
21
|
//#endregion
|
|
22
22
|
//#region src/ui/components/code/code.d.ts
|
|
23
23
|
interface CodeProps {
|
|
@@ -27,7 +27,7 @@ interface CodeProps {
|
|
|
27
27
|
declare function Code({
|
|
28
28
|
code,
|
|
29
29
|
language
|
|
30
|
-
}: CodeProps):
|
|
30
|
+
}: CodeProps): react_jsx_runtime0.JSX.Element;
|
|
31
31
|
//#endregion
|
|
32
32
|
//#region src/ui/components/package-managers/package-managers.d.ts
|
|
33
33
|
type CommandType = "add" | "create" | "exec" | "run";
|
|
@@ -48,26 +48,26 @@ declare function PackageManagers({
|
|
|
48
48
|
dev,
|
|
49
49
|
args,
|
|
50
50
|
className
|
|
51
|
-
}: PackageManagersProps):
|
|
51
|
+
}: PackageManagersProps): react_jsx_runtime0.JSX.Element;
|
|
52
52
|
//#endregion
|
|
53
53
|
//#region src/ui/components/tabs/tabs.d.ts
|
|
54
54
|
declare function Tabs({
|
|
55
55
|
orientation,
|
|
56
56
|
className,
|
|
57
57
|
...props
|
|
58
|
-
}: Tabs$1.Root.Props):
|
|
58
|
+
}: Tabs$1.Root.Props): react_jsx_runtime0.JSX.Element;
|
|
59
59
|
declare function TabsList({
|
|
60
60
|
className,
|
|
61
61
|
...props
|
|
62
|
-
}: Tabs$1.List.Props):
|
|
62
|
+
}: Tabs$1.List.Props): react_jsx_runtime0.JSX.Element;
|
|
63
63
|
declare function TabsTrigger({
|
|
64
64
|
className,
|
|
65
65
|
...props
|
|
66
|
-
}: Tabs$1.Tab.Props):
|
|
66
|
+
}: Tabs$1.Tab.Props): react_jsx_runtime0.JSX.Element;
|
|
67
67
|
declare function TabsContent({
|
|
68
68
|
className,
|
|
69
69
|
...props
|
|
70
|
-
}: Tabs$1.Panel.Props):
|
|
70
|
+
}: Tabs$1.Panel.Props): react_jsx_runtime0.JSX.Element;
|
|
71
71
|
//#endregion
|
|
72
72
|
//#region src/ui/routes/prestige-shell.d.ts
|
|
73
73
|
type RenderNode = () => ReactNode;
|
|
@@ -81,13 +81,13 @@ declare function PrestigeShell({
|
|
|
81
81
|
}: {
|
|
82
82
|
children: ReactNode;
|
|
83
83
|
options?: PrestigeShellProps;
|
|
84
|
-
}):
|
|
84
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
85
85
|
//#endregion
|
|
86
86
|
//#region src/ui/core/header/header.d.ts
|
|
87
87
|
type HeaderProps = Pick<PrestigeShellProps, "customHeaderTitle">;
|
|
88
88
|
declare function Header({
|
|
89
89
|
customHeaderTitle
|
|
90
|
-
}: HeaderProps):
|
|
90
|
+
}: HeaderProps): react_jsx_runtime0.JSX.Element;
|
|
91
91
|
//#endregion
|
|
92
92
|
//#region src/ui/core/prestige-page.d.ts
|
|
93
93
|
interface PrestigePageProps {
|
|
@@ -97,11 +97,11 @@ interface PrestigePageProps {
|
|
|
97
97
|
declare function PrestigePage({
|
|
98
98
|
children,
|
|
99
99
|
toc
|
|
100
|
-
}: PrestigePageProps):
|
|
100
|
+
}: PrestigePageProps): react_jsx_runtime0.JSX.Element;
|
|
101
101
|
//#endregion
|
|
102
102
|
//#region src/ui/routes/collection/collection.route.d.ts
|
|
103
103
|
declare function CollectionRoute(sidebar: SidebarType, id: string): {
|
|
104
|
-
component: () =>
|
|
104
|
+
component: () => react_jsx_runtime0.JSX.Element;
|
|
105
105
|
};
|
|
106
106
|
//#endregion
|
|
107
107
|
//#region src/ui/routes/content/content.route.d.ts
|
|
@@ -109,7 +109,7 @@ declare function ContentRoute(inlineData: any): any;
|
|
|
109
109
|
declare function LazyContentRoute(inlineData: any): any;
|
|
110
110
|
//#endregion
|
|
111
111
|
//#region src/ui/routes/not-found.d.ts
|
|
112
|
-
declare function PrestigeNotFound():
|
|
112
|
+
declare function PrestigeNotFound(): react_jsx_runtime0.JSX.Element;
|
|
113
113
|
//#endregion
|
|
114
114
|
//#region src/ui/components/steps/step-item.d.ts
|
|
115
115
|
type StepItemProps = PropsWithChildren<{
|
|
@@ -120,13 +120,13 @@ declare function StepItem({
|
|
|
120
120
|
children,
|
|
121
121
|
label,
|
|
122
122
|
index
|
|
123
|
-
}: StepItemProps):
|
|
123
|
+
}: StepItemProps): react_jsx_runtime0.JSX.Element;
|
|
124
124
|
//#endregion
|
|
125
125
|
//#region src/ui/components/steps/steps.d.ts
|
|
126
126
|
type StepsProps = PropsWithChildren;
|
|
127
127
|
declare function Steps({
|
|
128
128
|
children
|
|
129
|
-
}: StepsProps):
|
|
129
|
+
}: StepsProps): react_jsx_runtime0.JSX.Element;
|
|
130
130
|
//#endregion
|
|
131
131
|
export { Aside, type AsideProps, type AsideType, Code, type CodeProps, CollectionRoute, ContentRoute, Header, LazyContentRoute, PackageManagers, type PackageManagersProps, PrestigeNotFound, PrestigePage, type PrestigePageProps, PrestigeShell, type PrestigeShellProps, StepItem, type StepItemProps, Steps, type StepsProps, Tabs, TabsContent, TabsList, TabsTrigger };
|
|
132
132
|
//# sourceMappingURL=ui.d.ts.map
|
package/dist/vite.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { t as CollectionItem } from "./content.types-Iwprk4Pj.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { Plugin } from "vite";
|
|
4
3
|
import { FlexibleTocOptions } from "remark-flexible-toc";
|
|
5
4
|
import { Options } from "remark-gfm";
|
|
5
|
+
import { Plugin } from "vite";
|
|
6
6
|
import { PluggableList } from "unified";
|
|
7
7
|
|
|
8
8
|
//#region src/vite/config/config.types.d.ts
|
|
9
9
|
declare const PrestigeConfigSchema: z.ZodObject<{
|
|
10
10
|
title: z.ZodString;
|
|
11
11
|
github: z.ZodOptional<z.ZodString>;
|
|
12
|
+
disableLog: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
13
|
+
enableDebugLog: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
12
14
|
algolia: z.ZodOptional<z.ZodObject<{
|
|
13
15
|
appId: z.ZodString;
|
|
14
16
|
apiKey: z.ZodString;
|
package/dist/vite.js
CHANGED
|
@@ -4,7 +4,6 @@ import { z } from "zod";
|
|
|
4
4
|
import { mkdir, readFile, readdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
5
5
|
import { genArrayFromRaw, genObjectFromValues } from "knitwork";
|
|
6
6
|
import { basename, join as join$1 } from "node:path";
|
|
7
|
-
import { createLogger } from "vite";
|
|
8
7
|
import { compile } from "@mdx-js/mdx";
|
|
9
8
|
import rehypePrism from "rehype-prism-plus";
|
|
10
9
|
import rehypeSlug from "rehype-slug";
|
|
@@ -18,6 +17,7 @@ import { visit } from "unist-util-visit";
|
|
|
18
17
|
import { pathToFileURL } from "node:url";
|
|
19
18
|
import { glob } from "tinyglobby";
|
|
20
19
|
import { read } from "to-vfile";
|
|
20
|
+
import pc from "picocolors";
|
|
21
21
|
import chokidar from "chokidar";
|
|
22
22
|
import debounce from "debounce";
|
|
23
23
|
|
|
@@ -79,6 +79,8 @@ const CollectionsSchema = z.array(CollectionSchema);
|
|
|
79
79
|
const PrestigeConfigSchema = z.object({
|
|
80
80
|
title: z.string().describe("Title of the website"),
|
|
81
81
|
github: z.string().optional().describe("Github repo"),
|
|
82
|
+
disableLog: z.boolean().optional().default(false).describe("Disable logger, default is false"),
|
|
83
|
+
enableDebugLog: z.boolean().optional().default(false).describe("Enable debug log, default is false"),
|
|
82
84
|
algolia: z.object({
|
|
83
85
|
appId: z.string().describe("Algolia app id"),
|
|
84
86
|
apiKey: z.string().describe("Algolia api key"),
|
|
@@ -147,11 +149,6 @@ function processItem$1(item, links = []) {
|
|
|
147
149
|
return links;
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
//#endregion
|
|
151
|
-
//#region src/vite/utils/logger.ts
|
|
152
|
-
const logger = createLogger(void 0, { prefix: "[Prestige]" });
|
|
153
|
-
var logger_default = logger;
|
|
154
|
-
|
|
155
152
|
//#endregion
|
|
156
153
|
//#region src/vite/content/content-compiler.ts
|
|
157
154
|
function remarkAdmonitions() {
|
|
@@ -440,18 +437,18 @@ function resolveDefaultLink(items, defaultLink) {
|
|
|
440
437
|
if (link) return link;
|
|
441
438
|
}
|
|
442
439
|
}
|
|
443
|
-
async function resolveSidebars(collections, contentDir) {
|
|
440
|
+
async function resolveSidebars(collections, contentDir, logger) {
|
|
444
441
|
const store = /* @__PURE__ */ new Map();
|
|
445
442
|
for (const collection of collections) {
|
|
446
|
-
const sidebar = await processCollection(collection, contentDir);
|
|
443
|
+
const sidebar = await processCollection(collection, contentDir, logger);
|
|
447
444
|
store.set(collection.id, sidebar);
|
|
448
445
|
}
|
|
449
446
|
return store;
|
|
450
447
|
}
|
|
451
448
|
/** @visibleForTesting */
|
|
452
|
-
async function processCollection(collection, contentDir) {
|
|
449
|
+
async function processCollection(collection, contentDir, logger) {
|
|
453
450
|
const items = [];
|
|
454
|
-
for (const item of collection.items) items.push(await processItem(item, contentDir));
|
|
451
|
+
for (const item of collection.items) items.push(await processItem(item, contentDir, logger));
|
|
455
452
|
const defaultLink = resolveDefaultLink(items, collection.defaultLink);
|
|
456
453
|
if (!defaultLink) throw new PrestigeError(`No default link found in collection, it means there are no links in the collection. Please define one in ${collection.id}`);
|
|
457
454
|
return {
|
|
@@ -461,19 +458,19 @@ async function processCollection(collection, contentDir) {
|
|
|
461
458
|
};
|
|
462
459
|
}
|
|
463
460
|
/** @visibleForTesting */
|
|
464
|
-
async function processItem(item, contentDir) {
|
|
461
|
+
async function processItem(item, contentDir, logger) {
|
|
465
462
|
if (typeof item === "string" || "slug" in item) return resolveInternalSidebarLink(item, contentDir);
|
|
466
463
|
else if ("link" in item) return resolveSidebarLink(item, contentDir);
|
|
467
|
-
else return resolveSidebarGroup(item, contentDir);
|
|
464
|
+
else return resolveSidebarGroup(item, contentDir, logger);
|
|
468
465
|
}
|
|
469
466
|
/** @visibleForTesting */
|
|
470
|
-
async function resolveSidebarGroup(group, contentDir) {
|
|
467
|
+
async function resolveSidebarGroup(group, contentDir, logger) {
|
|
471
468
|
const label = await resolveLabel(group, contentDir);
|
|
472
469
|
const items = [];
|
|
473
|
-
if (group.items?.length && group.autogenerate)
|
|
474
|
-
if (group.items) for (const childItem of group.items) items.push(await processItem(childItem, contentDir));
|
|
470
|
+
if (group.items?.length && group.autogenerate) logger.warn(`${group.label} has both items and autogenerate. Only items will be used.`);
|
|
471
|
+
if (group.items) for (const childItem of group.items) items.push(await processItem(childItem, contentDir, logger));
|
|
475
472
|
else if (group.autogenerate?.directory) {
|
|
476
|
-
const generatedItems = await autogenerateSidebar(group.autogenerate.directory, contentDir);
|
|
473
|
+
const generatedItems = await autogenerateSidebar(group.autogenerate.directory, contentDir, logger);
|
|
477
474
|
items.push(...generatedItems);
|
|
478
475
|
}
|
|
479
476
|
return {
|
|
@@ -504,12 +501,12 @@ async function resolveSidebarLink(item, contentDir) {
|
|
|
504
501
|
};
|
|
505
502
|
}
|
|
506
503
|
/** @visibleForTesting */
|
|
507
|
-
async function autogenerateSidebar(directory, contentDir) {
|
|
504
|
+
async function autogenerateSidebar(directory, contentDir, logger) {
|
|
508
505
|
const fileExtRegex = /\.mdx?$/i;
|
|
509
506
|
const items = [];
|
|
510
507
|
const dirPath = join(contentDir, directory);
|
|
511
508
|
if (!await pathExists(dirPath)) {
|
|
512
|
-
|
|
509
|
+
logger.warn(`Directory doesn't exist: ${directory}`);
|
|
513
510
|
return [];
|
|
514
511
|
}
|
|
515
512
|
const dirents = await readdir(dirPath, { withFileTypes: true });
|
|
@@ -520,7 +517,7 @@ async function autogenerateSidebar(directory, contentDir) {
|
|
|
520
517
|
label: dirent.name,
|
|
521
518
|
autogenerate: { directory: subDir }
|
|
522
519
|
};
|
|
523
|
-
items.push(await resolveSidebarGroup(group, contentDir));
|
|
520
|
+
items.push(await resolveSidebarGroup(group, contentDir, logger));
|
|
524
521
|
} else if (dirent.isFile() && fileExtRegex.test(dirent.name)) {
|
|
525
522
|
const slug = join(directory, dirent.name).replace(fileExtRegex, "");
|
|
526
523
|
items.push(await resolveInternalSidebarLink(slug, contentDir));
|
|
@@ -557,7 +554,7 @@ function resolveLink(item) {
|
|
|
557
554
|
|
|
558
555
|
//#endregion
|
|
559
556
|
//#region src/vite/content/router-compiler.ts
|
|
560
|
-
async function compileRoutes(linksMap, routesDir) {
|
|
557
|
+
async function compileRoutes(linksMap, routesDir, logger) {
|
|
561
558
|
const prestigeFullPath = join$1(routesDir, "(prestige)");
|
|
562
559
|
try {
|
|
563
560
|
await mkdir(prestigeFullPath, { recursive: true });
|
|
@@ -577,7 +574,7 @@ async function compileRoutes(linksMap, routesDir) {
|
|
|
577
574
|
try {
|
|
578
575
|
if (await readFile(filePath, "utf-8") === contents) return;
|
|
579
576
|
} catch (e) {}
|
|
580
|
-
|
|
577
|
+
logger.info(`Writing route file: ${fileName}`);
|
|
581
578
|
return writeFile(filePath, contents);
|
|
582
579
|
}));
|
|
583
580
|
const existingFiles = await readdir(prestigeFullPath);
|
|
@@ -585,11 +582,11 @@ async function compileRoutes(linksMap, routesDir) {
|
|
|
585
582
|
const staleHeadFiles = staleLazyFiles.map((fileName) => fileName.replace(".lazy.tsx", ".tsx")).filter((fileName) => existingFiles.includes(fileName) && !generatedFiles.has(fileName));
|
|
586
583
|
const staleFiles = [...new Set([...staleLazyFiles, ...staleHeadFiles])];
|
|
587
584
|
await Promise.all(staleFiles.map((fileName) => {
|
|
588
|
-
|
|
585
|
+
logger.debug(`Removing stale route file: ${fileName}`);
|
|
589
586
|
return unlink(join$1(prestigeFullPath, fileName));
|
|
590
587
|
}));
|
|
591
588
|
} catch (error) {
|
|
592
|
-
|
|
589
|
+
logger.error(`[Prestige Router Compiler] Failed to compile routes: ${error}`);
|
|
593
590
|
console.error("[Prestige Router Compiler] Failed to compile routes:", error);
|
|
594
591
|
}
|
|
595
592
|
}
|
|
@@ -650,6 +647,34 @@ function resolveCollectionNavigations(inlineCollections, linksMap) {
|
|
|
650
647
|
return genExportDefault(genArrayFromRaw(collections.filter((c) => c.defaultLink).map((c) => genObjectFromValues(c))));
|
|
651
648
|
}
|
|
652
649
|
|
|
650
|
+
//#endregion
|
|
651
|
+
//#region src/vite/utils/logger.ts
|
|
652
|
+
function createLogger(config) {
|
|
653
|
+
function formatLogArgs(message) {
|
|
654
|
+
const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", {
|
|
655
|
+
hour12: true,
|
|
656
|
+
hour: "2-digit",
|
|
657
|
+
minute: "2-digit",
|
|
658
|
+
second: "2-digit"
|
|
659
|
+
});
|
|
660
|
+
return `${pc.dim(timestamp)} ${pc.bold(pc.cyan("[prestige]"))} ${message}`;
|
|
661
|
+
}
|
|
662
|
+
return {
|
|
663
|
+
debug: (message) => {
|
|
664
|
+
if (!config.disabled && config.debug) console.debug(formatLogArgs(pc.gray(message)));
|
|
665
|
+
},
|
|
666
|
+
info: (message) => {
|
|
667
|
+
if (!config.disabled) console.info(formatLogArgs(pc.reset(message)));
|
|
668
|
+
},
|
|
669
|
+
warn: (message) => {
|
|
670
|
+
if (!config.disabled) console.warn(formatLogArgs(pc.yellow(message)));
|
|
671
|
+
},
|
|
672
|
+
error: (message) => {
|
|
673
|
+
if (!config.disabled) console.error(formatLogArgs(pc.red(message)));
|
|
674
|
+
}
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
|
|
653
678
|
//#endregion
|
|
654
679
|
//#region src/vite/content/content-watcher.ts
|
|
655
680
|
function initContentWatcher(contentDir, onUpdate) {
|
|
@@ -678,25 +703,29 @@ function prestige(inlineConfig) {
|
|
|
678
703
|
let linksMap;
|
|
679
704
|
let collectionNavigations;
|
|
680
705
|
let sidebarsMap;
|
|
706
|
+
let logger;
|
|
681
707
|
return {
|
|
682
708
|
name: "vite-plugin-prestige",
|
|
683
709
|
enforce: "pre",
|
|
684
710
|
async configResolved(resolvedConfig) {
|
|
685
|
-
logger_default.info("Resolving Prestige configuration...", { timestamp: true });
|
|
686
711
|
const { config: loadedConfig } = await resolvePrestigeConfig(inlineConfig, resolvedConfig.root);
|
|
687
712
|
config = loadedConfig;
|
|
713
|
+
logger = createLogger({
|
|
714
|
+
disabled: config.disableLog,
|
|
715
|
+
debug: config.enableDebugLog
|
|
716
|
+
});
|
|
688
717
|
contentDir = join(resolvedConfig.root, "src/content");
|
|
689
718
|
isDocsMatcher = picomatch(join(contentDir, "**/*.{md,mdx}"));
|
|
690
719
|
collections = config.collections ?? [];
|
|
691
|
-
|
|
692
|
-
sidebarsMap = await resolveSidebars(collections, contentDir);
|
|
693
|
-
|
|
720
|
+
logger.debug("Resolving sidebars...");
|
|
721
|
+
sidebarsMap = await resolveSidebars(collections, contentDir, logger);
|
|
722
|
+
logger.debug("Resolving content links...");
|
|
694
723
|
linksMap = resolveContentLinks(sidebarsMap);
|
|
695
|
-
|
|
724
|
+
logger.debug("Resolving collection navigations....");
|
|
696
725
|
collectionNavigations = resolveCollectionNavigations(collections, linksMap);
|
|
697
726
|
const routesDir = join(resolvedConfig.root, "src", "routes");
|
|
698
|
-
|
|
699
|
-
await compileRoutes(linksMap, routesDir);
|
|
727
|
+
logger.debug("Compiling routes...");
|
|
728
|
+
await compileRoutes(linksMap, routesDir, logger);
|
|
700
729
|
},
|
|
701
730
|
configureServer(server) {
|
|
702
731
|
const contentWatcher = initContentWatcher(contentDir, () => {
|
|
@@ -708,38 +737,38 @@ function prestige(inlineConfig) {
|
|
|
708
737
|
},
|
|
709
738
|
resolveId(id) {
|
|
710
739
|
if (id.includes(CONFIG_VIRTUAL_ID)) {
|
|
711
|
-
|
|
740
|
+
logger.debug(`Resolving config virtual ID: ${id}`);
|
|
712
741
|
return extractVirtualId(id, CONFIG_VIRTUAL_ID);
|
|
713
742
|
}
|
|
714
743
|
if (id.includes(CONTENT_VIRTUAL_ID)) {
|
|
715
|
-
|
|
744
|
+
logger.debug(`Resolving content virtual ID: ${id}`);
|
|
716
745
|
return extractVirtualId(id, CONTENT_VIRTUAL_ID);
|
|
717
746
|
}
|
|
718
747
|
if (id.includes(COLLECTION_VIRTUAL_ID)) {
|
|
719
|
-
|
|
748
|
+
logger.debug(`Resolving collection virtual ID: ${id}`);
|
|
720
749
|
return extractVirtualId(id, COLLECTION_VIRTUAL_ID);
|
|
721
750
|
}
|
|
722
751
|
if (id.includes(SIDEBAR_VIRTUAL_ID)) {
|
|
723
|
-
|
|
752
|
+
logger.debug(`Resolving sidebar virtual ID: ${id}`);
|
|
724
753
|
return extractVirtualId(id, SIDEBAR_VIRTUAL_ID);
|
|
725
754
|
}
|
|
726
755
|
return null;
|
|
727
756
|
},
|
|
728
757
|
async load(id) {
|
|
729
758
|
if (id === `\0${CONFIG_VIRTUAL_ID}`) {
|
|
730
|
-
|
|
759
|
+
logger.debug(`Loading config virtual module: ${id}`);
|
|
731
760
|
return genExportDefault(JSON.stringify(config));
|
|
732
761
|
}
|
|
733
762
|
if (id.includes(CONTENT_VIRTUAL_ID)) {
|
|
734
|
-
|
|
763
|
+
logger.debug(`Loading content virtual module: ${id}`);
|
|
735
764
|
return await resolveContent(id, linksMap, contentDir);
|
|
736
765
|
}
|
|
737
766
|
if (id.includes(COLLECTION_VIRTUAL_ID)) {
|
|
738
|
-
|
|
767
|
+
logger.debug(`Loading collection virtual module: ${id}`);
|
|
739
768
|
return collectionNavigations;
|
|
740
769
|
}
|
|
741
770
|
if (id.includes(SIDEBAR_VIRTUAL_ID)) {
|
|
742
|
-
|
|
771
|
+
logger.debug(`Loading sidebar virtual module: ${id}`);
|
|
743
772
|
const sidebarId = id.replace(SIDEBAR_VIRTUAL_ID, "").replace("\0", "");
|
|
744
773
|
const sidebar = sidebarsMap.get(sidebarId);
|
|
745
774
|
if (!sidebar) return genExportUndefined();
|
|
@@ -749,13 +778,13 @@ function prestige(inlineConfig) {
|
|
|
749
778
|
},
|
|
750
779
|
async hotUpdate({ file, timestamp, type }) {
|
|
751
780
|
if (type !== "update" || !isDocsMatcher(file)) return;
|
|
752
|
-
|
|
781
|
+
logger.debug(`Invalidating module ${file}...`);
|
|
753
782
|
const invalidatedModules = /* @__PURE__ */ new Set();
|
|
754
783
|
const virtualModuleId = `\0${CONTENT_VIRTUAL_ID}${getSlugByPath(file, contentDir)}`;
|
|
755
784
|
const module = this.environment.moduleGraph.getModuleById(virtualModuleId);
|
|
756
785
|
if (module) {
|
|
757
786
|
this.environment.moduleGraph.invalidateModule(module, invalidatedModules, timestamp, true);
|
|
758
|
-
|
|
787
|
+
logger.debug(`Reloading application...`);
|
|
759
788
|
this.environment.hot.send({ type: "full-reload" });
|
|
760
789
|
}
|
|
761
790
|
}
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","names":["CollectionGroupSchema: z.ZodType<CollectionGroup, CollectionGroup>","CollectionItemSchema: z.ZodType<CollectionItem, CollectionItem>","sidebarLinks: SidebarLinkType[]","processItem","data","typeMap: Record<\"note\" | \"tip\" | \"caution\" | \"danger\", string>","titleChildren: any[]","toc: TocItem[]","prev: SiblingNavigationType | undefined","next: SiblingNavigationType | undefined","join","navigation: Record<string, NavigationLinks>","items: SidebarItemType[]","group: CollectionGroup","join","collections: CollectionNavigation[]","config: PrestigeConfig","contentDir: string","isDocsMatcher: Matcher","collections: Collections","linksMap: Map<string, SidebarLinkType[]>","collectionNavigations: string","sidebarsMap: Map<string, SidebarType>"],"sources":["../src/vite/utils/errors.ts","../src/vite/core/content/content.types.ts","../src/vite/config/config.types.ts","../src/vite/utils/file-utils.ts","../src/vite/config/config.ts","../src/vite/content/content-links.ts","../src/vite/utils/logger.ts","../src/vite/content/content-compiler.ts","../src/vite/content/content.store.ts","../src/vite/content/content-sidebar.store.ts","../src/vite/content/router-compiler.ts","../src/vite/utils/code-generation.ts","../src/vite/core/content/content-collection.store.ts","../src/vite/content/content-watcher.ts","../src/vite/plugin.ts"],"sourcesContent":["import { type ZodType, input } from \"zod\";\n\nexport class PrestigeError extends Error {}\n\n/**\n * Parse data with zod schema and if fails throw PrestigeError that is friendly error\n * for prestige ecosystem\n */\nexport function parseWithFriendlyErrors<T extends ZodType>(s: T, input: input<T>, message: string) {\n try {\n return s.parse(input);\n } catch (e) {\n if (e instanceof Error) {\n throw new PrestigeError(`Prestige error cause: ${message}, with error: ${e.message} `);\n } else {\n throw new PrestigeError(`Prestige error cause: ${message} `);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const ContentFrontmatterSchema = z.object({\n title: z.string().describe(\"The title of the article\"),\n description: z.string().optional().describe(\"The description of the article\"),\n label: z.string().optional().describe(\"The label of the content\"),\n});\n\nexport type ContentFrontmatterType = z.infer<typeof ContentFrontmatterSchema>;\n\nexport const ContentSchema = z.object({\n matter: ContentFrontmatterSchema,\n html: z.string().describe(\"The html of the content\"),\n});\n\nexport type ContentType = z.infer<typeof ContentSchema>;\n\nconst InternalCollectionLinkSchema = z.union([\n z.object({\n label: z.string(),\n slug: z.string(),\n }),\n z.string(),\n]);\n\nconst ExternalCollectionLinkSchema = z.object({\n label: z.string(),\n link: z.string(),\n});\n\nexport type ExternalCollectionLink = z.infer<\n typeof ExternalCollectionLinkSchema\n>;\n\nexport type InternalCollectionLink = z.infer<\n typeof InternalCollectionLinkSchema\n>;\n\nexport type CollectionGroup = {\n label: string;\n items?: CollectionItem[] | undefined;\n collapsed?: boolean | undefined;\n autogenerate?: { directory: string } | undefined;\n};\n\nexport type CollectionItem =\n | InternalCollectionLink\n | CollectionGroup\n | ExternalCollectionLink;\n\nconst CollectionGroupSchema: z.ZodType<CollectionGroup, CollectionGroup> =\n z.object({\n label: z.string(),\n items: z.lazy(() => z.array(CollectionItemSchema)).optional(),\n collapsed: z.boolean().optional(),\n autogenerate: z\n .object({\n directory: z.string(),\n })\n .optional(),\n });\n\nconst CollectionItemSchema: z.ZodType<CollectionItem, CollectionItem> = z.union(\n [\n ExternalCollectionLinkSchema,\n InternalCollectionLinkSchema,\n z.lazy(() => CollectionGroupSchema),\n ],\n);\n\nexport const CollectionSchema = z.object({\n id: z\n .string()\n .min(1, { message: \"Folder name cannot be empty\" })\n .max(50, { message: \"Folder name too long\" })\n // Allows alphanumeric, hyphens, and underscores\n .regex(/^[a-zA-Z0-9-_]+$/, {\n message: \"Only alphanumeric, hyphens, and underscores allowed\",\n })\n .describe(\"The id of the collection, must match the folder name\"),\n items: z.array(CollectionItemSchema),\n label: z.string().optional().describe(\"The label of the collection\"),\n defaultLink: z\n .string()\n .optional()\n .describe(\"The default link of the collection\"),\n});\n\nexport type Collection = z.infer<typeof CollectionSchema>;\n\nexport type CollectionNavigation = {\n id: string;\n label: string;\n defaultLink?: string;\n};\n\nexport type CollectionInput = z.input<typeof CollectionSchema>;\n\nexport const CollectionsSchema = z.array(CollectionSchema);\n\nexport type Collections = z.infer<typeof CollectionsSchema>;\n\nexport interface InternalSidebarLinkType {\n slug: string;\n label: string;\n}\n\nexport interface ExternalSidebarLinkType {\n label: string;\n link: string;\n}\n\nexport type SidebarLinkType = InternalSidebarLinkType | ExternalSidebarLinkType;\n\nexport interface SidebarGroupType {\n label: string;\n items: SidebarItemType[];\n collapsed?: boolean | undefined;\n}\n\nexport type SidebarItemType =\n | InternalSidebarLinkType\n | SidebarGroupType\n | ExternalSidebarLinkType;\n\nexport interface SidebarType {\n items: SidebarItemType[];\n defaultLink: string;\n navigation: Record<string, NavigationLinks>;\n}\n\nexport interface SiblingNavigationType {\n label: string;\n link: string;\n}\n\nexport interface NavigationLinks {\n prev: SiblingNavigationType | null | undefined;\n next: SiblingNavigationType | null | undefined;\n}\n","import { FlexibleTocOptions } from \"remark-flexible-toc\";\nimport type { Options as RemarkGfmOptions } from \"remark-gfm\";\nimport { PluggableList } from \"unified\";\nimport { z } from \"zod\";\nimport { CollectionsSchema } from \"../core/content/content.types\";\n\nexport const PrestigeConfigSchema = z.object({\n title: z.string().describe(\"Title of the website\"),\n github: z.string().optional().describe(\"Github repo\"),\n algolia: z\n .object({\n appId: z.string().describe(\"Algolia app id\"),\n apiKey: z.string().describe(\"Algolia api key\"),\n indices: z.array(z.string()).describe(\"Algolia indices\"),\n })\n .optional()\n .describe(\"Algolia options\"),\n license: z\n .object({\n label: z.string().describe(\"License label\"),\n url: z.string().describe(\"License url\"),\n })\n .optional()\n .describe(\"License options\"),\n collections: CollectionsSchema,\n markdown: z\n .object({\n gfmOptions: z\n .custom<RemarkGfmOptions>()\n .optional()\n .describe(\"Options for remark-gfm\"),\n rehypePlugins: z\n .custom<PluggableList>()\n .optional()\n .describe(\"Additional rehype plugins\"),\n remarkPlugins: z\n .custom<PluggableList>()\n .optional()\n .describe(\"Additional remark plugins\"),\n remarkFlexibleToc: z\n .custom<FlexibleTocOptions>()\n .optional()\n .describe(\"Options for remark-flexible-toc\"),\n rehypeSlug: z\n .custom<{\n prefix?: string;\n }>()\n .optional()\n .describe(\"Options for rehype-slug\"),\n })\n .optional()\n .describe(\"Markdown options, configure how markdown is parsed\"),\n});\n\nexport type PrestigeConfigInput = z.input<typeof PrestigeConfigSchema>;\nexport type PrestigeConfig = z.infer<typeof PrestigeConfigSchema>;\n","import { mkdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"pathe\";\n\nexport async function pathExists(path: string) {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensureDir(dirPath: string) {\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function outputFile(\n filePath: string,\n data: string | NodeJS.ArrayBufferView,\n) {\n const dir = dirname(filePath);\n\n // recursive: true won't throw if the dir already exists\n await mkdir(dir, { recursive: true });\n await writeFile(filePath, data);\n}\n\nexport async function rmSafe(path: string) {\n try {\n await rm(path, { recursive: true, force: true });\n return true;\n } catch {\n return false;\n }\n}\n\n// Helper function to extract the virtual ID from a messy path\nexport function extractVirtualId(fullId: string, virtualPrefix: string) {\n const startIndex = fullId.indexOf(virtualPrefix);\n if (startIndex !== -1) {\n // Slice from the start of the virtual prefix to the end of the string\n return \"\\0\" + fullId.slice(startIndex);\n }\n return null;\n}\n","import { parseWithFriendlyErrors, PrestigeError } from \"../utils/errors\";\nimport { PrestigeConfigInput, PrestigeConfigSchema } from \"./config.types\";\nimport { join } from \"pathe\";\nimport { pathExists } from \"../utils/file-utils\";\n\nexport function validateConfig(config: PrestigeConfigInput) {\n return parseWithFriendlyErrors(PrestigeConfigSchema, config, \"Invalid schema\");\n}\n\nexport async function resolvePrestigeConfig(\n configInput: PrestigeConfigInput | undefined,\n root: string,\n) {\n if (!configInput) {\n throw new PrestigeError(\"Prestige config is required\");\n }\n\n const validatedConfig = validateConfig(configInput);\n const docsDirPath = join(root, \"src/content\");\n\n if (!(await pathExists(docsDirPath))) {\n throw new PrestigeError(`Docs! directory not found: ${docsDirPath}`);\n }\n\n return { config: validatedConfig, fullDocsDir: docsDirPath };\n}\n","import { SidebarLinkType, SidebarItemType, SidebarType } from \"../core/content/content.types\";\n\nexport function resolveContentLinks(sidebars: Map<string, SidebarType>) {\n const links = new Map<string, SidebarLinkType[]>();\n for (const [key, sidebar] of sidebars) {\n const sidebarLinks: SidebarLinkType[] = [];\n for (const item of sidebar.items) {\n processItem(item, sidebarLinks);\n }\n links.set(key, sidebarLinks);\n }\n return links;\n}\n\nfunction processItem(item: SidebarItemType, links: SidebarLinkType[] = []) {\n if (\"slug\" in item || \"link\" in item) {\n links.push(item);\n } else if (\"items\" in item) {\n for (const childItem of item.items) {\n processItem(childItem, links);\n }\n }\n return links;\n}\n","import { createLogger } from \"vite\";\nconst logger = createLogger(undefined, { prefix: \"[Prestige]\" });\nexport default logger;\n","import { compile } from \"@mdx-js/mdx\";\nimport rehypePrism from \"rehype-prism-plus\";\nimport rehypeSlug from \"rehype-slug\";\nimport remarkDirective from \"remark-directive\";\nimport remarkFlexibleToc, { TocItem } from \"remark-flexible-toc\";\nimport remarkFrontmatter from \"remark-frontmatter\";\nimport remarkGfm from \"remark-gfm\";\nimport { PluggableList } from \"unified\";\nimport { Compatible, VFile } from \"vfile\";\nimport matter from \"gray-matter\";\nimport { PrestigeConfig } from \"../config/config.types\";\n\nimport { h } from \"hastscript\";\nimport type { Node } from \"unist\";\nimport { visit } from \"unist-util-visit\";\n\nexport default function remarkAdmonitions() {\n return (tree: Node) => {\n visit(tree, (node: any) => {\n if (\n node.type === \"textDirective\" ||\n node.type === \"leafDirective\" ||\n node.type === \"containerDirective\"\n ) {\n if (node.type !== \"containerDirective\") {\n const data = node.data || (node.data = {});\n const hast = h(node.type === \"textDirective\" ? \"span\" : \"aside\", {\n className: [\"admonition\", `admonition-${node.name}`],\n ...node.attributes,\n });\n data.hName = hast.tagName;\n data.hProperties = hast.properties;\n return;\n }\n\n const type = [\"note\", \"tip\", \"caution\", \"danger\"].includes(node.name)\n ? node.name\n : \"note\";\n\n const typeMap: Record<\"note\" | \"tip\" | \"caution\" | \"danger\", string> = {\n note: \"bg-blue-50/50 dark:bg-blue-900/20 border-blue-500 text-blue-900 dark:text-blue-200\",\n tip: \"bg-purple-50/50 dark:bg-purple-900/20 border-purple-500 text-purple-900 dark:text-purple-200\",\n caution:\n \"bg-yellow-50/50 dark:bg-yellow-900/20 border-yellow-500 text-yellow-900 dark:text-yellow-200\",\n danger:\n \"bg-red-50/50 dark:bg-red-900/20 border-red-500 text-red-900 dark:text-red-200\",\n };\n\n const data = node.data || (node.data = {});\n data.hName = \"aside\";\n data.hProperties = {\n \"aria-label\": type.charAt(0).toUpperCase() + type.slice(1),\n className: [\n \"relative\",\n \"my-6\",\n \"px-4\",\n \"py-3\",\n \"border-l-4\",\n \"rounded-lg\",\n ...(typeMap[type as keyof typeof typeMap] || typeMap[\"note\"]).split(\n \" \",\n ),\n ],\n ...node.attributes,\n };\n\n let titleNodeIndex = node.children.findIndex(\n (c: any) => c.data?.directiveLabel,\n );\n let titleChildren: any[];\n\n if (titleNodeIndex !== -1) {\n titleChildren = node.children[titleNodeIndex].children;\n node.children.splice(titleNodeIndex, 1);\n } else {\n titleChildren = [\n {\n type: \"text\",\n value: type.charAt(0).toUpperCase() + type.slice(1),\n },\n ];\n }\n\n const getIconHast = (t: string) => {\n const props = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: [\"w-5\", \"h-5\", \"flex-shrink-0\"],\n };\n if (t === \"note\")\n return h(\"svg\", props, [\n h(\"circle\", { cx: \"12\", cy: \"12\", r: \"10\" }),\n h(\"path\", { d: \"M12 16v-4\" }),\n h(\"path\", { d: \"M12 8h.01\" }),\n ]);\n if (t === \"tip\")\n return h(\"svg\", props, [\n h(\"path\", {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\",\n }),\n h(\"path\", {\n d: \"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\",\n }),\n h(\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" }),\n h(\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" }),\n ]);\n if (t === \"caution\")\n return h(\"svg\", props, [\n h(\"path\", {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\",\n }),\n h(\"path\", { d: \"M12 9v4\" }),\n h(\"path\", { d: \"M12 17h.01\" }),\n ]);\n if (t === \"danger\")\n return h(\"svg\", props, [\n h(\"polygon\", {\n points:\n \"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\",\n }),\n h(\"path\", { d: \"M12 8v4\" }),\n h(\"path\", { d: \"M12 16h.01\" }),\n ]);\n return null;\n };\n\n const titleBlock = {\n type: \"paragraph\",\n data: {\n hName: \"p\",\n hProperties: {\n className: [\n \"flex\",\n \"items-center\",\n \"gap-2\",\n \"mb-2\",\n \"mt-0\",\n \"font-bold\",\n \"text-lg\",\n ],\n },\n },\n children: [\n {\n type: \"text\",\n value: \"\",\n data: { hName: \"span\", hChildren: [getIconHast(type)] },\n },\n ...titleChildren,\n ],\n };\n\n const contentBlock = {\n type: \"paragraph\",\n data: {\n hName: \"section\",\n hProperties: {\n className: [\n \"[&>p]:mt-0\",\n \"[&>p]:mb-2\",\n \"[&>p:last-child]:mb-0\",\n ],\n },\n },\n children: node.children,\n };\n\n node.children = [titleBlock, contentBlock];\n }\n });\n };\n}\n\nexport function rehypeAddNotProseToPre() {\n return (tree: Node) => {\n visit(tree, (node: any) => {\n // Look specifically for HTML elements that are <pre> tags\n if (node.type === \"element\" && node.tagName === \"pre\") {\n node.properties = node.properties || {};\n\n // HAST classNames are generally arrays of strings\n const currentClass = node.properties.className || [];\n node.properties.className = Array.isArray(currentClass)\n ? [...currentClass, \"not-prose\"]\n : [currentClass, \"not-prose\"];\n }\n });\n };\n}\n\nexport async function compileMarkdown(\n content: Readonly<Compatible>,\n baseUrl: string,\n options?: PrestigeConfig[\"markdown\"],\n) {\n const toc: TocItem[] = [];\n\n const rehypePlugins: PluggableList = [\n ...(options?.rehypePlugins ?? []),\n rehypeSlug,\n [rehypePrism, { options: { showLineNumbers: false } }],\n rehypeAddNotProseToPre,\n ];\n\n const remarkPlugins: PluggableList = [\n ...(options?.remarkPlugins ?? []),\n remarkFrontmatter,\n [remarkGfm, options?.gfmOptions || {}],\n remarkDirective,\n remarkAdmonitions,\n [remarkFlexibleToc, { tocRef: toc }],\n ];\n\n const code = await compile(content, {\n outputFormat: \"program\",\n rehypePlugins,\n remarkPlugins,\n baseUrl: baseUrl,\n });\n return { code: String(code), toc };\n}\n\nexport async function compileFrontmatter(vFile: VFile) {\n const result = matter(String(vFile.value));\n return result.data || {};\n}\n\nexport function warmupCompiler(options?: PrestigeConfig[\"markdown\"]) {\n compileMarkdown(\"```js\\n```\", \"http://localhost\", options).catch(() => {});\n}\n","import { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { parse, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\nimport { read } from \"to-vfile\";\nimport {\n SiblingNavigationType,\n SidebarLinkType,\n} from \"../core/content/content.types\";\nimport { compileMarkdown } from \"./content-compiler\";\n\nimport { PrestigeError } from \"../utils/errors\";\nimport { compileFrontmatter } from \"./content-compiler\";\n\nexport const CONTENT_VIRTUAL_ID = \"virtual:prestige/content/\";\n\nfunction getSiblingLink(\n link: SidebarLinkType | undefined,\n): SiblingNavigationType | undefined {\n if (!link) {\n return undefined;\n }\n return {\n label: link.label,\n link: \"slug\" in link ? link.slug : link.link,\n };\n}\n\nexport function resolveSiblings(\n base: string,\n slug: string,\n linksMap: Map<string, SidebarLinkType[]>,\n) {\n const links = linksMap.get(base);\n if (!links?.length) {\n return { prev: undefined, next: undefined };\n }\n\n const validLinks = links.filter((l) => {\n if (\"slug\" in l) return true;\n if (\"link\" in l) {\n return !l.link.startsWith(\"http://\") && !l.link.startsWith(\"https://\");\n }\n return false;\n });\n\n const linkIndex = validLinks.findIndex((link) => {\n return (\n (\"slug\" in link && link.slug === slug) ||\n (\"link\" in link && link.link === slug)\n );\n });\n\n let prev: SiblingNavigationType | undefined;\n let next: SiblingNavigationType | undefined;\n\n if (linkIndex !== -1) {\n if (linkIndex > 0) {\n prev = getSiblingLink(validLinks[linkIndex - 1]);\n }\n if (linkIndex < validLinks.length - 1) {\n next = getSiblingLink(validLinks[linkIndex + 1]);\n }\n }\n\n return { prev, next };\n}\n\nexport async function resolveMarkdown(slug: string, contentDir: string) {\n const filePath = await getPathBySlug(slug, contentDir);\n const baseUrl = pathToFileURL(filePath).href;\n const file = await read(filePath);\n const frontmatter = await compileFrontmatter(file);\n const { code, toc } = await compileMarkdown(file, baseUrl);\n return { code, toc, frontmatter };\n}\n\nexport async function resolveContent(\n id: string,\n linksMap: Map<string, SidebarLinkType[]>,\n contentDir: string,\n) {\n const slug = id.replace(CONTENT_VIRTUAL_ID, \"\").replace(\"\\0\", \"\");\n const base = slug.split(\"/\")[0] as string;\n\n const { prev, next } = resolveSiblings(base, slug, linksMap);\n const { toc, code, frontmatter } = await resolveMarkdown(slug, contentDir);\n let resolvedCode = code;\n\n resolvedCode += `\\n export const toc = ${JSON.stringify(toc)}\\n`;\n resolvedCode += `\\n export const prev = ${JSON.stringify(prev)}\\n`;\n resolvedCode += `\\n export const next = ${JSON.stringify(next)}\\n`;\n resolvedCode += `\\n export const frontmatter = ${JSON.stringify(\n frontmatter,\n )}\\n`;\n return resolvedCode;\n}\n\nexport async function getPathBySlug(slug: string, contentDir: string) {\n const pathMatch = join(contentDir, slug);\n const matches = await glob(`${pathMatch}.{md,mdx}`);\n if (matches.length === 0) {\n throw new PrestigeError(\n `[Prestige] Could not find markdown file for slug: \"${slug}\". Searched at: ${pathMatch}.{md,mdx}. If you want to link to a custom page, use 'link: \"${slug}\"' instead of 'slug: \"${slug}\"' in your collection config.`,\n );\n }\n return matches[0] as string;\n}\n\nexport async function getFileBySlug(slug: string, contentDir: string) {\n return await read(await getPathBySlug(slug, contentDir));\n}\n\nexport function getVirtualModuleIdsForFile(path: string, contentDir: string) {\n const slug = getSlugByPath(path, contentDir);\n return [\"\\0\" + CONTENT_VIRTUAL_ID + slug];\n}\n\nexport function getSlugByPath(path: string, contentDir: string) {\n // 1. Get the relative path: \"zz/zz/myFile.json\"\n const relativePath = relative(contentDir, path);\n\n // 2. Parse the path to separate the extension\n const pathInfo = parse(relativePath);\n\n const result = join(pathInfo.dir, pathInfo.name);\n\n return result;\n}\n","import { readdir } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { join } from \"pathe\";\nimport {\n Collection,\n CollectionGroup,\n CollectionItem,\n Collections,\n ExternalSidebarLinkType,\n InternalCollectionLink,\n InternalSidebarLinkType,\n NavigationLinks,\n SiblingNavigationType,\n SidebarGroupType,\n SidebarItemType,\n SidebarType,\n} from \"../core/content/content.types\";\nimport { PrestigeError } from \"../utils/errors\";\nimport { pathExists } from \"../utils/file-utils\";\nimport logger from \"../utils/logger\";\nimport { compileFrontmatter } from \"./content-compiler\";\nimport { getFileBySlug } from \"./content.store\";\n\nexport const SIDEBAR_VIRTUAL_ID = \"virtual:prestige/sidebar/\";\n\nfunction flattenSidebar(items: SidebarItemType[]): SiblingNavigationType[] {\n return items.flatMap((item) => {\n if (\"slug\" in item) {\n return [{ label: item.label, link: `/${item.slug}` }];\n }\n if (\"link\" in item) {\n // Ignore external links\n if (item.link.startsWith(\"http://\") || item.link.startsWith(\"https://\")) {\n return [];\n }\n return [{ label: item.label, link: item.link }];\n }\n if (\"items\" in item) {\n return flattenSidebar(item.items);\n }\n return [];\n });\n}\n\nfunction computeNavigation(\n items: SidebarItemType[],\n): Record<string, NavigationLinks> {\n const flattenedLinks = flattenSidebar(items);\n const navigation: Record<string, NavigationLinks> = {};\n\n for (let i = 0; i < flattenedLinks.length; i++) {\n const link = flattenedLinks[i];\n if (link) {\n navigation[link.link] = {\n prev: i > 0 ? flattenedLinks[i - 1] : null,\n next: i < flattenedLinks.length - 1 ? flattenedLinks[i + 1] : null,\n };\n }\n }\n\n return navigation;\n}\n\nfunction resolveDefaultLink(\n items: SidebarItemType[],\n defaultLink?: string,\n): string | undefined {\n if (defaultLink) {\n return defaultLink;\n }\n for (const item of items) {\n if (\"slug\" in item) {\n return item.slug;\n } else if (\"link\" in item) {\n return item.link;\n } else if (\"items\" in item && item.items.length > 0) {\n const link = resolveDefaultLink(item.items);\n if (link) return link;\n }\n }\n return undefined;\n}\n\nexport async function resolveSidebars(\n collections: Collections,\n contentDir: string,\n) {\n const store = new Map<string, SidebarType>();\n\n for (const collection of collections) {\n const sidebar = await processCollection(collection, contentDir);\n store.set(collection.id, sidebar);\n }\n return store;\n}\n\n/** @visibleForTesting */\nasync function processCollection(\n collection: Collection,\n contentDir: string,\n): Promise<SidebarType> {\n const items: SidebarItemType[] = [];\n for (const item of collection.items) {\n items.push(await processItem(item, contentDir));\n }\n const defaultLink = resolveDefaultLink(items, collection.defaultLink);\n if (!defaultLink) {\n throw new PrestigeError(\n `No default link found in collection, it means there are no links in the collection. Please define one in ${collection.id}`,\n );\n }\n return {\n items,\n defaultLink: defaultLink,\n navigation: computeNavigation(items),\n };\n}\n\n/** @visibleForTesting */\nasync function processItem(\n item: CollectionItem,\n contentDir: string,\n): Promise<SidebarItemType> {\n if (typeof item === \"string\" || \"slug\" in item) {\n return resolveInternalSidebarLink(\n item as InternalCollectionLink,\n contentDir,\n );\n } else if (\"link\" in item) {\n return resolveSidebarLink(item, contentDir);\n } else {\n return resolveSidebarGroup(item as CollectionGroup, contentDir);\n }\n}\n\n/** @visibleForTesting */\nasync function resolveSidebarGroup(\n group: CollectionGroup,\n contentDir: string,\n): Promise<SidebarGroupType> {\n const label = await resolveLabel(group, contentDir);\n const items: SidebarItemType[] = [];\n\n if (group.items?.length && group.autogenerate) {\n logger.warn(\n `${group.label} has both items and autogenerate. Only items will be used.`,\n );\n }\n\n if (group.items) {\n for (const childItem of group.items) {\n items.push(await processItem(childItem, contentDir));\n }\n } else if (group.autogenerate?.directory) {\n const generatedItems = await autogenerateSidebar(\n group.autogenerate.directory,\n contentDir,\n );\n items.push(...generatedItems);\n }\n\n return {\n label,\n collapsed: group.collapsed,\n items,\n };\n}\n\n/** @visibleForTesting */\nasync function resolveInternalSidebarLink(\n item: InternalCollectionLink,\n contentDir: string,\n): Promise<InternalSidebarLinkType> {\n const label = await resolveLabel(item, contentDir);\n const slug = resolveSlug(item);\n\n if (slug.startsWith(\"/\") || slug.endsWith(\"/\")) {\n throw new PrestigeError(\n `The slug ${slug} cannot start or end with a slash. Remove it and try again.`,\n );\n }\n\n if (!slug) {\n throw new PrestigeError(\n `The slug cannot be empty. Remove it and try again. link label is ${label}`,\n );\n }\n\n return {\n label,\n slug,\n };\n}\n\n/** @visibleForTesting */\nasync function resolveSidebarLink(\n item: ExternalSidebarLinkType,\n contentDir: string,\n): Promise<ExternalSidebarLinkType> {\n const label = await resolveLabel(item, contentDir);\n const link = resolveLink(item);\n\n if (!link) {\n throw new PrestigeError(\n `The link cannot be empty. Remove it and try again. link label is ${label}`,\n );\n }\n\n return {\n label,\n link,\n };\n}\n\n/** @visibleForTesting */\nasync function autogenerateSidebar(\n directory: string,\n contentDir: string,\n): Promise<SidebarItemType[]> {\n const fileExtRegex = /\\.mdx?$/i;\n\n const items: SidebarItemType[] = [];\n const dirPath = join(contentDir, directory);\n if (!(await pathExists(dirPath))) {\n logger.warn(`Directory doesn't exist: ${directory}`);\n return [];\n }\n\n const dirents = await readdir(dirPath, { withFileTypes: true });\n dirents.sort((a, b) => a.name.localeCompare(b.name));\n for (const dirent of dirents) {\n if (dirent.isDirectory()) {\n const subDir = join(directory, dirent.name);\n const group: CollectionGroup = {\n label: dirent.name,\n autogenerate: { directory: subDir },\n };\n items.push(await resolveSidebarGroup(group, contentDir));\n } else if (dirent.isFile() && fileExtRegex.test(dirent.name)) {\n const fullPath = join(directory, dirent.name);\n const slug = fullPath.replace(fileExtRegex, \"\");\n items.push(await resolveInternalSidebarLink(slug, contentDir));\n }\n }\n return items;\n}\n\n/** @visibleForTesting */\nasync function resolveLabel(\n item: CollectionItem,\n contentDir: string,\n): Promise<string> {\n if (typeof item !== \"string\" && \"label\" in item && item.label) {\n return item.label;\n }\n\n if (typeof item === \"string\" || \"slug\" in item) {\n const slug = resolveSlug(item);\n\n const file = await getFileBySlug(slug, contentDir);\n if (!file) {\n throw new PrestigeError(\n `markdown file not found with slug: ${slug} add one in content folder or update config`,\n );\n }\n const data = (await compileFrontmatter(file)) as any;\n if (data?.label) {\n return data?.label;\n }\n\n return basename(slug);\n }\n\n // is a group\n if (typeof item !== \"string\" && (\"items\" in item || \"autogenerate\" in item)) {\n return item.label;\n }\n\n return \"\";\n}\n\n/** @visibleForTesting */\nexport function resolveSlug(item: CollectionItem) {\n if (typeof item === \"string\") {\n return item;\n } else {\n if (\"slug\" in item) {\n return item.slug;\n }\n return \"\";\n }\n}\n\n/** @visibleForTesting */\nexport function resolveLink(item: CollectionItem) {\n if (typeof item === \"object\" && \"link\" in item) {\n return item.link;\n }\n return \"\";\n}\n","import { mkdir, readdir, readFile, unlink, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { SidebarLinkType } from \"../core/content/content.types\";\nimport logger from \"../utils/logger\";\n\nexport async function compileRoutes(\n linksMap: Map<string, SidebarLinkType[]>,\n routesDir: string,\n) {\n const prestigePath = \"(prestige)\";\n const prestigeFullPath = join(routesDir, prestigePath);\n\n try {\n await mkdir(prestigeFullPath, { recursive: true });\n\n const generatedFiles = new Map<string, string>();\n\n for (const [key, links] of linksMap) {\n const onlyInternalLinks = links.filter((l) => \"slug\" in l);\n\n const sidebarPath = key;\n const sidebarFile = sidebarPath + \".lazy.tsx\";\n generatedFiles.set(sidebarFile, createLayoutRoute(key));\n\n for (const l of onlyInternalLinks) {\n const pathified = l.slug.replaceAll(\"/\", \".\");\n generatedFiles.set(pathified + \".tsx\", createContentHeadRoute(l.slug));\n generatedFiles.set(pathified + \".lazy.tsx\", createContentRoute(l.slug));\n }\n }\n\n // Write files only if they have changed or do not exist\n await Promise.all(\n [...generatedFiles.entries()].map(async ([fileName, contents]) => {\n const filePath = join(prestigeFullPath, fileName);\n try {\n const existingContent = await readFile(filePath, \"utf-8\");\n if (existingContent === contents) {\n return; // Skip writing if identical\n }\n } catch (e) {\n // File doesn't exist yet, proceed to write\n }\n logger.info(`Writing route file: ${fileName}`, { timestamp: true });\n return writeFile(filePath, contents);\n }),\n );\n\n const existingFiles = await readdir(prestigeFullPath);\n const staleLazyFiles = existingFiles.filter(\n (fileName) =>\n fileName.endsWith(\".lazy.tsx\") && !generatedFiles.has(fileName),\n );\n const staleHeadFiles = staleLazyFiles\n .map((fileName) => fileName.replace(\".lazy.tsx\", \".tsx\"))\n .filter(\n (fileName) =>\n existingFiles.includes(fileName) && !generatedFiles.has(fileName),\n );\n const staleFiles = [...new Set([...staleLazyFiles, ...staleHeadFiles])];\n\n await Promise.all(\n staleFiles.map((fileName) => {\n logger.info(`Removing stale route file: ${fileName}`, {\n timestamp: true,\n });\n return unlink(join(prestigeFullPath, fileName));\n }),\n );\n } catch (error) {\n logger.error(\n `[Prestige Router Compiler] Failed to compile routes: ${error}`,\n { timestamp: true },\n );\n console.error(\n \"[Prestige Router Compiler] Failed to compile routes:\",\n error,\n );\n }\n}\n\nfunction createLayoutRoute(id: string) {\n return (\n `\nimport { createLazyFileRoute } from '@tanstack/react-router';\nimport sidebar from \"virtual:prestige/sidebar/${id}\";\nimport { CollectionRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createLazyFileRoute('/(prestige)/${id}')(CollectionRoute(sidebar, \"${id}\"));\n`.trim() + \"\\n\"\n );\n}\n\nfunction createContentHeadRoute(slug: string) {\n return (\n `\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport * as contentData from \"virtual:prestige/content/${slug}\";\nimport { ContentRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createFileRoute('/(prestige)/${slug}')(ContentRoute(contentData));\n`.trim() + \"\\n\"\n );\n}\n\nfunction createContentRoute(slug: string) {\n return (\n `\nimport { createLazyFileRoute } from \"@tanstack/react-router\";\nimport * as contentData from \"virtual:prestige/content/${slug}\";\nimport { LazyContentRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createLazyFileRoute('/(prestige)/${slug}')(LazyContentRoute(contentData));\n`.trim() + \"\\n\"\n );\n}\n","import { genDynamicImport } from \"knitwork\";\n\nexport function genExportDefault(specifier: string) {\n return `export default ${specifier};`;\n}\n\n/** exports default undefined */\nexport function genExportUndefined() {\n return genExportDefault(\"undefined\");\n}\n\nexport function genDynamicImportWithDefault(specifier: string) {\n return `${genDynamicImport(specifier)}.then(m => m.default)`;\n}\n","import { genArrayFromRaw, genObjectFromValues } from \"knitwork\";\nimport { genExportDefault } from \"../../utils/code-generation\";\nimport { PrestigeError } from \"../../utils/errors\";\nimport {\n CollectionNavigation,\n Collections,\n SidebarLinkType,\n} from \"./content.types\";\n\nexport const COLLECTION_VIRTUAL_ID = \"virtual:prestige/collection-all\";\n\nexport function resolveCollectionNavigations(\n inlineCollections: Collections,\n linksMap: Map<string, SidebarLinkType[]>,\n) {\n const collections: CollectionNavigation[] = inlineCollections.map((c) => ({\n id: c.id,\n label: c.label ?? c.id,\n defaultLink: c.defaultLink ?? \"\",\n }));\n if (collections.length === 0) {\n throw new PrestigeError(\n `No collections found, add one in prestige plugin config`,\n );\n }\n\n for (const coll of collections) {\n const links = linksMap.get(coll.id);\n const firstInternalLink = links?.find(l => \"slug\" in l);\n if (coll.defaultLink || !firstInternalLink) {\n continue;\n }\n coll.defaultLink = firstInternalLink.slug;\n }\n\n for (const coll of collections) {\n if (!coll.defaultLink) {\n console.warn(\n `No default link found for collection ${coll.id}, it won't be displayed in the header navigation`,\n );\n }\n }\n\n const validCollections = collections.filter((c) => c.defaultLink);\n\n return genExportDefault(\n genArrayFromRaw(validCollections.map((c) => genObjectFromValues(c))),\n );\n}\n","import chokidar from \"chokidar\";\nimport debounce from \"debounce\";\n\nexport function initContentWatcher(contentDir: string, onUpdate: () => void) {\n const UPDATE_INTERVAL = 1000;\n const scheduleUpdate = debounce(onUpdate, UPDATE_INTERVAL);\n\n const watcher = chokidar\n .watch(contentDir, {\n awaitWriteFinish: true,\n ignoreInitial: true,\n })\n .on(\"all\", (event) => {\n if (event !== \"add\" && event !== \"unlink\") {\n return;\n }\n\n // Coalesce bursts of filesystem events into one update run per interval.\n scheduleUpdate();\n });\n\n return () => {\n scheduleUpdate.clear();\n return watcher.close();\n };\n}\n","import { join } from \"pathe\";\nimport picomatch, { type Matcher } from \"picomatch\";\nimport { EnvironmentModuleNode, type Plugin } from \"vite\";\nimport { resolvePrestigeConfig } from \"./config/config\";\nimport { PrestigeConfig, PrestigeConfigInput } from \"./config/config.types\";\n\nimport { genObjectFromValues } from \"knitwork\";\nimport { resolveContentLinks } from \"./content/content-links\";\nimport {\n resolveSidebars,\n SIDEBAR_VIRTUAL_ID,\n} from \"./content/content-sidebar.store\";\nimport {\n CONTENT_VIRTUAL_ID,\n getSlugByPath,\n resolveContent,\n} from \"./content/content.store\";\nimport { compileRoutes } from \"./content/router-compiler\";\nimport {\n COLLECTION_VIRTUAL_ID,\n resolveCollectionNavigations,\n} from \"./core/content/content-collection.store\";\nimport {\n Collections,\n SidebarLinkType,\n SidebarType,\n} from \"./core/content/content.types\";\nimport { genExportDefault, genExportUndefined } from \"./utils/code-generation\";\nimport { extractVirtualId } from \"./utils/file-utils\";\nimport logger from \"./utils/logger\";\nimport { initContentWatcher } from \"./content/content-watcher\";\n\nexport const CONFIG_VIRTUAL_ID = \"virtual:prestige/config\";\n\nexport default function prestige(inlineConfig?: PrestigeConfigInput): Plugin {\n let config: PrestigeConfig;\n let contentDir: string;\n let isDocsMatcher: Matcher;\n let collections: Collections = [];\n let linksMap: Map<string, SidebarLinkType[]>;\n let collectionNavigations: string;\n let sidebarsMap: Map<string, SidebarType>;\n return {\n name: \"vite-plugin-prestige\",\n enforce: \"pre\",\n async configResolved(resolvedConfig) {\n logger.info(\"Resolving Prestige configuration...\", { timestamp: true });\n const { config: loadedConfig } = await resolvePrestigeConfig(\n inlineConfig,\n resolvedConfig.root,\n );\n config = loadedConfig;\n contentDir = join(resolvedConfig.root, \"src/content\");\n isDocsMatcher = picomatch(join(contentDir, \"**/*.{md,mdx}\"));\n collections = config.collections ?? [];\n\n logger.info(\"Resolving sidebars...\", { timestamp: true });\n sidebarsMap = await resolveSidebars(collections, contentDir);\n\n logger.info(\"Resolving content links...\", { timestamp: true });\n linksMap = resolveContentLinks(sidebarsMap);\n\n logger.info(\"Resolving collection navigations....\", { timestamp: true });\n collectionNavigations = resolveCollectionNavigations(\n collections,\n linksMap,\n );\n const routesDir = join(resolvedConfig.root, \"src\", \"routes\");\n\n logger.info(\"Compiling routes...\", { timestamp: true });\n await compileRoutes(linksMap, routesDir);\n },\n configureServer(server) {\n const contentWatcher = initContentWatcher(contentDir, () => {\n server.restart();\n });\n server.httpServer?.on(\"close\", () => {\n contentWatcher();\n });\n },\n resolveId(id) {\n // even though the import will be import * from \"virtual:prestige/docs/introduction\"\n // it is not guaranteed that some other plugin doesn't modify this import and attach full path\n // we call extractVirtualId to trim the import\n\n if (id.includes(CONFIG_VIRTUAL_ID)) {\n logger.info(`Resolving config virtual ID: ${id}`, { timestamp: true });\n return extractVirtualId(id, CONFIG_VIRTUAL_ID);\n }\n\n if (id.includes(CONTENT_VIRTUAL_ID)) {\n logger.info(`Resolving content virtual ID: ${id}`, { timestamp: true });\n return extractVirtualId(id, CONTENT_VIRTUAL_ID);\n }\n\n if (id.includes(COLLECTION_VIRTUAL_ID)) {\n logger.info(`Resolving collection virtual ID: ${id}`, {\n timestamp: true,\n });\n return extractVirtualId(id, COLLECTION_VIRTUAL_ID);\n }\n\n if (id.includes(SIDEBAR_VIRTUAL_ID)) {\n logger.info(`Resolving sidebar virtual ID: ${id}`, { timestamp: true });\n return extractVirtualId(id, SIDEBAR_VIRTUAL_ID);\n }\n\n return null;\n },\n async load(id) {\n if (id === `\\0${CONFIG_VIRTUAL_ID}`) {\n logger.info(`Loading config virtual module: ${id}`, {\n timestamp: true,\n });\n return genExportDefault(JSON.stringify(config));\n }\n if (id.includes(CONTENT_VIRTUAL_ID)) {\n logger.info(`Loading content virtual module: ${id}`, {\n timestamp: true,\n });\n return await resolveContent(id, linksMap, contentDir);\n }\n if (id.includes(COLLECTION_VIRTUAL_ID)) {\n logger.info(`Loading collection virtual module: ${id}`, {\n timestamp: true,\n });\n return collectionNavigations;\n }\n\n if (id.includes(SIDEBAR_VIRTUAL_ID)) {\n logger.info(`Loading sidebar virtual module: ${id}`, {\n timestamp: true,\n });\n const sidebarId = id.replace(SIDEBAR_VIRTUAL_ID, \"\").replace(\"\\0\", \"\");\n const sidebar = sidebarsMap.get(sidebarId);\n if (!sidebar) {\n return genExportUndefined();\n }\n return genExportDefault(genObjectFromValues(sidebar));\n }\n\n return null;\n },\n\n async hotUpdate({ file, timestamp, type }) {\n if (type !== \"update\" || !isDocsMatcher(file)) {\n return;\n }\n logger.info(`Invalidating module ${file}...`, { timestamp: true });\n const invalidatedModules = new Set<EnvironmentModuleNode>();\n const slug = getSlugByPath(file, contentDir);\n const virtualModuleId = `\\0${CONTENT_VIRTUAL_ID}${slug}`;\n const module =\n this.environment.moduleGraph.getModuleById(virtualModuleId);\n if (module) {\n this.environment.moduleGraph.invalidateModule(\n module,\n invalidatedModules,\n timestamp,\n true,\n );\n logger.info(`Reloading application...`, { timestamp: true });\n this.environment.hot.send({ type: \"full-reload\" });\n }\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite.js","names":["CollectionGroupSchema: z.ZodType<CollectionGroup, CollectionGroup>","CollectionItemSchema: z.ZodType<CollectionItem, CollectionItem>","sidebarLinks: SidebarLinkType[]","processItem","data","typeMap: Record<\"note\" | \"tip\" | \"caution\" | \"danger\", string>","titleChildren: any[]","toc: TocItem[]","prev: SiblingNavigationType | undefined","next: SiblingNavigationType | undefined","join","navigation: Record<string, NavigationLinks>","items: SidebarItemType[]","group: CollectionGroup","join","collections: CollectionNavigation[]","config: PrestigeConfig","contentDir: string","isDocsMatcher: Matcher","collections: Collections","linksMap: Map<string, SidebarLinkType[]>","collectionNavigations: string","sidebarsMap: Map<string, SidebarType>","logger: Logger"],"sources":["../src/vite/utils/errors.ts","../src/vite/core/content/content.types.ts","../src/vite/config/config.types.ts","../src/vite/utils/file-utils.ts","../src/vite/config/config.ts","../src/vite/content/content-links.ts","../src/vite/content/content-compiler.ts","../src/vite/content/content.store.ts","../src/vite/content/content-sidebar.store.ts","../src/vite/content/router-compiler.ts","../src/vite/utils/code-generation.ts","../src/vite/core/content/content-collection.store.ts","../src/vite/utils/logger.ts","../src/vite/content/content-watcher.ts","../src/vite/plugin.ts"],"sourcesContent":["import { type ZodType, input } from \"zod\";\n\nexport class PrestigeError extends Error {}\n\n/**\n * Parse data with zod schema and if fails throw PrestigeError that is friendly error\n * for prestige ecosystem\n */\nexport function parseWithFriendlyErrors<T extends ZodType>(s: T, input: input<T>, message: string) {\n try {\n return s.parse(input);\n } catch (e) {\n if (e instanceof Error) {\n throw new PrestigeError(`Prestige error cause: ${message}, with error: ${e.message} `);\n } else {\n throw new PrestigeError(`Prestige error cause: ${message} `);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const ContentFrontmatterSchema = z.object({\n title: z.string().describe(\"The title of the article\"),\n description: z.string().optional().describe(\"The description of the article\"),\n label: z.string().optional().describe(\"The label of the content\"),\n});\n\nexport type ContentFrontmatterType = z.infer<typeof ContentFrontmatterSchema>;\n\nexport const ContentSchema = z.object({\n matter: ContentFrontmatterSchema,\n html: z.string().describe(\"The html of the content\"),\n});\n\nexport type ContentType = z.infer<typeof ContentSchema>;\n\nconst InternalCollectionLinkSchema = z.union([\n z.object({\n label: z.string(),\n slug: z.string(),\n }),\n z.string(),\n]);\n\nconst ExternalCollectionLinkSchema = z.object({\n label: z.string(),\n link: z.string(),\n});\n\nexport type ExternalCollectionLink = z.infer<\n typeof ExternalCollectionLinkSchema\n>;\n\nexport type InternalCollectionLink = z.infer<\n typeof InternalCollectionLinkSchema\n>;\n\nexport type CollectionGroup = {\n label: string;\n items?: CollectionItem[] | undefined;\n collapsed?: boolean | undefined;\n autogenerate?: { directory: string } | undefined;\n};\n\nexport type CollectionItem =\n | InternalCollectionLink\n | CollectionGroup\n | ExternalCollectionLink;\n\nconst CollectionGroupSchema: z.ZodType<CollectionGroup, CollectionGroup> =\n z.object({\n label: z.string(),\n items: z.lazy(() => z.array(CollectionItemSchema)).optional(),\n collapsed: z.boolean().optional(),\n autogenerate: z\n .object({\n directory: z.string(),\n })\n .optional(),\n });\n\nconst CollectionItemSchema: z.ZodType<CollectionItem, CollectionItem> = z.union(\n [\n ExternalCollectionLinkSchema,\n InternalCollectionLinkSchema,\n z.lazy(() => CollectionGroupSchema),\n ],\n);\n\nexport const CollectionSchema = z.object({\n id: z\n .string()\n .min(1, { message: \"Folder name cannot be empty\" })\n .max(50, { message: \"Folder name too long\" })\n // Allows alphanumeric, hyphens, and underscores\n .regex(/^[a-zA-Z0-9-_]+$/, {\n message: \"Only alphanumeric, hyphens, and underscores allowed\",\n })\n .describe(\"The id of the collection, must match the folder name\"),\n items: z.array(CollectionItemSchema),\n label: z.string().optional().describe(\"The label of the collection\"),\n defaultLink: z\n .string()\n .optional()\n .describe(\"The default link of the collection\"),\n});\n\nexport type Collection = z.infer<typeof CollectionSchema>;\n\nexport type CollectionNavigation = {\n id: string;\n label: string;\n defaultLink?: string;\n};\n\nexport type CollectionInput = z.input<typeof CollectionSchema>;\n\nexport const CollectionsSchema = z.array(CollectionSchema);\n\nexport type Collections = z.infer<typeof CollectionsSchema>;\n\nexport interface InternalSidebarLinkType {\n slug: string;\n label: string;\n}\n\nexport interface ExternalSidebarLinkType {\n label: string;\n link: string;\n}\n\nexport type SidebarLinkType = InternalSidebarLinkType | ExternalSidebarLinkType;\n\nexport interface SidebarGroupType {\n label: string;\n items: SidebarItemType[];\n collapsed?: boolean | undefined;\n}\n\nexport type SidebarItemType =\n | InternalSidebarLinkType\n | SidebarGroupType\n | ExternalSidebarLinkType;\n\nexport interface SidebarType {\n items: SidebarItemType[];\n defaultLink: string;\n navigation: Record<string, NavigationLinks>;\n}\n\nexport interface SiblingNavigationType {\n label: string;\n link: string;\n}\n\nexport interface NavigationLinks {\n prev: SiblingNavigationType | null | undefined;\n next: SiblingNavigationType | null | undefined;\n}\n","import { FlexibleTocOptions } from \"remark-flexible-toc\";\nimport type { Options as RemarkGfmOptions } from \"remark-gfm\";\nimport { PluggableList } from \"unified\";\nimport { z } from \"zod\";\nimport { CollectionsSchema } from \"../core/content/content.types\";\n\nexport const PrestigeConfigSchema = z.object({\n title: z.string().describe(\"Title of the website\"),\n github: z.string().optional().describe(\"Github repo\"),\n disableLog: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Disable logger, default is false\"),\n enableDebugLog: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Enable debug log, default is false\"),\n algolia: z\n .object({\n appId: z.string().describe(\"Algolia app id\"),\n apiKey: z.string().describe(\"Algolia api key\"),\n indices: z.array(z.string()).describe(\"Algolia indices\"),\n })\n .optional()\n .describe(\"Algolia options\"),\n license: z\n .object({\n label: z.string().describe(\"License label\"),\n url: z.string().describe(\"License url\"),\n })\n .optional()\n .describe(\"License options\"),\n collections: CollectionsSchema,\n markdown: z\n .object({\n gfmOptions: z\n .custom<RemarkGfmOptions>()\n .optional()\n .describe(\"Options for remark-gfm\"),\n rehypePlugins: z\n .custom<PluggableList>()\n .optional()\n .describe(\"Additional rehype plugins\"),\n remarkPlugins: z\n .custom<PluggableList>()\n .optional()\n .describe(\"Additional remark plugins\"),\n remarkFlexibleToc: z\n .custom<FlexibleTocOptions>()\n .optional()\n .describe(\"Options for remark-flexible-toc\"),\n rehypeSlug: z\n .custom<{\n prefix?: string;\n }>()\n .optional()\n .describe(\"Options for rehype-slug\"),\n })\n .optional()\n .describe(\"Markdown options, configure how markdown is parsed\"),\n});\n\nexport type PrestigeConfigInput = z.input<typeof PrestigeConfigSchema>;\nexport type PrestigeConfig = z.infer<typeof PrestigeConfigSchema>;\n","import { mkdir, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"pathe\";\n\nexport async function pathExists(path: string) {\n try {\n await stat(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensureDir(dirPath: string) {\n await mkdir(dirPath, { recursive: true });\n}\n\nexport async function outputFile(\n filePath: string,\n data: string | NodeJS.ArrayBufferView,\n) {\n const dir = dirname(filePath);\n\n // recursive: true won't throw if the dir already exists\n await mkdir(dir, { recursive: true });\n await writeFile(filePath, data);\n}\n\nexport async function rmSafe(path: string) {\n try {\n await rm(path, { recursive: true, force: true });\n return true;\n } catch {\n return false;\n }\n}\n\n// Helper function to extract the virtual ID from a messy path\nexport function extractVirtualId(fullId: string, virtualPrefix: string) {\n const startIndex = fullId.indexOf(virtualPrefix);\n if (startIndex !== -1) {\n // Slice from the start of the virtual prefix to the end of the string\n return \"\\0\" + fullId.slice(startIndex);\n }\n return null;\n}\n","import { parseWithFriendlyErrors, PrestigeError } from \"../utils/errors\";\nimport { PrestigeConfigInput, PrestigeConfigSchema } from \"./config.types\";\nimport { join } from \"pathe\";\nimport { pathExists } from \"../utils/file-utils\";\n\nexport function validateConfig(config: PrestigeConfigInput) {\n return parseWithFriendlyErrors(PrestigeConfigSchema, config, \"Invalid schema\");\n}\n\nexport async function resolvePrestigeConfig(\n configInput: PrestigeConfigInput | undefined,\n root: string,\n) {\n if (!configInput) {\n throw new PrestigeError(\"Prestige config is required\");\n }\n\n const validatedConfig = validateConfig(configInput);\n const docsDirPath = join(root, \"src/content\");\n\n if (!(await pathExists(docsDirPath))) {\n throw new PrestigeError(`Docs! directory not found: ${docsDirPath}`);\n }\n\n return { config: validatedConfig, fullDocsDir: docsDirPath };\n}\n","import { SidebarLinkType, SidebarItemType, SidebarType } from \"../core/content/content.types\";\n\nexport function resolveContentLinks(sidebars: Map<string, SidebarType>) {\n const links = new Map<string, SidebarLinkType[]>();\n for (const [key, sidebar] of sidebars) {\n const sidebarLinks: SidebarLinkType[] = [];\n for (const item of sidebar.items) {\n processItem(item, sidebarLinks);\n }\n links.set(key, sidebarLinks);\n }\n return links;\n}\n\nfunction processItem(item: SidebarItemType, links: SidebarLinkType[] = []) {\n if (\"slug\" in item || \"link\" in item) {\n links.push(item);\n } else if (\"items\" in item) {\n for (const childItem of item.items) {\n processItem(childItem, links);\n }\n }\n return links;\n}\n","import { compile } from \"@mdx-js/mdx\";\nimport rehypePrism from \"rehype-prism-plus\";\nimport rehypeSlug from \"rehype-slug\";\nimport remarkDirective from \"remark-directive\";\nimport remarkFlexibleToc, { TocItem } from \"remark-flexible-toc\";\nimport remarkFrontmatter from \"remark-frontmatter\";\nimport remarkGfm from \"remark-gfm\";\nimport { PluggableList } from \"unified\";\nimport { Compatible, VFile } from \"vfile\";\nimport matter from \"gray-matter\";\nimport { PrestigeConfig } from \"../config/config.types\";\n\nimport { h } from \"hastscript\";\nimport type { Node } from \"unist\";\nimport { visit } from \"unist-util-visit\";\n\nexport default function remarkAdmonitions() {\n return (tree: Node) => {\n visit(tree, (node: any) => {\n if (\n node.type === \"textDirective\" ||\n node.type === \"leafDirective\" ||\n node.type === \"containerDirective\"\n ) {\n if (node.type !== \"containerDirective\") {\n const data = node.data || (node.data = {});\n const hast = h(node.type === \"textDirective\" ? \"span\" : \"aside\", {\n className: [\"admonition\", `admonition-${node.name}`],\n ...node.attributes,\n });\n data.hName = hast.tagName;\n data.hProperties = hast.properties;\n return;\n }\n\n const type = [\"note\", \"tip\", \"caution\", \"danger\"].includes(node.name)\n ? node.name\n : \"note\";\n\n const typeMap: Record<\"note\" | \"tip\" | \"caution\" | \"danger\", string> = {\n note: \"bg-blue-50/50 dark:bg-blue-900/20 border-blue-500 text-blue-900 dark:text-blue-200\",\n tip: \"bg-purple-50/50 dark:bg-purple-900/20 border-purple-500 text-purple-900 dark:text-purple-200\",\n caution:\n \"bg-yellow-50/50 dark:bg-yellow-900/20 border-yellow-500 text-yellow-900 dark:text-yellow-200\",\n danger:\n \"bg-red-50/50 dark:bg-red-900/20 border-red-500 text-red-900 dark:text-red-200\",\n };\n\n const data = node.data || (node.data = {});\n data.hName = \"aside\";\n data.hProperties = {\n \"aria-label\": type.charAt(0).toUpperCase() + type.slice(1),\n className: [\n \"relative\",\n \"my-6\",\n \"px-4\",\n \"py-3\",\n \"border-l-4\",\n \"rounded-lg\",\n ...(typeMap[type as keyof typeof typeMap] || typeMap[\"note\"]).split(\n \" \",\n ),\n ],\n ...node.attributes,\n };\n\n let titleNodeIndex = node.children.findIndex(\n (c: any) => c.data?.directiveLabel,\n );\n let titleChildren: any[];\n\n if (titleNodeIndex !== -1) {\n titleChildren = node.children[titleNodeIndex].children;\n node.children.splice(titleNodeIndex, 1);\n } else {\n titleChildren = [\n {\n type: \"text\",\n value: type.charAt(0).toUpperCase() + type.slice(1),\n },\n ];\n }\n\n const getIconHast = (t: string) => {\n const props = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: [\"w-5\", \"h-5\", \"flex-shrink-0\"],\n };\n if (t === \"note\")\n return h(\"svg\", props, [\n h(\"circle\", { cx: \"12\", cy: \"12\", r: \"10\" }),\n h(\"path\", { d: \"M12 16v-4\" }),\n h(\"path\", { d: \"M12 8h.01\" }),\n ]);\n if (t === \"tip\")\n return h(\"svg\", props, [\n h(\"path\", {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\",\n }),\n h(\"path\", {\n d: \"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\",\n }),\n h(\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" }),\n h(\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" }),\n ]);\n if (t === \"caution\")\n return h(\"svg\", props, [\n h(\"path\", {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\",\n }),\n h(\"path\", { d: \"M12 9v4\" }),\n h(\"path\", { d: \"M12 17h.01\" }),\n ]);\n if (t === \"danger\")\n return h(\"svg\", props, [\n h(\"polygon\", {\n points:\n \"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\",\n }),\n h(\"path\", { d: \"M12 8v4\" }),\n h(\"path\", { d: \"M12 16h.01\" }),\n ]);\n return null;\n };\n\n const titleBlock = {\n type: \"paragraph\",\n data: {\n hName: \"p\",\n hProperties: {\n className: [\n \"flex\",\n \"items-center\",\n \"gap-2\",\n \"mb-2\",\n \"mt-0\",\n \"font-bold\",\n \"text-lg\",\n ],\n },\n },\n children: [\n {\n type: \"text\",\n value: \"\",\n data: { hName: \"span\", hChildren: [getIconHast(type)] },\n },\n ...titleChildren,\n ],\n };\n\n const contentBlock = {\n type: \"paragraph\",\n data: {\n hName: \"section\",\n hProperties: {\n className: [\n \"[&>p]:mt-0\",\n \"[&>p]:mb-2\",\n \"[&>p:last-child]:mb-0\",\n ],\n },\n },\n children: node.children,\n };\n\n node.children = [titleBlock, contentBlock];\n }\n });\n };\n}\n\nexport function rehypeAddNotProseToPre() {\n return (tree: Node) => {\n visit(tree, (node: any) => {\n // Look specifically for HTML elements that are <pre> tags\n if (node.type === \"element\" && node.tagName === \"pre\") {\n node.properties = node.properties || {};\n\n // HAST classNames are generally arrays of strings\n const currentClass = node.properties.className || [];\n node.properties.className = Array.isArray(currentClass)\n ? [...currentClass, \"not-prose\"]\n : [currentClass, \"not-prose\"];\n }\n });\n };\n}\n\nexport async function compileMarkdown(\n content: Readonly<Compatible>,\n baseUrl: string,\n options?: PrestigeConfig[\"markdown\"],\n) {\n const toc: TocItem[] = [];\n\n const rehypePlugins: PluggableList = [\n ...(options?.rehypePlugins ?? []),\n rehypeSlug,\n [rehypePrism, { options: { showLineNumbers: false } }],\n rehypeAddNotProseToPre,\n ];\n\n const remarkPlugins: PluggableList = [\n ...(options?.remarkPlugins ?? []),\n remarkFrontmatter,\n [remarkGfm, options?.gfmOptions || {}],\n remarkDirective,\n remarkAdmonitions,\n [remarkFlexibleToc, { tocRef: toc }],\n ];\n\n const code = await compile(content, {\n outputFormat: \"program\",\n rehypePlugins,\n remarkPlugins,\n baseUrl: baseUrl,\n });\n return { code: String(code), toc };\n}\n\nexport async function compileFrontmatter(vFile: VFile) {\n const result = matter(String(vFile.value));\n return result.data || {};\n}\n\nexport function warmupCompiler(options?: PrestigeConfig[\"markdown\"]) {\n compileMarkdown(\"```js\\n```\", \"http://localhost\", options).catch(() => {});\n}\n","import { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { parse, relative } from \"pathe\";\nimport { glob } from \"tinyglobby\";\nimport { read } from \"to-vfile\";\nimport {\n SiblingNavigationType,\n SidebarLinkType,\n} from \"../core/content/content.types\";\nimport { compileMarkdown } from \"./content-compiler\";\n\nimport { PrestigeError } from \"../utils/errors\";\nimport { compileFrontmatter } from \"./content-compiler\";\n\nexport const CONTENT_VIRTUAL_ID = \"virtual:prestige/content/\";\n\nfunction getSiblingLink(\n link: SidebarLinkType | undefined,\n): SiblingNavigationType | undefined {\n if (!link) {\n return undefined;\n }\n return {\n label: link.label,\n link: \"slug\" in link ? link.slug : link.link,\n };\n}\n\nexport function resolveSiblings(\n base: string,\n slug: string,\n linksMap: Map<string, SidebarLinkType[]>,\n) {\n const links = linksMap.get(base);\n if (!links?.length) {\n return { prev: undefined, next: undefined };\n }\n\n const validLinks = links.filter((l) => {\n if (\"slug\" in l) return true;\n if (\"link\" in l) {\n return !l.link.startsWith(\"http://\") && !l.link.startsWith(\"https://\");\n }\n return false;\n });\n\n const linkIndex = validLinks.findIndex((link) => {\n return (\n (\"slug\" in link && link.slug === slug) ||\n (\"link\" in link && link.link === slug)\n );\n });\n\n let prev: SiblingNavigationType | undefined;\n let next: SiblingNavigationType | undefined;\n\n if (linkIndex !== -1) {\n if (linkIndex > 0) {\n prev = getSiblingLink(validLinks[linkIndex - 1]);\n }\n if (linkIndex < validLinks.length - 1) {\n next = getSiblingLink(validLinks[linkIndex + 1]);\n }\n }\n\n return { prev, next };\n}\n\nexport async function resolveMarkdown(slug: string, contentDir: string) {\n const filePath = await getPathBySlug(slug, contentDir);\n const baseUrl = pathToFileURL(filePath).href;\n const file = await read(filePath);\n const frontmatter = await compileFrontmatter(file);\n const { code, toc } = await compileMarkdown(file, baseUrl);\n return { code, toc, frontmatter };\n}\n\nexport async function resolveContent(\n id: string,\n linksMap: Map<string, SidebarLinkType[]>,\n contentDir: string,\n) {\n const slug = id.replace(CONTENT_VIRTUAL_ID, \"\").replace(\"\\0\", \"\");\n const base = slug.split(\"/\")[0] as string;\n\n const { prev, next } = resolveSiblings(base, slug, linksMap);\n const { toc, code, frontmatter } = await resolveMarkdown(slug, contentDir);\n let resolvedCode = code;\n\n resolvedCode += `\\n export const toc = ${JSON.stringify(toc)}\\n`;\n resolvedCode += `\\n export const prev = ${JSON.stringify(prev)}\\n`;\n resolvedCode += `\\n export const next = ${JSON.stringify(next)}\\n`;\n resolvedCode += `\\n export const frontmatter = ${JSON.stringify(\n frontmatter,\n )}\\n`;\n return resolvedCode;\n}\n\nexport async function getPathBySlug(slug: string, contentDir: string) {\n const pathMatch = join(contentDir, slug);\n const matches = await glob(`${pathMatch}.{md,mdx}`);\n if (matches.length === 0) {\n throw new PrestigeError(\n `[Prestige] Could not find markdown file for slug: \"${slug}\". Searched at: ${pathMatch}.{md,mdx}. If you want to link to a custom page, use 'link: \"${slug}\"' instead of 'slug: \"${slug}\"' in your collection config.`,\n );\n }\n return matches[0] as string;\n}\n\nexport async function getFileBySlug(slug: string, contentDir: string) {\n return await read(await getPathBySlug(slug, contentDir));\n}\n\nexport function getVirtualModuleIdsForFile(path: string, contentDir: string) {\n const slug = getSlugByPath(path, contentDir);\n return [\"\\0\" + CONTENT_VIRTUAL_ID + slug];\n}\n\nexport function getSlugByPath(path: string, contentDir: string) {\n // 1. Get the relative path: \"zz/zz/myFile.json\"\n const relativePath = relative(contentDir, path);\n\n // 2. Parse the path to separate the extension\n const pathInfo = parse(relativePath);\n\n const result = join(pathInfo.dir, pathInfo.name);\n\n return result;\n}\n","import { readdir } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport { join } from \"pathe\";\nimport {\n Collection,\n CollectionGroup,\n CollectionItem,\n Collections,\n ExternalSidebarLinkType,\n InternalCollectionLink,\n InternalSidebarLinkType,\n NavigationLinks,\n SiblingNavigationType,\n SidebarGroupType,\n SidebarItemType,\n SidebarType,\n} from \"../core/content/content.types\";\nimport { PrestigeError } from \"../utils/errors\";\nimport { pathExists } from \"../utils/file-utils\";\nimport { compileFrontmatter } from \"./content-compiler\";\nimport { getFileBySlug } from \"./content.store\";\nimport { Logger } from \"../utils/logger\";\n\nexport const SIDEBAR_VIRTUAL_ID = \"virtual:prestige/sidebar/\";\n\nfunction flattenSidebar(items: SidebarItemType[]): SiblingNavigationType[] {\n return items.flatMap((item) => {\n if (\"slug\" in item) {\n return [{ label: item.label, link: `/${item.slug}` }];\n }\n if (\"link\" in item) {\n // Ignore external links\n if (item.link.startsWith(\"http://\") || item.link.startsWith(\"https://\")) {\n return [];\n }\n return [{ label: item.label, link: item.link }];\n }\n if (\"items\" in item) {\n return flattenSidebar(item.items);\n }\n return [];\n });\n}\n\nfunction computeNavigation(\n items: SidebarItemType[],\n): Record<string, NavigationLinks> {\n const flattenedLinks = flattenSidebar(items);\n const navigation: Record<string, NavigationLinks> = {};\n\n for (let i = 0; i < flattenedLinks.length; i++) {\n const link = flattenedLinks[i];\n if (link) {\n navigation[link.link] = {\n prev: i > 0 ? flattenedLinks[i - 1] : null,\n next: i < flattenedLinks.length - 1 ? flattenedLinks[i + 1] : null,\n };\n }\n }\n\n return navigation;\n}\n\nfunction resolveDefaultLink(\n items: SidebarItemType[],\n defaultLink?: string,\n): string | undefined {\n if (defaultLink) {\n return defaultLink;\n }\n for (const item of items) {\n if (\"slug\" in item) {\n return item.slug;\n } else if (\"link\" in item) {\n return item.link;\n } else if (\"items\" in item && item.items.length > 0) {\n const link = resolveDefaultLink(item.items);\n if (link) return link;\n }\n }\n return undefined;\n}\n\nexport async function resolveSidebars(\n collections: Collections,\n contentDir: string,\n logger: Logger,\n) {\n const store = new Map<string, SidebarType>();\n\n for (const collection of collections) {\n const sidebar = await processCollection(collection, contentDir, logger);\n store.set(collection.id, sidebar);\n }\n return store;\n}\n\n/** @visibleForTesting */\nasync function processCollection(\n collection: Collection,\n contentDir: string,\n logger: Logger,\n): Promise<SidebarType> {\n const items: SidebarItemType[] = [];\n for (const item of collection.items) {\n items.push(await processItem(item, contentDir, logger));\n }\n const defaultLink = resolveDefaultLink(items, collection.defaultLink);\n if (!defaultLink) {\n throw new PrestigeError(\n `No default link found in collection, it means there are no links in the collection. Please define one in ${collection.id}`,\n );\n }\n return {\n items,\n defaultLink: defaultLink,\n navigation: computeNavigation(items),\n };\n}\n\n/** @visibleForTesting */\nasync function processItem(\n item: CollectionItem,\n contentDir: string,\n logger: Logger,\n): Promise<SidebarItemType> {\n if (typeof item === \"string\" || \"slug\" in item) {\n return resolveInternalSidebarLink(\n item as InternalCollectionLink,\n contentDir,\n );\n } else if (\"link\" in item) {\n return resolveSidebarLink(item, contentDir);\n } else {\n return resolveSidebarGroup(item as CollectionGroup, contentDir, logger);\n }\n}\n\n/** @visibleForTesting */\nasync function resolveSidebarGroup(\n group: CollectionGroup,\n contentDir: string,\n logger: Logger,\n): Promise<SidebarGroupType> {\n const label = await resolveLabel(group, contentDir);\n const items: SidebarItemType[] = [];\n\n if (group.items?.length && group.autogenerate) {\n logger.warn(\n `${group.label} has both items and autogenerate. Only items will be used.`,\n );\n }\n\n if (group.items) {\n for (const childItem of group.items) {\n items.push(await processItem(childItem, contentDir, logger));\n }\n } else if (group.autogenerate?.directory) {\n const generatedItems = await autogenerateSidebar(\n group.autogenerate.directory,\n contentDir,\n logger,\n );\n items.push(...generatedItems);\n }\n\n return {\n label,\n collapsed: group.collapsed,\n items,\n };\n}\n\n/** @visibleForTesting */\nasync function resolveInternalSidebarLink(\n item: InternalCollectionLink,\n contentDir: string,\n): Promise<InternalSidebarLinkType> {\n const label = await resolveLabel(item, contentDir);\n const slug = resolveSlug(item);\n\n if (slug.startsWith(\"/\") || slug.endsWith(\"/\")) {\n throw new PrestigeError(\n `The slug ${slug} cannot start or end with a slash. Remove it and try again.`,\n );\n }\n\n if (!slug) {\n throw new PrestigeError(\n `The slug cannot be empty. Remove it and try again. link label is ${label}`,\n );\n }\n\n return {\n label,\n slug,\n };\n}\n\n/** @visibleForTesting */\nasync function resolveSidebarLink(\n item: ExternalSidebarLinkType,\n contentDir: string,\n): Promise<ExternalSidebarLinkType> {\n const label = await resolveLabel(item, contentDir);\n const link = resolveLink(item);\n\n if (!link) {\n throw new PrestigeError(\n `The link cannot be empty. Remove it and try again. link label is ${label}`,\n );\n }\n\n return {\n label,\n link,\n };\n}\n\n/** @visibleForTesting */\nasync function autogenerateSidebar(\n directory: string,\n contentDir: string,\n logger: Logger,\n): Promise<SidebarItemType[]> {\n const fileExtRegex = /\\.mdx?$/i;\n\n const items: SidebarItemType[] = [];\n const dirPath = join(contentDir, directory);\n if (!(await pathExists(dirPath))) {\n logger.warn(`Directory doesn't exist: ${directory}`);\n return [];\n }\n\n const dirents = await readdir(dirPath, { withFileTypes: true });\n dirents.sort((a, b) => a.name.localeCompare(b.name));\n for (const dirent of dirents) {\n if (dirent.isDirectory()) {\n const subDir = join(directory, dirent.name);\n const group: CollectionGroup = {\n label: dirent.name,\n autogenerate: { directory: subDir },\n };\n items.push(await resolveSidebarGroup(group, contentDir, logger));\n } else if (dirent.isFile() && fileExtRegex.test(dirent.name)) {\n const fullPath = join(directory, dirent.name);\n const slug = fullPath.replace(fileExtRegex, \"\");\n items.push(await resolveInternalSidebarLink(slug, contentDir));\n }\n }\n return items;\n}\n\n/** @visibleForTesting */\nasync function resolveLabel(\n item: CollectionItem,\n contentDir: string,\n): Promise<string> {\n if (typeof item !== \"string\" && \"label\" in item && item.label) {\n return item.label;\n }\n\n if (typeof item === \"string\" || \"slug\" in item) {\n const slug = resolveSlug(item);\n\n const file = await getFileBySlug(slug, contentDir);\n if (!file) {\n throw new PrestigeError(\n `markdown file not found with slug: ${slug} add one in content folder or update config`,\n );\n }\n const data = (await compileFrontmatter(file)) as any;\n if (data?.label) {\n return data?.label;\n }\n\n return basename(slug);\n }\n\n // is a group\n if (typeof item !== \"string\" && (\"items\" in item || \"autogenerate\" in item)) {\n return item.label;\n }\n\n return \"\";\n}\n\n/** @visibleForTesting */\nexport function resolveSlug(item: CollectionItem) {\n if (typeof item === \"string\") {\n return item;\n } else {\n if (\"slug\" in item) {\n return item.slug;\n }\n return \"\";\n }\n}\n\n/** @visibleForTesting */\nexport function resolveLink(item: CollectionItem) {\n if (typeof item === \"object\" && \"link\" in item) {\n return item.link;\n }\n return \"\";\n}\n","import { mkdir, readdir, readFile, unlink, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { SidebarLinkType } from \"../core/content/content.types\";\nimport { Logger } from \"../utils/logger\";\n\nexport async function compileRoutes(\n linksMap: Map<string, SidebarLinkType[]>,\n routesDir: string,\n logger: Logger,\n) {\n const prestigePath = \"(prestige)\";\n const prestigeFullPath = join(routesDir, prestigePath);\n\n try {\n await mkdir(prestigeFullPath, { recursive: true });\n\n const generatedFiles = new Map<string, string>();\n\n for (const [key, links] of linksMap) {\n const onlyInternalLinks = links.filter((l) => \"slug\" in l);\n\n const sidebarPath = key;\n const sidebarFile = sidebarPath + \".lazy.tsx\";\n generatedFiles.set(sidebarFile, createLayoutRoute(key));\n\n for (const l of onlyInternalLinks) {\n const pathified = l.slug.replaceAll(\"/\", \".\");\n generatedFiles.set(pathified + \".tsx\", createContentHeadRoute(l.slug));\n generatedFiles.set(pathified + \".lazy.tsx\", createContentRoute(l.slug));\n }\n }\n\n // Write files only if they have changed or do not exist\n await Promise.all(\n [...generatedFiles.entries()].map(async ([fileName, contents]) => {\n const filePath = join(prestigeFullPath, fileName);\n try {\n const existingContent = await readFile(filePath, \"utf-8\");\n if (existingContent === contents) {\n return; // Skip writing if identical\n }\n } catch (e) {\n // File doesn't exist yet, proceed to write\n }\n logger.info(`Writing route file: ${fileName}`);\n return writeFile(filePath, contents);\n }),\n );\n\n const existingFiles = await readdir(prestigeFullPath);\n const staleLazyFiles = existingFiles.filter(\n (fileName) =>\n fileName.endsWith(\".lazy.tsx\") && !generatedFiles.has(fileName),\n );\n const staleHeadFiles = staleLazyFiles\n .map((fileName) => fileName.replace(\".lazy.tsx\", \".tsx\"))\n .filter(\n (fileName) =>\n existingFiles.includes(fileName) && !generatedFiles.has(fileName),\n );\n const staleFiles = [...new Set([...staleLazyFiles, ...staleHeadFiles])];\n\n await Promise.all(\n staleFiles.map((fileName) => {\n logger.debug(`Removing stale route file: ${fileName}`);\n return unlink(join(prestigeFullPath, fileName));\n }),\n );\n } catch (error) {\n logger.error(\n `[Prestige Router Compiler] Failed to compile routes: ${error}`,\n );\n console.error(\n \"[Prestige Router Compiler] Failed to compile routes:\",\n error,\n );\n }\n}\n\nfunction createLayoutRoute(id: string) {\n return (\n `\nimport { createLazyFileRoute } from '@tanstack/react-router';\nimport sidebar from \"virtual:prestige/sidebar/${id}\";\nimport { CollectionRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createLazyFileRoute('/(prestige)/${id}')(CollectionRoute(sidebar, \"${id}\"));\n`.trim() + \"\\n\"\n );\n}\n\nfunction createContentHeadRoute(slug: string) {\n return (\n `\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport * as contentData from \"virtual:prestige/content/${slug}\";\nimport { ContentRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createFileRoute('/(prestige)/${slug}')(ContentRoute(contentData));\n`.trim() + \"\\n\"\n );\n}\n\nfunction createContentRoute(slug: string) {\n return (\n `\nimport { createLazyFileRoute } from \"@tanstack/react-router\";\nimport * as contentData from \"virtual:prestige/content/${slug}\";\nimport { LazyContentRoute } from \"@lonik/prestige/ui\";\n\nexport const Route = createLazyFileRoute('/(prestige)/${slug}')(LazyContentRoute(contentData));\n`.trim() + \"\\n\"\n );\n}\n","import { genDynamicImport } from \"knitwork\";\n\nexport function genExportDefault(specifier: string) {\n return `export default ${specifier};`;\n}\n\n/** exports default undefined */\nexport function genExportUndefined() {\n return genExportDefault(\"undefined\");\n}\n\nexport function genDynamicImportWithDefault(specifier: string) {\n return `${genDynamicImport(specifier)}.then(m => m.default)`;\n}\n","import { genArrayFromRaw, genObjectFromValues } from \"knitwork\";\nimport { genExportDefault } from \"../../utils/code-generation\";\nimport { PrestigeError } from \"../../utils/errors\";\nimport {\n CollectionNavigation,\n Collections,\n SidebarLinkType,\n} from \"./content.types\";\n\nexport const COLLECTION_VIRTUAL_ID = \"virtual:prestige/collection-all\";\n\nexport function resolveCollectionNavigations(\n inlineCollections: Collections,\n linksMap: Map<string, SidebarLinkType[]>,\n) {\n const collections: CollectionNavigation[] = inlineCollections.map((c) => ({\n id: c.id,\n label: c.label ?? c.id,\n defaultLink: c.defaultLink ?? \"\",\n }));\n if (collections.length === 0) {\n throw new PrestigeError(\n `No collections found, add one in prestige plugin config`,\n );\n }\n\n for (const coll of collections) {\n const links = linksMap.get(coll.id);\n const firstInternalLink = links?.find(l => \"slug\" in l);\n if (coll.defaultLink || !firstInternalLink) {\n continue;\n }\n coll.defaultLink = firstInternalLink.slug;\n }\n\n for (const coll of collections) {\n if (!coll.defaultLink) {\n console.warn(\n `No default link found for collection ${coll.id}, it won't be displayed in the header navigation`,\n );\n }\n }\n\n const validCollections = collections.filter((c) => c.defaultLink);\n\n return genExportDefault(\n genArrayFromRaw(validCollections.map((c) => genObjectFromValues(c))),\n );\n}\n","import pc from \"picocolors\";\nexport interface Logger {\n debug: (message: string) => void;\n info: (message: string) => void;\n warn: (message: string) => void;\n error: (message: string) => void;\n}\n\nexport function createLogger(config: {\n disabled: boolean;\n debug: boolean;\n}): Logger {\n function formatLogArgs(message: string) {\n const now = new Date();\n\n // Format: 11:14:22 PM\n const timestamp = now.toLocaleTimeString(\"en-US\", {\n hour12: true,\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n\n // Vite's signature: Gray timestamp + Bold Cyan tag\n const fullMessage = `${pc.dim(timestamp)} ${pc.bold(pc.cyan(\"[prestige]\"))} ${message}`;\n return fullMessage;\n }\n\n return {\n debug: (message: string) => {\n if (!config.disabled && config.debug)\n console.debug(formatLogArgs(pc.gray(message)));\n },\n info: (message: string) => {\n if (!config.disabled) console.info(formatLogArgs(pc.reset(message)));\n },\n warn: (message: string) => {\n if (!config.disabled) console.warn(formatLogArgs(pc.yellow(message)));\n },\n error: (message: string) => {\n if (!config.disabled) console.error(formatLogArgs(pc.red(message)));\n },\n };\n}\n\nexport default createLogger;\n","import chokidar from \"chokidar\";\nimport debounce from \"debounce\";\n\nexport function initContentWatcher(contentDir: string, onUpdate: () => void) {\n const UPDATE_INTERVAL = 1000;\n const scheduleUpdate = debounce(onUpdate, UPDATE_INTERVAL);\n\n const watcher = chokidar\n .watch(contentDir, {\n awaitWriteFinish: true,\n ignoreInitial: true,\n })\n .on(\"all\", (event) => {\n if (event !== \"add\" && event !== \"unlink\") {\n return;\n }\n\n // Coalesce bursts of filesystem events into one update run per interval.\n scheduleUpdate();\n });\n\n return () => {\n scheduleUpdate.clear();\n return watcher.close();\n };\n}\n","import { join } from \"pathe\";\nimport picomatch, { type Matcher } from \"picomatch\";\nimport { EnvironmentModuleNode, type Plugin } from \"vite\";\nimport { resolvePrestigeConfig } from \"./config/config\";\nimport { PrestigeConfig, PrestigeConfigInput } from \"./config/config.types\";\n\nimport { genObjectFromValues } from \"knitwork\";\nimport { resolveContentLinks } from \"./content/content-links\";\nimport {\n resolveSidebars,\n SIDEBAR_VIRTUAL_ID,\n} from \"./content/content-sidebar.store\";\nimport {\n CONTENT_VIRTUAL_ID,\n getSlugByPath,\n resolveContent,\n} from \"./content/content.store\";\nimport { compileRoutes } from \"./content/router-compiler\";\nimport {\n COLLECTION_VIRTUAL_ID,\n resolveCollectionNavigations,\n} from \"./core/content/content-collection.store\";\nimport {\n Collections,\n SidebarLinkType,\n SidebarType,\n} from \"./core/content/content.types\";\nimport { genExportDefault, genExportUndefined } from \"./utils/code-generation\";\nimport { extractVirtualId } from \"./utils/file-utils\";\nimport { createLogger, Logger } from \"./utils/logger\";\nimport { initContentWatcher } from \"./content/content-watcher\";\n\nexport const CONFIG_VIRTUAL_ID = \"virtual:prestige/config\";\n\nexport default function prestige(inlineConfig?: PrestigeConfigInput): Plugin {\n let config: PrestigeConfig;\n let contentDir: string;\n let isDocsMatcher: Matcher;\n let collections: Collections = [];\n let linksMap: Map<string, SidebarLinkType[]>;\n let collectionNavigations: string;\n let sidebarsMap: Map<string, SidebarType>;\n let logger: Logger;\n\n return {\n name: \"vite-plugin-prestige\",\n enforce: \"pre\",\n async configResolved(resolvedConfig) {\n const { config: loadedConfig } = await resolvePrestigeConfig(\n inlineConfig,\n resolvedConfig.root,\n );\n\n config = loadedConfig;\n logger = createLogger({\n disabled: config.disableLog,\n debug: config.enableDebugLog,\n });\n\n contentDir = join(resolvedConfig.root, \"src/content\");\n isDocsMatcher = picomatch(join(contentDir, \"**/*.{md,mdx}\"));\n collections = config.collections ?? [];\n\n logger.debug(\"Resolving sidebars...\");\n sidebarsMap = await resolveSidebars(collections, contentDir, logger);\n\n logger.debug(\"Resolving content links...\");\n linksMap = resolveContentLinks(sidebarsMap);\n\n logger.debug(\"Resolving collection navigations....\");\n collectionNavigations = resolveCollectionNavigations(\n collections,\n linksMap,\n );\n const routesDir = join(resolvedConfig.root, \"src\", \"routes\");\n\n logger.debug(\"Compiling routes...\");\n await compileRoutes(linksMap, routesDir, logger);\n },\n configureServer(server) {\n const contentWatcher = initContentWatcher(contentDir, () => {\n server.restart();\n });\n server.httpServer?.on(\"close\", () => {\n contentWatcher();\n });\n },\n resolveId(id) {\n // even though the import will be import * from \"virtual:prestige/docs/introduction\"\n // it is not guaranteed that some other plugin doesn't modify this import and attach full path\n // we call extractVirtualId to trim the import\n\n if (id.includes(CONFIG_VIRTUAL_ID)) {\n logger.debug(`Resolving config virtual ID: ${id}`);\n return extractVirtualId(id, CONFIG_VIRTUAL_ID);\n }\n\n if (id.includes(CONTENT_VIRTUAL_ID)) {\n logger.debug(`Resolving content virtual ID: ${id}`);\n return extractVirtualId(id, CONTENT_VIRTUAL_ID);\n }\n\n if (id.includes(COLLECTION_VIRTUAL_ID)) {\n logger.debug(`Resolving collection virtual ID: ${id}`);\n return extractVirtualId(id, COLLECTION_VIRTUAL_ID);\n }\n\n if (id.includes(SIDEBAR_VIRTUAL_ID)) {\n logger.debug(`Resolving sidebar virtual ID: ${id}`);\n return extractVirtualId(id, SIDEBAR_VIRTUAL_ID);\n }\n\n return null;\n },\n async load(id) {\n if (id === `\\0${CONFIG_VIRTUAL_ID}`) {\n logger.debug(`Loading config virtual module: ${id}`);\n return genExportDefault(JSON.stringify(config));\n }\n if (id.includes(CONTENT_VIRTUAL_ID)) {\n logger.debug(`Loading content virtual module: ${id}`);\n return await resolveContent(id, linksMap, contentDir);\n }\n if (id.includes(COLLECTION_VIRTUAL_ID)) {\n logger.debug(`Loading collection virtual module: ${id}`);\n return collectionNavigations;\n }\n\n if (id.includes(SIDEBAR_VIRTUAL_ID)) {\n logger.debug(`Loading sidebar virtual module: ${id}`);\n const sidebarId = id.replace(SIDEBAR_VIRTUAL_ID, \"\").replace(\"\\0\", \"\");\n const sidebar = sidebarsMap.get(sidebarId);\n if (!sidebar) {\n return genExportUndefined();\n }\n return genExportDefault(genObjectFromValues(sidebar));\n }\n\n return null;\n },\n\n async hotUpdate({ file, timestamp, type }) {\n if (type !== \"update\" || !isDocsMatcher(file)) {\n return;\n }\n logger.debug(`Invalidating module ${file}...`);\n const invalidatedModules = new Set<EnvironmentModuleNode>();\n const slug = getSlugByPath(file, contentDir);\n const virtualModuleId = `\\0${CONTENT_VIRTUAL_ID}${slug}`;\n const module =\n this.environment.moduleGraph.getModuleById(virtualModuleId);\n if (module) {\n this.environment.moduleGraph.invalidateModule(\n module,\n invalidatedModules,\n timestamp,\n true,\n );\n logger.debug(`Reloading application...`);\n this.environment.hot.send({ type: \"full-reload\" });\n }\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAa,gBAAb,cAAmC,MAAM;;;;;AAMzC,SAAgB,wBAA2C,GAAM,OAAiB,SAAiB;AACjG,KAAI;AACF,SAAO,EAAE,MAAM,MAAM;UACd,GAAG;AACV,MAAI,aAAa,MACf,OAAM,IAAI,cAAc,yBAAyB,QAAQ,gBAAgB,EAAE,QAAQ,GAAG;MAEtF,OAAM,IAAI,cAAc,yBAAyB,QAAQ,GAAG;;;;;;ACblE,MAAa,2BAA2B,EAAE,OAAO;CAC/C,OAAO,EAAE,QAAQ,CAAC,SAAS,2BAA2B;CACtD,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,iCAAiC;CAC7E,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,2BAA2B;CAClE,CAAC;AAIF,MAAa,gBAAgB,EAAE,OAAO;CACpC,QAAQ;CACR,MAAM,EAAE,QAAQ,CAAC,SAAS,0BAA0B;CACrD,CAAC;AAIF,MAAM,+BAA+B,EAAE,MAAM,CAC3C,EAAE,OAAO;CACP,OAAO,EAAE,QAAQ;CACjB,MAAM,EAAE,QAAQ;CACjB,CAAC,EACF,EAAE,QAAQ,CACX,CAAC;AAEF,MAAM,+BAA+B,EAAE,OAAO;CAC5C,OAAO,EAAE,QAAQ;CACjB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAsBF,MAAMA,wBACJ,EAAE,OAAO;CACP,OAAO,EAAE,QAAQ;CACjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC,CAAC,UAAU;CAC7D,WAAW,EAAE,SAAS,CAAC,UAAU;CACjC,cAAc,EACX,OAAO,EACN,WAAW,EAAE,QAAQ,EACtB,CAAC,CACD,UAAU;CACd,CAAC;AAEJ,MAAMC,uBAAkE,EAAE,MACxE;CACE;CACA;CACA,EAAE,WAAW,sBAAsB;CACpC,CACF;AAED,MAAa,mBAAmB,EAAE,OAAO;CACvC,IAAI,EACD,QAAQ,CACR,IAAI,GAAG,EAAE,SAAS,+BAA+B,CAAC,CAClD,IAAI,IAAI,EAAE,SAAS,wBAAwB,CAAC,CAE5C,MAAM,oBAAoB,EACzB,SAAS,uDACV,CAAC,CACD,SAAS,uDAAuD;CACnE,OAAO,EAAE,MAAM,qBAAqB;CACpC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,8BAA8B;CACpE,aAAa,EACV,QAAQ,CACR,UAAU,CACV,SAAS,qCAAqC;CAClD,CAAC;AAYF,MAAa,oBAAoB,EAAE,MAAM,iBAAiB;;;;AC5F1D,MAAa,uBAAuB,EAAE,OAAO;CAC3C,OAAO,EAAE,QAAQ,CAAC,SAAS,uBAAuB;CAClD,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,cAAc;CACrD,YAAY,EACT,SAAS,CACT,UAAU,CACV,QAAQ,MAAM,CACd,SAAS,mCAAmC;CAC/C,gBAAgB,EACb,SAAS,CACT,UAAU,CACV,QAAQ,MAAM,CACd,SAAS,qCAAqC;CACjD,SAAS,EACN,OAAO;EACN,OAAO,EAAE,QAAQ,CAAC,SAAS,iBAAiB;EAC5C,QAAQ,EAAE,QAAQ,CAAC,SAAS,kBAAkB;EAC9C,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,kBAAkB;EACzD,CAAC,CACD,UAAU,CACV,SAAS,kBAAkB;CAC9B,SAAS,EACN,OAAO;EACN,OAAO,EAAE,QAAQ,CAAC,SAAS,gBAAgB;EAC3C,KAAK,EAAE,QAAQ,CAAC,SAAS,cAAc;EACxC,CAAC,CACD,UAAU,CACV,SAAS,kBAAkB;CAC9B,aAAa;CACb,UAAU,EACP,OAAO;EACN,YAAY,EACT,QAA0B,CAC1B,UAAU,CACV,SAAS,yBAAyB;EACrC,eAAe,EACZ,QAAuB,CACvB,UAAU,CACV,SAAS,4BAA4B;EACxC,eAAe,EACZ,QAAuB,CACvB,UAAU,CACV,SAAS,4BAA4B;EACxC,mBAAmB,EAChB,QAA4B,CAC5B,UAAU,CACV,SAAS,kCAAkC;EAC9C,YAAY,EACT,QAEG,CACH,UAAU,CACV,SAAS,0BAA0B;EACvC,CAAC,CACD,UAAU,CACV,SAAS,qDAAqD;CAClE,CAAC;;;;AC3DF,eAAsB,WAAW,MAAc;AAC7C,KAAI;AACF,QAAM,KAAK,KAAK;AAChB,SAAO;SACD;AACN,SAAO;;;AA6BX,SAAgB,iBAAiB,QAAgB,eAAuB;CACtE,MAAM,aAAa,OAAO,QAAQ,cAAc;AAChD,KAAI,eAAe,GAEjB,QAAO,OAAO,OAAO,MAAM,WAAW;AAExC,QAAO;;;;;ACtCT,SAAgB,eAAe,QAA6B;AAC1D,QAAO,wBAAwB,sBAAsB,QAAQ,iBAAiB;;AAGhF,eAAsB,sBACpB,aACA,MACA;AACA,KAAI,CAAC,YACH,OAAM,IAAI,cAAc,8BAA8B;CAGxD,MAAM,kBAAkB,eAAe,YAAY;CACnD,MAAM,cAAc,KAAK,MAAM,cAAc;AAE7C,KAAI,CAAE,MAAM,WAAW,YAAY,CACjC,OAAM,IAAI,cAAc,8BAA8B,cAAc;AAGtE,QAAO;EAAE,QAAQ;EAAiB,aAAa;EAAa;;;;;ACtB9D,SAAgB,oBAAoB,UAAoC;CACtE,MAAM,wBAAQ,IAAI,KAAgC;AAClD,MAAK,MAAM,CAAC,KAAK,YAAY,UAAU;EACrC,MAAMC,eAAkC,EAAE;AAC1C,OAAK,MAAM,QAAQ,QAAQ,MACzB,eAAY,MAAM,aAAa;AAEjC,QAAM,IAAI,KAAK,aAAa;;AAE9B,QAAO;;AAGT,SAASC,cAAY,MAAuB,QAA2B,EAAE,EAAE;AACzE,KAAI,UAAU,QAAQ,UAAU,KAC9B,OAAM,KAAK,KAAK;UACP,WAAW,KACpB,MAAK,MAAM,aAAa,KAAK,MAC3B,eAAY,WAAW,MAAM;AAGjC,QAAO;;;;;ACNT,SAAwB,oBAAoB;AAC1C,SAAQ,SAAe;AACrB,QAAM,OAAO,SAAc;AACzB,OACE,KAAK,SAAS,mBACd,KAAK,SAAS,mBACd,KAAK,SAAS,sBACd;AACA,QAAI,KAAK,SAAS,sBAAsB;KACtC,MAAMC,SAAO,KAAK,SAAS,KAAK,OAAO,EAAE;KACzC,MAAM,OAAO,EAAE,KAAK,SAAS,kBAAkB,SAAS,SAAS;MAC/D,WAAW,CAAC,cAAc,cAAc,KAAK,OAAO;MACpD,GAAG,KAAK;MACT,CAAC;AACF,YAAK,QAAQ,KAAK;AAClB,YAAK,cAAc,KAAK;AACxB;;IAGF,MAAM,OAAO;KAAC;KAAQ;KAAO;KAAW;KAAS,CAAC,SAAS,KAAK,KAAK,GACjE,KAAK,OACL;IAEJ,MAAMC,UAAiE;KACrE,MAAM;KACN,KAAK;KACL,SACE;KACF,QACE;KACH;IAED,MAAM,OAAO,KAAK,SAAS,KAAK,OAAO,EAAE;AACzC,SAAK,QAAQ;AACb,SAAK,cAAc;KACjB,cAAc,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,MAAM,EAAE;KAC1D,WAAW;MACT;MACA;MACA;MACA;MACA;MACA;MACA,IAAI,QAAQ,SAAiC,QAAQ,SAAS,MAC5D,IACD;MACF;KACD,GAAG,KAAK;KACT;IAED,IAAI,iBAAiB,KAAK,SAAS,WAChC,MAAW,EAAE,MAAM,eACrB;IACD,IAAIC;AAEJ,QAAI,mBAAmB,IAAI;AACzB,qBAAgB,KAAK,SAAS,gBAAgB;AAC9C,UAAK,SAAS,OAAO,gBAAgB,EAAE;UAEvC,iBAAgB,CACd;KACE,MAAM;KACN,OAAO,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,MAAM,EAAE;KACpD,CACF;IAGH,MAAM,eAAe,MAAc;KACjC,MAAM,QAAQ;MACZ,OAAO;MACP,OAAO;MACP,QAAQ;MACR,SAAS;MACT,MAAM;MACN,QAAQ;MACR,aAAa;MACb,eAAe;MACf,gBAAgB;MAChB,WAAW;OAAC;OAAO;OAAO;OAAgB;MAC3C;AACD,SAAI,MAAM,OACR,QAAO,EAAE,OAAO,OAAO;MACrB,EAAE,UAAU;OAAE,IAAI;OAAM,IAAI;OAAM,GAAG;OAAM,CAAC;MAC5C,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC;MAC7B,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC;MAC9B,CAAC;AACJ,SAAI,MAAM,MACR,QAAO,EAAE,OAAO,OAAO;MACrB,EAAE,QAAQ,EACR,GAAG,6FACJ,CAAC;MACF,EAAE,QAAQ,EACR,GAAG,mGACJ,CAAC;MACF,EAAE,QAAQ,EAAE,GAAG,0CAA0C,CAAC;MAC1D,EAAE,QAAQ,EAAE,GAAG,2CAA2C,CAAC;MAC5D,CAAC;AACJ,SAAI,MAAM,UACR,QAAO,EAAE,OAAO,OAAO;MACrB,EAAE,QAAQ,EACR,GAAG,6EACJ,CAAC;MACF,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;MAC3B,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;MAC/B,CAAC;AACJ,SAAI,MAAM,SACR,QAAO,EAAE,OAAO,OAAO;MACrB,EAAE,WAAW,EACX,QACE,0EACH,CAAC;MACF,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;MAC3B,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;MAC/B,CAAC;AACJ,YAAO;;AA4CT,SAAK,WAAW,CAzCG;KACjB,MAAM;KACN,MAAM;MACJ,OAAO;MACP,aAAa,EACX,WAAW;OACT;OACA;OACA;OACA;OACA;OACA;OACA;OACD,EACF;MACF;KACD,UAAU,CACR;MACE,MAAM;MACN,OAAO;MACP,MAAM;OAAE,OAAO;OAAQ,WAAW,CAAC,YAAY,KAAK,CAAC;OAAE;MACxD,EACD,GAAG,cACJ;KACF,EAEoB;KACnB,MAAM;KACN,MAAM;MACJ,OAAO;MACP,aAAa,EACX,WAAW;OACT;OACA;OACA;OACD,EACF;MACF;KACD,UAAU,KAAK;KAChB,CAEyC;;IAE5C;;;AAIN,SAAgB,yBAAyB;AACvC,SAAQ,SAAe;AACrB,QAAM,OAAO,SAAc;AAEzB,OAAI,KAAK,SAAS,aAAa,KAAK,YAAY,OAAO;AACrD,SAAK,aAAa,KAAK,cAAc,EAAE;IAGvC,MAAM,eAAe,KAAK,WAAW,aAAa,EAAE;AACpD,SAAK,WAAW,YAAY,MAAM,QAAQ,aAAa,GACnD,CAAC,GAAG,cAAc,YAAY,GAC9B,CAAC,cAAc,YAAY;;IAEjC;;;AAIN,eAAsB,gBACpB,SACA,SACA,SACA;CACA,MAAMC,MAAiB,EAAE;CAkBzB,MAAM,OAAO,MAAM,QAAQ,SAAS;EAClC,cAAc;EACd,eAlBmC;GACnC,GAAI,SAAS,iBAAiB,EAAE;GAChC;GACA,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,OAAO,EAAE,CAAC;GACtD;GACD;EAcC,eAZmC;GACnC,GAAI,SAAS,iBAAiB,EAAE;GAChC;GACA,CAAC,WAAW,SAAS,cAAc,EAAE,CAAC;GACtC;GACA;GACA,CAAC,mBAAmB,EAAE,QAAQ,KAAK,CAAC;GACrC;EAMU;EACV,CAAC;AACF,QAAO;EAAE,MAAM,OAAO,KAAK;EAAE;EAAK;;AAGpC,eAAsB,mBAAmB,OAAc;AAErD,QADe,OAAO,OAAO,MAAM,MAAM,CAAC,CAC5B,QAAQ,EAAE;;;;;ACzN1B,MAAa,qBAAqB;AAElC,SAAS,eACP,MACmC;AACnC,KAAI,CAAC,KACH;AAEF,QAAO;EACL,OAAO,KAAK;EACZ,MAAM,UAAU,OAAO,KAAK,OAAO,KAAK;EACzC;;AAGH,SAAgB,gBACd,MACA,MACA,UACA;CACA,MAAM,QAAQ,SAAS,IAAI,KAAK;AAChC,KAAI,CAAC,OAAO,OACV,QAAO;EAAE,MAAM;EAAW,MAAM;EAAW;CAG7C,MAAM,aAAa,MAAM,QAAQ,MAAM;AACrC,MAAI,UAAU,EAAG,QAAO;AACxB,MAAI,UAAU,EACZ,QAAO,CAAC,EAAE,KAAK,WAAW,UAAU,IAAI,CAAC,EAAE,KAAK,WAAW,WAAW;AAExE,SAAO;GACP;CAEF,MAAM,YAAY,WAAW,WAAW,SAAS;AAC/C,SACG,UAAU,QAAQ,KAAK,SAAS,QAChC,UAAU,QAAQ,KAAK,SAAS;GAEnC;CAEF,IAAIC;CACJ,IAAIC;AAEJ,KAAI,cAAc,IAAI;AACpB,MAAI,YAAY,EACd,QAAO,eAAe,WAAW,YAAY,GAAG;AAElD,MAAI,YAAY,WAAW,SAAS,EAClC,QAAO,eAAe,WAAW,YAAY,GAAG;;AAIpD,QAAO;EAAE;EAAM;EAAM;;AAGvB,eAAsB,gBAAgB,MAAc,YAAoB;CACtE,MAAM,WAAW,MAAM,cAAc,MAAM,WAAW;CACtD,MAAM,UAAU,cAAc,SAAS,CAAC;CACxC,MAAM,OAAO,MAAM,KAAK,SAAS;CACjC,MAAM,cAAc,MAAM,mBAAmB,KAAK;CAClD,MAAM,EAAE,MAAM,QAAQ,MAAM,gBAAgB,MAAM,QAAQ;AAC1D,QAAO;EAAE;EAAM;EAAK;EAAa;;AAGnC,eAAsB,eACpB,IACA,UACA,YACA;CACA,MAAM,OAAO,GAAG,QAAQ,oBAAoB,GAAG,CAAC,QAAQ,MAAM,GAAG;CACjE,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC;CAE7B,MAAM,EAAE,MAAM,SAAS,gBAAgB,MAAM,MAAM,SAAS;CAC5D,MAAM,EAAE,KAAK,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,WAAW;CAC1E,IAAI,eAAe;AAEnB,iBAAgB,yBAAyB,KAAK,UAAU,IAAI,CAAC;AAC7D,iBAAgB,0BAA0B,KAAK,UAAU,KAAK,CAAC;AAC/D,iBAAgB,0BAA0B,KAAK,UAAU,KAAK,CAAC;AAC/D,iBAAgB,iCAAiC,KAAK,UACpD,YACD,CAAC;AACF,QAAO;;AAGT,eAAsB,cAAc,MAAc,YAAoB;CACpE,MAAM,YAAYC,OAAK,YAAY,KAAK;CACxC,MAAM,UAAU,MAAM,KAAK,GAAG,UAAU,WAAW;AACnD,KAAI,QAAQ,WAAW,EACrB,OAAM,IAAI,cACR,sDAAsD,KAAK,kBAAkB,UAAU,+DAA+D,KAAK,wBAAwB,KAAK,+BACzL;AAEH,QAAO,QAAQ;;AAGjB,eAAsB,cAAc,MAAc,YAAoB;AACpE,QAAO,MAAM,KAAK,MAAM,cAAc,MAAM,WAAW,CAAC;;AAQ1D,SAAgB,cAAc,MAAc,YAAoB;CAK9D,MAAM,WAAW,MAHI,SAAS,YAAY,KAAK,CAGX;AAIpC,QAFeA,OAAK,SAAS,KAAK,SAAS,KAAK;;;;;ACtGlD,MAAa,qBAAqB;AAElC,SAAS,eAAe,OAAmD;AACzE,QAAO,MAAM,SAAS,SAAS;AAC7B,MAAI,UAAU,KACZ,QAAO,CAAC;GAAE,OAAO,KAAK;GAAO,MAAM,IAAI,KAAK;GAAQ,CAAC;AAEvD,MAAI,UAAU,MAAM;AAElB,OAAI,KAAK,KAAK,WAAW,UAAU,IAAI,KAAK,KAAK,WAAW,WAAW,CACrE,QAAO,EAAE;AAEX,UAAO,CAAC;IAAE,OAAO,KAAK;IAAO,MAAM,KAAK;IAAM,CAAC;;AAEjD,MAAI,WAAW,KACb,QAAO,eAAe,KAAK,MAAM;AAEnC,SAAO,EAAE;GACT;;AAGJ,SAAS,kBACP,OACiC;CACjC,MAAM,iBAAiB,eAAe,MAAM;CAC5C,MAAMC,aAA8C,EAAE;AAEtD,MAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;EAC9C,MAAM,OAAO,eAAe;AAC5B,MAAI,KACF,YAAW,KAAK,QAAQ;GACtB,MAAM,IAAI,IAAI,eAAe,IAAI,KAAK;GACtC,MAAM,IAAI,eAAe,SAAS,IAAI,eAAe,IAAI,KAAK;GAC/D;;AAIL,QAAO;;AAGT,SAAS,mBACP,OACA,aACoB;AACpB,KAAI,YACF,QAAO;AAET,MAAK,MAAM,QAAQ,MACjB,KAAI,UAAU,KACZ,QAAO,KAAK;UACH,UAAU,KACnB,QAAO,KAAK;UACH,WAAW,QAAQ,KAAK,MAAM,SAAS,GAAG;EACnD,MAAM,OAAO,mBAAmB,KAAK,MAAM;AAC3C,MAAI,KAAM,QAAO;;;AAMvB,eAAsB,gBACpB,aACA,YACA,QACA;CACA,MAAM,wBAAQ,IAAI,KAA0B;AAE5C,MAAK,MAAM,cAAc,aAAa;EACpC,MAAM,UAAU,MAAM,kBAAkB,YAAY,YAAY,OAAO;AACvE,QAAM,IAAI,WAAW,IAAI,QAAQ;;AAEnC,QAAO;;;AAIT,eAAe,kBACb,YACA,YACA,QACsB;CACtB,MAAMC,QAA2B,EAAE;AACnC,MAAK,MAAM,QAAQ,WAAW,MAC5B,OAAM,KAAK,MAAM,YAAY,MAAM,YAAY,OAAO,CAAC;CAEzD,MAAM,cAAc,mBAAmB,OAAO,WAAW,YAAY;AACrE,KAAI,CAAC,YACH,OAAM,IAAI,cACR,4GAA4G,WAAW,KACxH;AAEH,QAAO;EACL;EACa;EACb,YAAY,kBAAkB,MAAM;EACrC;;;AAIH,eAAe,YACb,MACA,YACA,QAC0B;AAC1B,KAAI,OAAO,SAAS,YAAY,UAAU,KACxC,QAAO,2BACL,MACA,WACD;UACQ,UAAU,KACnB,QAAO,mBAAmB,MAAM,WAAW;KAE3C,QAAO,oBAAoB,MAAyB,YAAY,OAAO;;;AAK3E,eAAe,oBACb,OACA,YACA,QAC2B;CAC3B,MAAM,QAAQ,MAAM,aAAa,OAAO,WAAW;CACnD,MAAMA,QAA2B,EAAE;AAEnC,KAAI,MAAM,OAAO,UAAU,MAAM,aAC/B,QAAO,KACL,GAAG,MAAM,MAAM,4DAChB;AAGH,KAAI,MAAM,MACR,MAAK,MAAM,aAAa,MAAM,MAC5B,OAAM,KAAK,MAAM,YAAY,WAAW,YAAY,OAAO,CAAC;UAErD,MAAM,cAAc,WAAW;EACxC,MAAM,iBAAiB,MAAM,oBAC3B,MAAM,aAAa,WACnB,YACA,OACD;AACD,QAAM,KAAK,GAAG,eAAe;;AAG/B,QAAO;EACL;EACA,WAAW,MAAM;EACjB;EACD;;;AAIH,eAAe,2BACb,MACA,YACkC;CAClC,MAAM,QAAQ,MAAM,aAAa,MAAM,WAAW;CAClD,MAAM,OAAO,YAAY,KAAK;AAE9B,KAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,CAC5C,OAAM,IAAI,cACR,YAAY,KAAK,6DAClB;AAGH,KAAI,CAAC,KACH,OAAM,IAAI,cACR,oEAAoE,QACrE;AAGH,QAAO;EACL;EACA;EACD;;;AAIH,eAAe,mBACb,MACA,YACkC;CAClC,MAAM,QAAQ,MAAM,aAAa,MAAM,WAAW;CAClD,MAAM,OAAO,YAAY,KAAK;AAE9B,KAAI,CAAC,KACH,OAAM,IAAI,cACR,oEAAoE,QACrE;AAGH,QAAO;EACL;EACA;EACD;;;AAIH,eAAe,oBACb,WACA,YACA,QAC4B;CAC5B,MAAM,eAAe;CAErB,MAAMA,QAA2B,EAAE;CACnC,MAAM,UAAU,KAAK,YAAY,UAAU;AAC3C,KAAI,CAAE,MAAM,WAAW,QAAQ,EAAG;AAChC,SAAO,KAAK,4BAA4B,YAAY;AACpD,SAAO,EAAE;;CAGX,MAAM,UAAU,MAAM,QAAQ,SAAS,EAAE,eAAe,MAAM,CAAC;AAC/D,SAAQ,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC;AACpD,MAAK,MAAM,UAAU,QACnB,KAAI,OAAO,aAAa,EAAE;EACxB,MAAM,SAAS,KAAK,WAAW,OAAO,KAAK;EAC3C,MAAMC,QAAyB;GAC7B,OAAO,OAAO;GACd,cAAc,EAAE,WAAW,QAAQ;GACpC;AACD,QAAM,KAAK,MAAM,oBAAoB,OAAO,YAAY,OAAO,CAAC;YACvD,OAAO,QAAQ,IAAI,aAAa,KAAK,OAAO,KAAK,EAAE;EAE5D,MAAM,OADW,KAAK,WAAW,OAAO,KAAK,CACvB,QAAQ,cAAc,GAAG;AAC/C,QAAM,KAAK,MAAM,2BAA2B,MAAM,WAAW,CAAC;;AAGlE,QAAO;;;AAIT,eAAe,aACb,MACA,YACiB;AACjB,KAAI,OAAO,SAAS,YAAY,WAAW,QAAQ,KAAK,MACtD,QAAO,KAAK;AAGd,KAAI,OAAO,SAAS,YAAY,UAAU,MAAM;EAC9C,MAAM,OAAO,YAAY,KAAK;EAE9B,MAAM,OAAO,MAAM,cAAc,MAAM,WAAW;AAClD,MAAI,CAAC,KACH,OAAM,IAAI,cACR,sCAAsC,KAAK,6CAC5C;EAEH,MAAM,OAAQ,MAAM,mBAAmB,KAAK;AAC5C,MAAI,MAAM,MACR,QAAO,MAAM;AAGf,SAAO,SAAS,KAAK;;AAIvB,KAAI,OAAO,SAAS,aAAa,WAAW,QAAQ,kBAAkB,MACpE,QAAO,KAAK;AAGd,QAAO;;;AAIT,SAAgB,YAAY,MAAsB;AAChD,KAAI,OAAO,SAAS,SAClB,QAAO;MACF;AACL,MAAI,UAAU,KACZ,QAAO,KAAK;AAEd,SAAO;;;;AAKX,SAAgB,YAAY,MAAsB;AAChD,KAAI,OAAO,SAAS,YAAY,UAAU,KACxC,QAAO,KAAK;AAEd,QAAO;;;;;AC3ST,eAAsB,cACpB,UACA,WACA,QACA;CAEA,MAAM,mBAAmBC,OAAK,WADT,aACiC;AAEtD,KAAI;AACF,QAAM,MAAM,kBAAkB,EAAE,WAAW,MAAM,CAAC;EAElD,MAAM,iCAAiB,IAAI,KAAqB;AAEhD,OAAK,MAAM,CAAC,KAAK,UAAU,UAAU;GACnC,MAAM,oBAAoB,MAAM,QAAQ,MAAM,UAAU,EAAE;GAG1D,MAAM,cADc,MACc;AAClC,kBAAe,IAAI,aAAa,kBAAkB,IAAI,CAAC;AAEvD,QAAK,MAAM,KAAK,mBAAmB;IACjC,MAAM,YAAY,EAAE,KAAK,WAAW,KAAK,IAAI;AAC7C,mBAAe,IAAI,YAAY,QAAQ,uBAAuB,EAAE,KAAK,CAAC;AACtE,mBAAe,IAAI,YAAY,aAAa,mBAAmB,EAAE,KAAK,CAAC;;;AAK3E,QAAM,QAAQ,IACZ,CAAC,GAAG,eAAe,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,cAAc;GAChE,MAAM,WAAWA,OAAK,kBAAkB,SAAS;AACjD,OAAI;AAEF,QADwB,MAAM,SAAS,UAAU,QAAQ,KACjC,SACtB;YAEK,GAAG;AAGZ,UAAO,KAAK,uBAAuB,WAAW;AAC9C,UAAO,UAAU,UAAU,SAAS;IACpC,CACH;EAED,MAAM,gBAAgB,MAAM,QAAQ,iBAAiB;EACrD,MAAM,iBAAiB,cAAc,QAClC,aACC,SAAS,SAAS,YAAY,IAAI,CAAC,eAAe,IAAI,SAAS,CAClE;EACD,MAAM,iBAAiB,eACpB,KAAK,aAAa,SAAS,QAAQ,aAAa,OAAO,CAAC,CACxD,QACE,aACC,cAAc,SAAS,SAAS,IAAI,CAAC,eAAe,IAAI,SAAS,CACpE;EACH,MAAM,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAEvE,QAAM,QAAQ,IACZ,WAAW,KAAK,aAAa;AAC3B,UAAO,MAAM,8BAA8B,WAAW;AACtD,UAAO,OAAOA,OAAK,kBAAkB,SAAS,CAAC;IAC/C,CACH;UACM,OAAO;AACd,SAAO,MACL,wDAAwD,QACzD;AACD,UAAQ,MACN,wDACA,MACD;;;AAIL,SAAS,kBAAkB,IAAY;AACrC,QACE;;gDAE4C,GAAG;;;wDAGK,GAAG,+BAA+B,GAAG;EAC3F,MAAM,GAAG;;AAIX,SAAS,uBAAuB,MAAc;AAC5C,QACE;;yDAEqD,KAAK;;;oDAGV,KAAK;EACvD,MAAM,GAAG;;AAIX,SAAS,mBAAmB,MAAc;AACxC,QACE;;yDAEqD,KAAK;;;wDAGN,KAAK;EAC3D,MAAM,GAAG;;;;;AC7GX,SAAgB,iBAAiB,WAAmB;AAClD,QAAO,kBAAkB,UAAU;;;AAIrC,SAAgB,qBAAqB;AACnC,QAAO,iBAAiB,YAAY;;;;;ACCtC,MAAa,wBAAwB;AAErC,SAAgB,6BACd,mBACA,UACA;CACA,MAAMC,cAAsC,kBAAkB,KAAK,OAAO;EACxE,IAAI,EAAE;EACN,OAAO,EAAE,SAAS,EAAE;EACpB,aAAa,EAAE,eAAe;EAC/B,EAAE;AACH,KAAI,YAAY,WAAW,EACzB,OAAM,IAAI,cACR,0DACD;AAGH,MAAK,MAAM,QAAQ,aAAa;EAE9B,MAAM,oBADQ,SAAS,IAAI,KAAK,GAAG,EACF,MAAK,MAAK,UAAU,EAAE;AACvD,MAAI,KAAK,eAAe,CAAC,kBACvB;AAEF,OAAK,cAAc,kBAAkB;;AAGvC,MAAK,MAAM,QAAQ,YACjB,KAAI,CAAC,KAAK,YACR,SAAQ,KACN,wCAAwC,KAAK,GAAG,kDACjD;AAML,QAAO,iBACL,gBAHuB,YAAY,QAAQ,MAAM,EAAE,YAAY,CAG9B,KAAK,MAAM,oBAAoB,EAAE,CAAC,CAAC,CACrE;;;;;ACvCH,SAAgB,aAAa,QAGlB;CACT,SAAS,cAAc,SAAiB;EAItC,MAAM,6BAHM,IAAI,MAAM,EAGA,mBAAmB,SAAS;GAChD,QAAQ;GACR,MAAM;GACN,QAAQ;GACR,QAAQ;GACT,CAAC;AAIF,SADoB,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK,aAAa,CAAC,CAAC,GAAG;;AAIhF,QAAO;EACL,QAAQ,YAAoB;AAC1B,OAAI,CAAC,OAAO,YAAY,OAAO,MAC7B,SAAQ,MAAM,cAAc,GAAG,KAAK,QAAQ,CAAC,CAAC;;EAElD,OAAO,YAAoB;AACzB,OAAI,CAAC,OAAO,SAAU,SAAQ,KAAK,cAAc,GAAG,MAAM,QAAQ,CAAC,CAAC;;EAEtE,OAAO,YAAoB;AACzB,OAAI,CAAC,OAAO,SAAU,SAAQ,KAAK,cAAc,GAAG,OAAO,QAAQ,CAAC,CAAC;;EAEvE,QAAQ,YAAoB;AAC1B,OAAI,CAAC,OAAO,SAAU,SAAQ,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,CAAC;;EAEtE;;;;;ACvCH,SAAgB,mBAAmB,YAAoB,UAAsB;CAE3E,MAAM,iBAAiB,SAAS,UADR,IACkC;CAE1D,MAAM,UAAU,SACb,MAAM,YAAY;EACjB,kBAAkB;EAClB,eAAe;EAChB,CAAC,CACD,GAAG,QAAQ,UAAU;AACpB,MAAI,UAAU,SAAS,UAAU,SAC/B;AAIF,kBAAgB;GAChB;AAEJ,cAAa;AACX,iBAAe,OAAO;AACtB,SAAO,QAAQ,OAAO;;;;;;ACS1B,MAAa,oBAAoB;AAEjC,SAAwB,SAAS,cAA4C;CAC3E,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC,cAA2B,EAAE;CACjC,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;AAEJ,QAAO;EACL,MAAM;EACN,SAAS;EACT,MAAM,eAAe,gBAAgB;GACnC,MAAM,EAAE,QAAQ,iBAAiB,MAAM,sBACrC,cACA,eAAe,KAChB;AAED,YAAS;AACT,YAAS,aAAa;IACpB,UAAU,OAAO;IACjB,OAAO,OAAO;IACf,CAAC;AAEF,gBAAa,KAAK,eAAe,MAAM,cAAc;AACrD,mBAAgB,UAAU,KAAK,YAAY,gBAAgB,CAAC;AAC5D,iBAAc,OAAO,eAAe,EAAE;AAEtC,UAAO,MAAM,wBAAwB;AACrC,iBAAc,MAAM,gBAAgB,aAAa,YAAY,OAAO;AAEpE,UAAO,MAAM,6BAA6B;AAC1C,cAAW,oBAAoB,YAAY;AAE3C,UAAO,MAAM,uCAAuC;AACpD,2BAAwB,6BACtB,aACA,SACD;GACD,MAAM,YAAY,KAAK,eAAe,MAAM,OAAO,SAAS;AAE5D,UAAO,MAAM,sBAAsB;AACnC,SAAM,cAAc,UAAU,WAAW,OAAO;;EAElD,gBAAgB,QAAQ;GACtB,MAAM,iBAAiB,mBAAmB,kBAAkB;AAC1D,WAAO,SAAS;KAChB;AACF,UAAO,YAAY,GAAG,eAAe;AACnC,oBAAgB;KAChB;;EAEJ,UAAU,IAAI;AAKZ,OAAI,GAAG,SAAS,kBAAkB,EAAE;AAClC,WAAO,MAAM,gCAAgC,KAAK;AAClD,WAAO,iBAAiB,IAAI,kBAAkB;;AAGhD,OAAI,GAAG,SAAS,mBAAmB,EAAE;AACnC,WAAO,MAAM,iCAAiC,KAAK;AACnD,WAAO,iBAAiB,IAAI,mBAAmB;;AAGjD,OAAI,GAAG,SAAS,sBAAsB,EAAE;AACtC,WAAO,MAAM,oCAAoC,KAAK;AACtD,WAAO,iBAAiB,IAAI,sBAAsB;;AAGpD,OAAI,GAAG,SAAS,mBAAmB,EAAE;AACnC,WAAO,MAAM,iCAAiC,KAAK;AACnD,WAAO,iBAAiB,IAAI,mBAAmB;;AAGjD,UAAO;;EAET,MAAM,KAAK,IAAI;AACb,OAAI,OAAO,KAAK,qBAAqB;AACnC,WAAO,MAAM,kCAAkC,KAAK;AACpD,WAAO,iBAAiB,KAAK,UAAU,OAAO,CAAC;;AAEjD,OAAI,GAAG,SAAS,mBAAmB,EAAE;AACnC,WAAO,MAAM,mCAAmC,KAAK;AACrD,WAAO,MAAM,eAAe,IAAI,UAAU,WAAW;;AAEvD,OAAI,GAAG,SAAS,sBAAsB,EAAE;AACtC,WAAO,MAAM,sCAAsC,KAAK;AACxD,WAAO;;AAGT,OAAI,GAAG,SAAS,mBAAmB,EAAE;AACnC,WAAO,MAAM,mCAAmC,KAAK;IACrD,MAAM,YAAY,GAAG,QAAQ,oBAAoB,GAAG,CAAC,QAAQ,MAAM,GAAG;IACtE,MAAM,UAAU,YAAY,IAAI,UAAU;AAC1C,QAAI,CAAC,QACH,QAAO,oBAAoB;AAE7B,WAAO,iBAAiB,oBAAoB,QAAQ,CAAC;;AAGvD,UAAO;;EAGT,MAAM,UAAU,EAAE,MAAM,WAAW,QAAQ;AACzC,OAAI,SAAS,YAAY,CAAC,cAAc,KAAK,CAC3C;AAEF,UAAO,MAAM,uBAAuB,KAAK,KAAK;GAC9C,MAAM,qCAAqB,IAAI,KAA4B;GAE3D,MAAM,kBAAkB,KAAK,qBADhB,cAAc,MAAM,WAAW;GAE5C,MAAM,SACJ,KAAK,YAAY,YAAY,cAAc,gBAAgB;AAC7D,OAAI,QAAQ;AACV,SAAK,YAAY,YAAY,iBAC3B,QACA,oBACA,WACA,KACD;AACD,WAAO,MAAM,2BAA2B;AACxC,SAAK,YAAY,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;;;EAGvD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lonik/prestige",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Static Site Generator for Tanstack Start",
|
|
5
5
|
"homepage": "https://github.com/lukonik/prestige#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"knitwork": "^1.3.0",
|
|
59
59
|
"lucide-react": "^0.545.0",
|
|
60
60
|
"pathe": "^2.0.3",
|
|
61
|
+
"picocolors": "^1.1.1",
|
|
61
62
|
"picomatch": "^4.0.3",
|
|
62
63
|
"prism-react-renderer": "^2.4.1",
|
|
63
64
|
"rehype-prism-plus": "^2.0.2",
|