@stainless-api/docs 0.1.0-beta.13 → 0.1.0-beta.130
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/CHANGELOG.md +1102 -0
- package/ambient.d.ts +6 -0
- package/eslint-suppressions.json +90 -0
- package/{eslint.config.js → eslint.config.ts} +0 -2
- package/locals.d.ts +17 -0
- package/package.json +62 -44
- package/playground-virtual-modules.d.ts +96 -0
- package/plugin/assets/languages/cli.svg +14 -0
- package/plugin/assets/languages/csharp.svg +1 -0
- package/plugin/assets/languages/php.svg +4 -0
- package/plugin/buildAlgoliaIndex.ts +40 -39
- package/plugin/components/MethodDescription.tsx +54 -0
- package/plugin/components/RequestBuilder/ParamEditor.tsx +55 -0
- package/plugin/components/RequestBuilder/SnippetStainlessIsland.tsx +107 -0
- package/plugin/components/RequestBuilder/index.tsx +40 -0
- package/plugin/components/RequestBuilder/props.ts +9 -0
- package/plugin/components/RequestBuilder/spec-helpers.ts +47 -0
- package/plugin/components/RequestBuilder/styles.css +67 -0
- package/plugin/components/SDKSelect.astro +18 -111
- package/plugin/components/SnippetCode.tsx +112 -70
- package/plugin/components/StainlessIslands.tsx +126 -0
- package/plugin/components/search/SearchAlgolia.astro +46 -29
- package/plugin/components/search/SearchIsland.tsx +61 -37
- package/plugin/generateAPIReferenceLink.ts +0 -40
- package/plugin/globalJs/ai-dropdown-options.ts +248 -0
- package/plugin/globalJs/code-snippets.ts +45 -16
- package/plugin/globalJs/copy.ts +115 -27
- package/plugin/globalJs/create-playground.shim.ts +3 -0
- package/plugin/globalJs/method-descriptions.ts +33 -0
- package/plugin/globalJs/navigation.ts +24 -44
- package/plugin/globalJs/playground-data.shim.ts +1 -0
- package/plugin/globalJs/playground-data.ts +14 -0
- package/plugin/globalJs/summary-selection-tweak.ts +29 -0
- package/plugin/helpers/generateDocsRoutes.ts +59 -0
- package/plugin/helpers/multiSpec.ts +8 -0
- package/plugin/index.ts +317 -141
- package/plugin/languages.ts +8 -2
- package/plugin/loadPluginConfig.ts +284 -109
- package/plugin/markdown/highlighter.ts +100 -0
- package/plugin/markdown/index.ts +39 -0
- package/plugin/middlewareBuilder/stainlessMiddleware.d.ts +3 -1
- package/plugin/react/Routing.tsx +98 -263
- package/plugin/referencePlaceholderUtils.ts +17 -14
- package/plugin/replaceSidebarPlaceholderMiddleware.ts +39 -35
- package/plugin/routes/Docs.astro +72 -111
- package/plugin/routes/DocsStatic.astro +6 -5
- package/plugin/routes/Overview.astro +46 -22
- package/plugin/routes/llms.ts +186 -0
- package/plugin/routes/markdown.ts +13 -12
- package/plugin/{cms → sidebar-utils}/sidebar-builder.ts +84 -69
- package/plugin/specs/FileCache.ts +99 -0
- package/plugin/specs/fetchSpecSSR.ts +27 -0
- package/plugin/specs/generateSpec.ts +112 -0
- package/plugin/specs/index.ts +132 -0
- package/plugin/specs/inputResolver.ts +148 -0
- package/plugin/{cms → specs}/worker.ts +82 -5
- package/plugin/vendor/preview.worker.docs.js +27121 -16890
- package/plugin/vendor/templates/cli.md +1 -0
- package/plugin/vendor/templates/go.md +4 -2
- package/plugin/vendor/templates/java.md +5 -1
- package/plugin/vendor/templates/kotlin.md +5 -1
- package/plugin/vendor/templates/node.md +4 -2
- package/plugin/vendor/templates/python.md +4 -2
- package/plugin/vendor/templates/ruby.md +4 -2
- package/plugin/vendor/templates/terraform.md +1 -1
- package/plugin/vendor/templates/typescript.md +3 -1
- package/resolveSrcFile.ts +10 -0
- package/scripts/vendor_deps.ts +5 -5
- package/shared/conditionalIntegration.ts +28 -0
- package/shared/getProsePages.ts +41 -0
- package/shared/getSharedLogger.ts +15 -0
- package/shared/terminalUtils.ts +3 -0
- package/shared/virtualModule.ts +46 -1
- package/src/content.config.ts +9 -0
- package/stl-docs/aiChatExamples.ts +95 -0
- package/stl-docs/chat/docs-chat-handler.ts +18 -0
- package/stl-docs/chat/hook.ts +215 -0
- package/stl-docs/chat/schemas.ts +70 -0
- package/stl-docs/chat/stainless-handler/index.ts +126 -0
- package/stl-docs/chat/stream-util.ts +16 -0
- package/stl-docs/chat/ui/AiChat.module.css +591 -0
- package/stl-docs/chat/ui/AiChat.tsx +188 -0
- package/stl-docs/chat/ui/Trigger.tsx +154 -0
- package/stl-docs/chat/ui/components/ChatControls.tsx +51 -0
- package/stl-docs/chat/ui/components/ChatEmpty.tsx +42 -0
- package/stl-docs/chat/ui/components/ChatLog.tsx +96 -0
- package/stl-docs/chat/ui/components/ChatMessage.tsx +47 -0
- package/stl-docs/chat/ui/components/CodeBlock.tsx +33 -0
- package/stl-docs/chat/ui/components/MessageFeedback.tsx +109 -0
- package/stl-docs/chat/ui/components/Table.tsx +15 -0
- package/stl-docs/chat/ui/components/ToolCall.tsx +34 -0
- package/stl-docs/chat/ui/components/hljs-github.css +81 -0
- package/stl-docs/chat/ui/scroll-manager.ts +86 -0
- package/stl-docs/chat/ui/types.ts +45 -0
- package/stl-docs/components/AIDropdown.tsx +63 -0
- package/stl-docs/components/AiChatIsland.tsx +16 -0
- package/stl-docs/components/{content-panel/ContentBreadcrumbs.tsx → ContentBreadcrumbs.tsx} +2 -2
- package/stl-docs/components/ContentPanel.astro +9 -0
- package/stl-docs/components/Footer.astro +89 -0
- package/stl-docs/components/Head.astro +20 -0
- package/stl-docs/components/Header.astro +3 -9
- package/stl-docs/components/PageFrame.astro +37 -0
- package/stl-docs/components/PageSidebar.astro +11 -0
- package/stl-docs/components/PageTitle.astro +82 -0
- package/stl-docs/components/StainlessLogo.svg +4 -0
- package/stl-docs/components/ThemeProvider.astro +36 -0
- package/stl-docs/components/ThemeSelect.astro +84 -146
- package/stl-docs/components/TwoColumnContent.astro +2 -0
- package/stl-docs/components/headers/DefaultHeader.astro +6 -8
- package/stl-docs/components/headers/StackedHeader.astro +10 -53
- package/stl-docs/components/icons/chat-gpt.tsx +2 -2
- package/stl-docs/components/icons/cursor.tsx +10 -0
- package/stl-docs/components/icons/gemini.tsx +19 -0
- package/stl-docs/components/icons/markdown.tsx +1 -1
- package/stl-docs/components/index.ts +1 -0
- package/stl-docs/components/mintlify-compat/Accordion.astro +2 -2
- package/stl-docs/components/mintlify-compat/AccordionGroup.astro +0 -4
- package/stl-docs/components/mintlify-compat/Columns.astro +2 -2
- package/stl-docs/components/mintlify-compat/Frame.astro +6 -6
- package/stl-docs/components/mintlify-compat/Tab.astro +2 -2
- package/stl-docs/components/mintlify-compat/callouts/Callout.astro +2 -2
- package/stl-docs/components/mintlify-compat/callouts/Check.astro +0 -4
- package/stl-docs/components/mintlify-compat/callouts/Danger.astro +0 -4
- package/stl-docs/components/mintlify-compat/callouts/Info.astro +0 -4
- package/stl-docs/components/mintlify-compat/callouts/Note.astro +0 -4
- package/stl-docs/components/mintlify-compat/callouts/Tip.astro +0 -4
- package/stl-docs/components/mintlify-compat/callouts/Warning.astro +0 -4
- package/stl-docs/components/mintlify-compat/card.css +4 -4
- package/stl-docs/components/mintlify-compat/index.ts +2 -4
- package/stl-docs/components/nav-tabs/NavDropdown.astro +38 -77
- package/stl-docs/components/nav-tabs/NavTabs.astro +81 -81
- package/stl-docs/components/nav-tabs/SecondaryNavTabs.astro +1 -2
- package/stl-docs/components/nav-tabs/buildNavLinks.ts +5 -2
- package/stl-docs/components/pagination/HomeLink.astro +10 -0
- package/stl-docs/components/pagination/Pagination.astro +177 -0
- package/stl-docs/components/pagination/PaginationLinkEmphasized.astro +22 -0
- package/stl-docs/components/pagination/PaginationLinkQuiet.astro +13 -0
- package/stl-docs/components/pagination/util.ts +71 -0
- package/stl-docs/components/scripts.ts +1 -0
- package/stl-docs/components/sidebars/BaseSidebar.astro +80 -2
- package/stl-docs/components/sidebars/SidebarWithComponents.tsx +10 -0
- package/stl-docs/components/sidebars/convertAstroSidebarToStl.tsx +62 -0
- package/stl-docs/disableCalloutSyntax.ts +36 -0
- package/stl-docs/fonts.ts +186 -0
- package/stl-docs/index.ts +176 -58
- package/stl-docs/loadStlDocsConfig.ts +73 -8
- package/stl-docs/proseDocSync.test.ts +74 -0
- package/stl-docs/proseDocSync.ts +344 -0
- package/stl-docs/proseMarkdown/proseMarkdownIntegration.ts +53 -0
- package/stl-docs/proseMarkdown/proseMarkdownMiddleware.ts +41 -0
- package/stl-docs/proseMarkdown/toMarkdown.ts +158 -0
- package/stl-docs/proseSearchIndexing.ts +218 -0
- package/stl-docs/tabsMiddleware.ts +14 -5
- package/styles/code.css +53 -49
- package/styles/links.css +2 -37
- package/styles/method-descriptions.css +36 -0
- package/styles/overrides.css +28 -46
- package/styles/page.css +228 -38
- package/styles/sdk_select.css +9 -6
- package/styles/search.css +11 -21
- package/styles/sidebar.css +28 -215
- package/styles/{variables.css → sl-variables.css} +4 -8
- package/styles/stldocs-variables.css +6 -0
- package/styles/toc.css +19 -8
- package/theme.css +11 -9
- package/tsconfig.json +1 -4
- package/virtual-module.d.ts +66 -8
- package/components/variables.css +0 -112
- package/plugin/cms/client.ts +0 -62
- package/plugin/cms/server.ts +0 -268
- package/plugin/globalJs/ai-dropdown.ts +0 -57
- package/stl-docs/components/APIReferenceAIDropdown.tsx +0 -58
- package/stl-docs/components/ClientRouterHead.astro +0 -41
- package/stl-docs/components/content-panel/ContentPanel.astro +0 -69
- package/stl-docs/components/content-panel/ProseAIDropdown.tsx +0 -55
- package/stl-docs/components/headers/SplashMobileMenuToggle.astro +0 -49
- package/stl-docs/components/mintlify-compat/Step.astro +0 -56
- package/stl-docs/components/mintlify-compat/Steps.astro +0 -15
- package/styles/fonts.css +0 -68
- /package/{plugin/assets → assets}/fonts/geist/OFL.txt +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-italic-latin-ext.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-italic-latin.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-latin-ext.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-latin.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-mono-italic-latin-ext.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-mono-italic-latin.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-mono-latin-ext.woff2 +0 -0
- /package/{plugin/assets → assets}/fonts/geist/geist-mono-latin.woff2 +0 -0
package/styles/toc.css
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
.right-sidebar-panel {
|
|
2
|
+
font-size: var(--stl-typography-scale-sm);
|
|
3
|
+
overflow-wrap: break-word;
|
|
4
|
+
|
|
5
|
+
nav {
|
|
6
|
+
width: calc(16 * var(--vw));
|
|
7
|
+
min-width: 14ch;
|
|
8
|
+
}
|
|
9
|
+
|
|
2
10
|
nav > ul {
|
|
3
11
|
padding-top: 0;
|
|
4
|
-
border-left: 1px solid var(--
|
|
12
|
+
border-left: 1px solid var(--stl-color-border);
|
|
5
13
|
}
|
|
6
14
|
|
|
7
15
|
ul ul {
|
|
@@ -12,24 +20,26 @@
|
|
|
12
20
|
--pad-inline: 1rem;
|
|
13
21
|
font-weight: 400;
|
|
14
22
|
padding-block: 0.32rem;
|
|
15
|
-
color: var(--
|
|
23
|
+
color: var(--stl-color-foreground-reduced);
|
|
16
24
|
position: relative;
|
|
25
|
+
font-size: inherit;
|
|
26
|
+
text-decoration: none;
|
|
17
27
|
|
|
18
28
|
&:hover {
|
|
19
29
|
text-decoration: underline;
|
|
20
|
-
color: var(--
|
|
21
|
-
text-decoration-color: var(--
|
|
30
|
+
color: var(--stl-color-foreground);
|
|
31
|
+
text-decoration-color: var(--stl-color-foreground-reduced);
|
|
22
32
|
}
|
|
23
33
|
|
|
24
34
|
&[aria-current='true'] {
|
|
25
|
-
color: var(--
|
|
35
|
+
color: var(--stl-color-accent-foreground);
|
|
26
36
|
|
|
27
37
|
&::after {
|
|
28
38
|
content: '';
|
|
29
39
|
position: absolute;
|
|
30
40
|
height: 100%;
|
|
31
41
|
width: 2px;
|
|
32
|
-
background-color: var(--
|
|
42
|
+
background-color: var(--stl-color-accent-border-strong);
|
|
33
43
|
left: -1px;
|
|
34
44
|
top: 0;
|
|
35
45
|
}
|
|
@@ -37,10 +47,11 @@
|
|
|
37
47
|
}
|
|
38
48
|
|
|
39
49
|
h2 {
|
|
40
|
-
color: var(--
|
|
41
|
-
font-size:
|
|
50
|
+
color: var(--stl-color-foreground-reduced);
|
|
51
|
+
font-size: inherit;
|
|
42
52
|
line-height: 150%;
|
|
43
53
|
text-decoration: none;
|
|
44
54
|
font-weight: 400;
|
|
55
|
+
margin-bottom: 0.5em;
|
|
45
56
|
}
|
|
46
57
|
}
|
package/theme.css
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
@layer starlight.base, starlight.reset, starlight.core, starlight.content, starlight.components, starlight.utils;
|
|
2
2
|
@layer starlight;
|
|
3
3
|
|
|
4
|
-
@import './styles/fonts.css';
|
|
5
|
-
@import './styles/variables.css';
|
|
6
4
|
@import './styles/links.css';
|
|
7
5
|
@import './styles/sidebar.css';
|
|
8
6
|
@import './styles/search.css';
|
|
@@ -11,13 +9,17 @@
|
|
|
11
9
|
@import './styles/overrides.css';
|
|
12
10
|
@import './styles/code.css';
|
|
13
11
|
@import './styles/sdk_select.css';
|
|
12
|
+
@import './styles/method-descriptions.css';
|
|
13
|
+
|
|
14
14
|
@import '@stainless-api/ui-primitives/styles.css';
|
|
15
|
-
@import './styles/mintlify-compat.css';
|
|
16
15
|
|
|
17
|
-
@import '
|
|
18
|
-
@import '@stainless-api/
|
|
19
|
-
@import '
|
|
20
|
-
@import '@stainless-api/docs-ui/src/styles/snippets.css';
|
|
21
|
-
@import '@stainless-api/docs-ui/src/styles/search.css';
|
|
16
|
+
@import './styles/sl-variables.css';
|
|
17
|
+
@import '@stainless-api/ui-primitives/styles/starlight-compat.css';
|
|
18
|
+
@import './styles/mintlify-compat.css';
|
|
22
19
|
|
|
23
|
-
@import './
|
|
20
|
+
@import './styles/stldocs-variables.css';
|
|
21
|
+
@import '@stainless-api/docs-ui/styles/resets.css';
|
|
22
|
+
@import '@stainless-api/docs-ui/styles/primitives.css';
|
|
23
|
+
@import '@stainless-api/docs-ui/styles/main.css';
|
|
24
|
+
@import '@stainless-api/docs-ui/styles/search.css';
|
|
25
|
+
@import '@stainless-api/docs-ui/styles/sidebar.css';
|
package/tsconfig.json
CHANGED
|
@@ -7,11 +7,8 @@
|
|
|
7
7
|
".stl-docs/**/*",
|
|
8
8
|
"./plugin/**/*"
|
|
9
9
|
],
|
|
10
|
-
"exclude": ["dist"],
|
|
10
|
+
"exclude": ["dist", "**/preview.worker.docs.js"],
|
|
11
11
|
"compilerOptions": {
|
|
12
|
-
"paths": {
|
|
13
|
-
"~/*": ["../../../stainless/legacy-dir-root/*"]
|
|
14
|
-
},
|
|
15
12
|
"jsx": "react-jsx",
|
|
16
13
|
"jsxImportSource": "react"
|
|
17
14
|
}
|
package/virtual-module.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
declare module 'virtual:stl-starlight-virtual-module' {
|
|
2
2
|
import type { CreateShikiHighlighterOptions } from '@astrojs/markdown-remark';
|
|
3
|
-
import type { PropertySettingsType } from '@stainless-api/docs-ui/
|
|
3
|
+
import type { PropertySettingsType } from '@stainless-api/docs-ui/contexts';
|
|
4
4
|
import type { StlStarlightMiddleware } from '@stainless-api/docs/plugin/MiddlewareTypes';
|
|
5
|
-
import type {
|
|
5
|
+
import type { DocsLanguage } from '@stainless-api/docs-ui/routing';
|
|
6
6
|
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
9
|
-
export const EXCLUDE_LANGUAGES: string[];
|
|
7
|
+
export const RESOLVED_API_REFERENCE_PATH: string;
|
|
8
|
+
export const EXCLUDE_LANGUAGES: DocsLanguage[];
|
|
10
9
|
export const DEFAULT_LANGUAGE: string;
|
|
11
10
|
export const BREADCRUMB_CONFIG: {
|
|
12
11
|
includeCurrentPage?: boolean;
|
|
@@ -15,15 +14,21 @@ declare module 'virtual:stl-starlight-virtual-module' {
|
|
|
15
14
|
export const HIGHLIGHT_THEMES: CreateShikiHighlighterOptions['themes'];
|
|
16
15
|
export const CONTENT_PANEL_LAYOUT: 'double-pane' | 'single-pane';
|
|
17
16
|
export const EXPERIMENTAL_COLLAPSIBLE_SNIPPETS: boolean | undefined;
|
|
17
|
+
export const EXPERIMENTAL_COLLAPSIBLE_METHOD_DESCRIPTIONS: boolean | undefined;
|
|
18
|
+
export const EXPERIMENTAL_PLAYGROUNDS: boolean | undefined;
|
|
19
|
+
export const EXPERIMENTAL_REQUEST_BUILDER: boolean | undefined;
|
|
18
20
|
export const PROPERTY_SETTINGS: PropertySettingsType;
|
|
19
21
|
export const MIDDLEWARE: StlStarlightMiddleware;
|
|
20
|
-
export const
|
|
21
|
-
export const
|
|
22
|
+
export const ENABLE_CONTEXT_MENU: boolean;
|
|
23
|
+
export const STAINLESS_PROJECT: string | undefined;
|
|
24
|
+
export const LLMS_TXT_DESCRIPTION: string | null;
|
|
25
|
+
export const LLMS_TXT_DETAIL_THRESHOLD: number;
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
declare module 'virtual:stl-docs-virtual-module' {
|
|
25
29
|
import type { ButtonVariant } from '@stainless-api/ui-primitives';
|
|
26
30
|
import type { AnchorHTMLAttributes } from 'react';
|
|
31
|
+
import { FontPreloadFilter } from 'astro:assets';
|
|
27
32
|
|
|
28
33
|
type Tab = {
|
|
29
34
|
label: string;
|
|
@@ -31,6 +36,11 @@ declare module 'virtual:stl-docs-virtual-module' {
|
|
|
31
36
|
hidden?: boolean;
|
|
32
37
|
};
|
|
33
38
|
|
|
39
|
+
type FontConfig = {
|
|
40
|
+
cssVariable: string;
|
|
41
|
+
preload?: FontPreloadFilter;
|
|
42
|
+
};
|
|
43
|
+
|
|
34
44
|
export const HEADER_LINKS: {
|
|
35
45
|
label: string;
|
|
36
46
|
link: string;
|
|
@@ -41,5 +51,53 @@ declare module 'virtual:stl-docs-virtual-module' {
|
|
|
41
51
|
export const SPLIT_TABS_ENABLED: boolean;
|
|
42
52
|
export const HEADER_LAYOUT: 'default' | 'stacked';
|
|
43
53
|
export const ENABLE_CLIENT_ROUTER: boolean;
|
|
44
|
-
export const
|
|
54
|
+
export const API_REFERENCE_BASE_PATH: string;
|
|
55
|
+
export const ENABLE_PROSE_MARKDOWN_RENDERING: boolean;
|
|
56
|
+
export const ENABLE_CONTEXT_MENU: boolean;
|
|
57
|
+
export const RENDER_PAGE_DESCRIPTIONS: boolean;
|
|
58
|
+
export const LINK_GROUP_TITLES_TO_OVERVIEW_PAGES: boolean;
|
|
59
|
+
export const FONTS: {
|
|
60
|
+
primary?: FontConfig;
|
|
61
|
+
heading?: FontConfig;
|
|
62
|
+
mono?: FontConfig;
|
|
63
|
+
additional?: FontConfig[];
|
|
64
|
+
};
|
|
65
|
+
export const RENDER_CREDITS: boolean;
|
|
66
|
+
export const SITE_TITLE: string;
|
|
67
|
+
export const ENABLE_AI_CHAT: boolean;
|
|
45
68
|
}
|
|
69
|
+
|
|
70
|
+
declare module 'virtual:stl-docs-ai-chat-examples' {
|
|
71
|
+
import type { ExamplePrompt } from './stl-docs/chat/ui/types';
|
|
72
|
+
|
|
73
|
+
export const examples: ExamplePrompt[] | undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
declare module 'virtual:stainless-apis-manifest' {
|
|
77
|
+
import type { DocsLanguage } from '@stainless-api/docs-ui/routing';
|
|
78
|
+
|
|
79
|
+
export type APIManifestEntry = {
|
|
80
|
+
languages: {
|
|
81
|
+
sdkJSONFilePath: string;
|
|
82
|
+
language: DocsLanguage;
|
|
83
|
+
}[];
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const api: APIManifestEntry;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare module 'virtual:stl-starlight-reference-sidebars' {
|
|
90
|
+
import type { DocsLanguage } from '@stainless-api/docs-ui/routing';
|
|
91
|
+
import type { StarlightRouteData } from '@astrojs/starlight/route-data';
|
|
92
|
+
|
|
93
|
+
export type GeneratedSidebarDef = {
|
|
94
|
+
id: number;
|
|
95
|
+
language: DocsLanguage;
|
|
96
|
+
entries: StarlightRouteData['sidebar'];
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const sidebars: GeneratedSidebarDef[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
declare const __STLDOCS_HAS_API_REFERENCE__: boolean;
|
|
103
|
+
declare const __STLDOCS_ENABLE_AI_CHAT__: boolean;
|
package/components/variables.css
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--stldocs-font: var(--sl-font, system-ui, sans-serif);
|
|
3
|
-
--stldocs-font-mono: var(--sl-font-mono, ui-monospace, monospace);
|
|
4
|
-
|
|
5
|
-
--stldocs-color-white: var(--sl-color-white);
|
|
6
|
-
--stldocs-color-gray-1: var(--sl-color-gray-1);
|
|
7
|
-
--stldocs-color-gray-2: var(--sl-color-gray-2);
|
|
8
|
-
--stldocs-color-gray-3: var(--sl-color-gray-3);
|
|
9
|
-
--stldocs-color-gray-4: var(--sl-color-gray-4);
|
|
10
|
-
--stldocs-color-gray-5: var(--sl-color-gray-5);
|
|
11
|
-
--stldocs-color-gray-6: var(--sl-color-gray-6);
|
|
12
|
-
--stldocs-color-gray-7: var(--sl-color-gray-7);
|
|
13
|
-
--stldocs-color-gray-8: var(--sl-color-gray-8);
|
|
14
|
-
|
|
15
|
-
--stldocs-color-accent-low: var(--sl-color-accent-low);
|
|
16
|
-
--stldocs-color-accent-high: var(--sl-color-accent-high);
|
|
17
|
-
--stldocs-color-accent: var(--sl-color-accent);
|
|
18
|
-
--stldocs-color-red: var(--sl-color-red);
|
|
19
|
-
|
|
20
|
-
--stldocs-color-text: var(--sl-color-text);
|
|
21
|
-
--stldocs-color-text-accent: var(--sl-color-text-accent);
|
|
22
|
-
--stldocs-color-text-invert: var(--sl-color-text-invert);
|
|
23
|
-
--stldocs-color-text-secondary: var(--sl-color-text-secondary);
|
|
24
|
-
--stldocs-color-text-tertiary: var(--sl-color-text-tertiary);
|
|
25
|
-
|
|
26
|
-
--stldocs-color-bg: var(--sl-color-bg);
|
|
27
|
-
--stldocs-color-bg-nav: var(--sl-color-bg-nav);
|
|
28
|
-
--stldocs-color-bg-ui: var(--sl-color-bg-ui);
|
|
29
|
-
|
|
30
|
-
--stldocs-color-bg-inline-code: var(--sl-color-bg-inline-code);
|
|
31
|
-
--stldocs-color-bg-accent: var(--sl-color-bg-accent);
|
|
32
|
-
--stldocs-color-hairline: var(--sl-color-hairline);
|
|
33
|
-
--stldocs-color-hairline-shade: var(--sl-color-hairline-shade);
|
|
34
|
-
--stldocs-color-hairline-light: var(--sl-color-hairline-light);
|
|
35
|
-
|
|
36
|
-
--stldocs-badge-default-text: var(--sl-badge-default-text);
|
|
37
|
-
--stldocs-color-bg-inline-code-dark: var(--sl-color-bg-inline-code-dark);
|
|
38
|
-
|
|
39
|
-
--stldocs-font-size-h1: var(--sl-text-h1);
|
|
40
|
-
--stldocs-font-size-h2: var(--sl-text-h2);
|
|
41
|
-
--stldocs-font-size-h3: var(--sl-text-h3);
|
|
42
|
-
--stldocs-font-size-h4: var(--sl-text-h4);
|
|
43
|
-
--stldocs-font-size-h5: var(--sl-text-h5);
|
|
44
|
-
|
|
45
|
-
--stlodcs-font-size-body: var(--sl-text-body);
|
|
46
|
-
--stldocs-font-size-small: var(--sl-text-body-sm);
|
|
47
|
-
--stldocs-font-size-code: var(--sl-text-code);
|
|
48
|
-
|
|
49
|
-
--stldocs-content-width: var(--sl-content-width);
|
|
50
|
-
--stldocs-content-padding: var(--sl-content-pad-x);
|
|
51
|
-
|
|
52
|
-
--stldocs-color-http-get-bg: var(--sl-color-green-low);
|
|
53
|
-
--stldocs-color-http-get: var(--sl-color-green);
|
|
54
|
-
--stldocs-color-http-put-bg: var(--sl-color-orange-low);
|
|
55
|
-
--stldocs-color-http-put: var(--sl-color-orange);
|
|
56
|
-
--stldocs-color-http-post-bg: var(--sl-color-blue-low);
|
|
57
|
-
--stldocs-color-http-post: var(--sl-color-blue);
|
|
58
|
-
--stldocs-color-http-delete-bg: var(--sl-color-red-low);
|
|
59
|
-
--stldocs-color-http-delete: var(--sl-color-red);
|
|
60
|
-
|
|
61
|
-
--stldocs-syntax-color-red: var(--sl-color-red);
|
|
62
|
-
--stldocs-syntax-color-green: var(--sl-color-green);
|
|
63
|
-
--stldocs-syntax-color-blue: var(--sl-color-blue);
|
|
64
|
-
--stldocs-syntax-color-orange: var(--sl-color-orange);
|
|
65
|
-
--stldocs-syntax-color-teal: var(--sl-color-teal);
|
|
66
|
-
--stldocs-syntax-color-magenta: var(--sl-color-magenta);
|
|
67
|
-
--stldocs-syntax-color-purple: var(--sl-color-purple);
|
|
68
|
-
|
|
69
|
-
--stldocs-color-backdrop-overlay: var(--sl-color-backdrop-overlay);
|
|
70
|
-
--stldocs-expander-margin-shift: 24px;
|
|
71
|
-
--stldocs-expander-right-margin: 8px;
|
|
72
|
-
--stldocs-font-size-body: 14px;
|
|
73
|
-
--stldocs-font-size-body-xs: 12px;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/* These are the theme overrides - we need to come up with a good way to do this in starlight */
|
|
77
|
-
:root {
|
|
78
|
-
/*
|
|
79
|
-
tmp remove the theme color in favor of the Shiki default theme background
|
|
80
|
-
commented out values are the original values in case we want them again
|
|
81
|
-
*/
|
|
82
|
-
/* --stldocs-color-snippet-box-bg: #272727; */
|
|
83
|
-
--stldocs-color-snippet-box-bg: #1f1f1f;
|
|
84
|
-
/* --stldocs-color-snippet-title-bg: #161616; */
|
|
85
|
-
--stldocs-color-snippet-title-bg: #24292f;
|
|
86
|
-
--stldocs-color-snippet-title-muted: #8b8b8b;
|
|
87
|
-
--stldocs-color-snippet-title-bright: #ffffff;
|
|
88
|
-
--stldocs-color-snippet-code-bg: #1d1d1d;
|
|
89
|
-
|
|
90
|
-
--stldocs-title-padding-y: 2.5rem;
|
|
91
|
-
|
|
92
|
-
--stldocs-z-index-theme-select: 1000;
|
|
93
|
-
--stldocs-button-border-radius: var(--sl-button-border-radius);
|
|
94
|
-
--stldocs-button-size: var(--sl-button-size);
|
|
95
|
-
--stldocs-button-padding-x: var(--sl-button-padding-x);
|
|
96
|
-
--stldocs-button-padding-y: var(--sl-button-padding-y);
|
|
97
|
-
|
|
98
|
-
--sl-content-pad-x: 1rem;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
:root[data-theme='light'] {
|
|
102
|
-
--stldocs-color-snippet-box-bg: #eeeeee;
|
|
103
|
-
/*
|
|
104
|
-
tmp remove the theme color in favor of the Shiki default theme background
|
|
105
|
-
commented out value is the original value in case we want it again
|
|
106
|
-
*/
|
|
107
|
-
/* --stldocs-color-snippet-title-bg: #2a2a2a; */
|
|
108
|
-
--stldocs-color-snippet-title-bg: #24292f;
|
|
109
|
-
--stldocs-color-snippet-title-muted: #959595;
|
|
110
|
-
--stldocs-color-snippet-title-bright: #000;
|
|
111
|
-
--stldocs-color-snippet-code-bg: #383838;
|
|
112
|
-
}
|
package/plugin/cms/client.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { CMS_PORT } from 'virtual:stl-starlight-virtual-module';
|
|
2
|
-
import type { SpecResp } from './server';
|
|
3
|
-
import type { StarlightRouteData } from '@astrojs/starlight/route-data';
|
|
4
|
-
import type { BuildSidebarParams } from './sidebar-builder';
|
|
5
|
-
|
|
6
|
-
const SERVER_URL = `http://localhost:${CMS_PORT}`;
|
|
7
|
-
|
|
8
|
-
async function makeRequest<T>(method: 'POST' | 'GET', endpoint: string, body?: any) {
|
|
9
|
-
const response = await fetch(`${SERVER_URL}${endpoint}`, {
|
|
10
|
-
method,
|
|
11
|
-
headers: {
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
},
|
|
14
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
15
|
-
});
|
|
16
|
-
return response.json() as T;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
class Client {
|
|
20
|
-
private specCache: SpecResp | null = null;
|
|
21
|
-
private clientId: string;
|
|
22
|
-
|
|
23
|
-
get id() {
|
|
24
|
-
return this.clientId;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async buildSidebar(params: BuildSidebarParams & { sidebarId: number }) {
|
|
28
|
-
const response = await makeRequest<{ data: StarlightRouteData['sidebar'] }>(
|
|
29
|
-
'POST',
|
|
30
|
-
'/build_sidebar',
|
|
31
|
-
params,
|
|
32
|
-
);
|
|
33
|
-
return response.data;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async getSpec() {
|
|
37
|
-
const cached = this.specCache;
|
|
38
|
-
|
|
39
|
-
const response = await makeRequest<SpecResp>('POST', '/retrieve_spec', {
|
|
40
|
-
currentId: cached?.id,
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
if (response.data === null) {
|
|
44
|
-
if (!cached) {
|
|
45
|
-
throw new Error('Cache should not be null');
|
|
46
|
-
}
|
|
47
|
-
if (cached.data === null) {
|
|
48
|
-
throw new Error('Cached spec should not be null');
|
|
49
|
-
}
|
|
50
|
-
return cached.data;
|
|
51
|
-
}
|
|
52
|
-
// console.log("invalidating spec cache", this.clientId);
|
|
53
|
-
this.specCache = response;
|
|
54
|
-
return response.data;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
constructor() {
|
|
58
|
-
this.clientId = crypto.randomUUID();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export const cmsClient = new Client();
|
package/plugin/cms/server.ts
DELETED
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { createServer, IncomingMessage } from 'http';
|
|
2
|
-
import { readFile } from 'fs/promises';
|
|
3
|
-
|
|
4
|
-
import type * as SDKJSON from '~/lib/json-spec-v2/types';
|
|
5
|
-
import { createSDKJSON, parseInputs, transformOAS } from './worker';
|
|
6
|
-
import { Languages, parseRoute, type DocsLanguage } from '@stainless-api/docs-ui/src/routing';
|
|
7
|
-
import Stainless from '@stainless-api/sdk';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
toStarlightSidebar,
|
|
11
|
-
type GeneratedSidebarConfig,
|
|
12
|
-
SidebarConfigItemsBuilder,
|
|
13
|
-
} from './sidebar-builder';
|
|
14
|
-
import type { VersionUserConfig } from '../loadPluginConfig';
|
|
15
|
-
|
|
16
|
-
export type InputFilePaths = {
|
|
17
|
-
oasPath?: string;
|
|
18
|
-
configPath?: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
async function versionInfo(project: string, apiKey: string) {
|
|
22
|
-
const data = await fetch(`https://api.stainless.com/api/projects/${project}/package-versions`, {
|
|
23
|
-
headers: { Authorization: `Bearer ${apiKey}` },
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const content = await data.text();
|
|
27
|
-
return JSON.parse(content);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async function loadSpec({
|
|
31
|
-
apiKey,
|
|
32
|
-
devPaths,
|
|
33
|
-
version,
|
|
34
|
-
}: {
|
|
35
|
-
apiKey: string;
|
|
36
|
-
devPaths: InputFilePaths;
|
|
37
|
-
version: VersionUserConfig;
|
|
38
|
-
}) {
|
|
39
|
-
let oasStr: string;
|
|
40
|
-
let configStr: string;
|
|
41
|
-
let versions: Record<DocsLanguage, string> | undefined;
|
|
42
|
-
|
|
43
|
-
if (devPaths.oasPath && devPaths.configPath) {
|
|
44
|
-
[oasStr, configStr] = await Promise.all([
|
|
45
|
-
readFile(devPaths.oasPath, 'utf-8'),
|
|
46
|
-
readFile(devPaths.configPath, 'utf-8'),
|
|
47
|
-
]);
|
|
48
|
-
} else {
|
|
49
|
-
const client = new Stainless({ apiKey });
|
|
50
|
-
const configs = await client.projects.configs.retrieve({
|
|
51
|
-
project: version.stainlessProject,
|
|
52
|
-
branch: version.branch,
|
|
53
|
-
include: 'openapi',
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
versions = await versionInfo(version.stainlessProject, apiKey);
|
|
57
|
-
|
|
58
|
-
const configYML = Object.values(configs)[0] as { content: any };
|
|
59
|
-
const oasJson = Object.values(configs)[1] as { content: any };
|
|
60
|
-
oasStr = oasJson['content'];
|
|
61
|
-
configStr = configYML['content'];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const { oas, config } = await parseInputs({
|
|
65
|
-
oas: oasStr,
|
|
66
|
-
config: configStr,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const transformedOAS = await transformOAS({ oas, config });
|
|
70
|
-
|
|
71
|
-
const languages =
|
|
72
|
-
config.docs?.languages ??
|
|
73
|
-
(Object.entries(config.targets)
|
|
74
|
-
// @ts-expect-error we don't have the actual Stainless config type here
|
|
75
|
-
.filter(([name, target]) => Languages.includes(name) && !target.skip)
|
|
76
|
-
.map(([name]) => name) as SDKJSON.SpecLanguage[]);
|
|
77
|
-
|
|
78
|
-
const sdkJson = await createSDKJSON({
|
|
79
|
-
oas: transformedOAS,
|
|
80
|
-
config,
|
|
81
|
-
languages,
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
if (versions) {
|
|
85
|
-
for (const [lang, version] of Object.entries(versions)) {
|
|
86
|
-
const meta = sdkJson.metadata[lang as DocsLanguage];
|
|
87
|
-
if (meta?.version) meta.version = version;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const id = crypto.randomUUID();
|
|
92
|
-
|
|
93
|
-
return {
|
|
94
|
-
data: sdkJson,
|
|
95
|
-
id,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
class Spec {
|
|
100
|
-
private specPromise: Promise<{ id: string; data: SDKJSON.Spec }>;
|
|
101
|
-
private devPaths: InputFilePaths;
|
|
102
|
-
private apiKey: string;
|
|
103
|
-
private version: VersionUserConfig;
|
|
104
|
-
|
|
105
|
-
reload() {
|
|
106
|
-
this.specPromise = loadSpec({
|
|
107
|
-
apiKey: this.apiKey,
|
|
108
|
-
devPaths: this.devPaths,
|
|
109
|
-
version: this.version,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async forceGetSpec() {
|
|
114
|
-
const spec = await this.specPromise;
|
|
115
|
-
return spec;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async getSpec(currentId: string | undefined | null) {
|
|
119
|
-
const spec = await this.specPromise;
|
|
120
|
-
|
|
121
|
-
if (currentId === spec.id) {
|
|
122
|
-
return {
|
|
123
|
-
id: spec.id,
|
|
124
|
-
data: null,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
return spec;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
constructor(apiKey: string, version: VersionUserConfig, devPaths: InputFilePaths) {
|
|
132
|
-
this.specPromise = loadSpec({
|
|
133
|
-
apiKey,
|
|
134
|
-
devPaths,
|
|
135
|
-
version,
|
|
136
|
-
});
|
|
137
|
-
this.devPaths = devPaths;
|
|
138
|
-
this.apiKey = apiKey;
|
|
139
|
-
this.version = version;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export type SpecResp = Awaited<ReturnType<Spec['getSpec']>>;
|
|
144
|
-
|
|
145
|
-
// will be necessary once we add POST methods
|
|
146
|
-
function readJsonBody(req: IncomingMessage): Promise<any> {
|
|
147
|
-
return new Promise((resolve, reject) => {
|
|
148
|
-
let body = '';
|
|
149
|
-
req.on('data', (chunk) => {
|
|
150
|
-
body += chunk.toString();
|
|
151
|
-
});
|
|
152
|
-
req.on('end', () => {
|
|
153
|
-
try {
|
|
154
|
-
const data = JSON.parse(body);
|
|
155
|
-
resolve(data);
|
|
156
|
-
} catch (error) {
|
|
157
|
-
reject(error);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export function startDevServer({
|
|
164
|
-
port,
|
|
165
|
-
version,
|
|
166
|
-
devPaths,
|
|
167
|
-
apiKey,
|
|
168
|
-
getGeneratedSidebarConfig,
|
|
169
|
-
}: {
|
|
170
|
-
port: number;
|
|
171
|
-
version: VersionUserConfig;
|
|
172
|
-
devPaths: InputFilePaths;
|
|
173
|
-
apiKey: string;
|
|
174
|
-
getGeneratedSidebarConfig: (id: number) => GeneratedSidebarConfig | null;
|
|
175
|
-
}) {
|
|
176
|
-
const spec = new Spec(apiKey, version, devPaths);
|
|
177
|
-
|
|
178
|
-
const server = createServer(async (req, res) => {
|
|
179
|
-
// Add CORS headers
|
|
180
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
181
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
182
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
183
|
-
|
|
184
|
-
// Handle preflight requests
|
|
185
|
-
if (req.method === 'OPTIONS') {
|
|
186
|
-
res.writeHead(204);
|
|
187
|
-
res.end();
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
function respond(code: number, body: any) {
|
|
192
|
-
res.setHeader('Content-Type', 'application/json');
|
|
193
|
-
res.writeHead(code);
|
|
194
|
-
res.end(JSON.stringify(body));
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
try {
|
|
198
|
-
if (req.method === 'POST' && req.url === '/retrieve_spec') {
|
|
199
|
-
const body = await readJsonBody(req);
|
|
200
|
-
|
|
201
|
-
const currentSpec = await spec.getSpec(body.currentId);
|
|
202
|
-
|
|
203
|
-
return respond(200, currentSpec);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (req.method === 'POST' && req.url === '/build_sidebar') {
|
|
207
|
-
const currentSpec = await spec.forceGetSpec();
|
|
208
|
-
const body = await readJsonBody(req);
|
|
209
|
-
const sidebarId: number = body.sidebarId;
|
|
210
|
-
|
|
211
|
-
const sidebarConfig = getGeneratedSidebarConfig(sidebarId);
|
|
212
|
-
|
|
213
|
-
const sidebarGenerateOptions = sidebarConfig?.options;
|
|
214
|
-
|
|
215
|
-
const { stainlessPath: currentStainlessPath, language } = parseRoute(body.basePath, body.currentSlug);
|
|
216
|
-
|
|
217
|
-
const configItemsBuilder = new SidebarConfigItemsBuilder(
|
|
218
|
-
currentSpec.data,
|
|
219
|
-
language,
|
|
220
|
-
sidebarGenerateOptions,
|
|
221
|
-
);
|
|
222
|
-
|
|
223
|
-
let userSidebarConfig = configItemsBuilder.generateItems();
|
|
224
|
-
|
|
225
|
-
if (sidebarConfig && sidebarConfig.transformFn) {
|
|
226
|
-
const transformedSidebarConfig = sidebarConfig.transformFn(userSidebarConfig, language);
|
|
227
|
-
// the user may not have returned, but they may have mutated the config in place
|
|
228
|
-
// if they did return, we use that
|
|
229
|
-
if (transformedSidebarConfig) {
|
|
230
|
-
userSidebarConfig = transformedSidebarConfig;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
const starlightSidebar = toStarlightSidebar({
|
|
235
|
-
basePath: body.basePath,
|
|
236
|
-
currentSlug: body.currentSlug,
|
|
237
|
-
spec: currentSpec.data,
|
|
238
|
-
entries: userSidebarConfig,
|
|
239
|
-
currentStainlessPath,
|
|
240
|
-
currentLanguage: language,
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
return respond(200, { data: starlightSidebar });
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return respond(404, { message: 'Not found' });
|
|
247
|
-
} catch (e) {
|
|
248
|
-
return respond(500, { message: 'Unexpected error', error: e });
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
server.listen(port, () => {
|
|
253
|
-
console.log(`Server is running on port ${port}`);
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
return {
|
|
257
|
-
invalidate: () => {
|
|
258
|
-
spec.reload();
|
|
259
|
-
},
|
|
260
|
-
destroy: function destroy() {
|
|
261
|
-
return new Promise<void>((resolve) => {
|
|
262
|
-
server.close(() => {
|
|
263
|
-
resolve();
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
|
-
}
|