zudoku 0.39.0 → 0.39.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/dist/app/entry.server.d.ts +5 -4
  2. package/dist/app/entry.server.js +2 -2
  3. package/dist/app/entry.server.js.map +1 -1
  4. package/dist/cli/cmds/dev.js +1 -7
  5. package/dist/cli/cmds/dev.js.map +1 -1
  6. package/dist/config/validators/common.d.ts +17 -0
  7. package/dist/config/validators/common.js +1 -0
  8. package/dist/config/validators/common.js.map +1 -1
  9. package/dist/config/validators/validate.d.ts +7 -0
  10. package/dist/lib/components/Bootstrap.d.ts +2 -1
  11. package/dist/lib/components/Bootstrap.js +3 -2
  12. package/dist/lib/components/Bootstrap.js.map +1 -1
  13. package/dist/lib/components/Header.js +2 -2
  14. package/dist/lib/components/Header.js.map +1 -1
  15. package/dist/lib/components/Layout.js +1 -1
  16. package/dist/lib/components/Layout.js.map +1 -1
  17. package/dist/lib/components/Main.js +1 -1
  18. package/dist/lib/components/Main.js.map +1 -1
  19. package/dist/lib/components/MobileTopNavigation.js +6 -3
  20. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  21. package/dist/lib/components/TopNavigation.d.ts +1 -0
  22. package/dist/lib/components/TopNavigation.js +2 -2
  23. package/dist/lib/components/TopNavigation.js.map +1 -1
  24. package/dist/lib/components/Zudoku.js +4 -1
  25. package/dist/lib/components/Zudoku.js.map +1 -1
  26. package/dist/lib/components/context/BypassProtectedRoutesContext.d.ts +1 -0
  27. package/dist/lib/components/context/BypassProtectedRoutesContext.js +3 -0
  28. package/dist/lib/components/context/BypassProtectedRoutesContext.js.map +1 -0
  29. package/dist/lib/components/index.d.ts +2 -1
  30. package/dist/lib/components/navigation/PoweredByZudoku.d.ts +3 -0
  31. package/dist/lib/components/navigation/PoweredByZudoku.js +6 -0
  32. package/dist/lib/components/navigation/PoweredByZudoku.js.map +1 -0
  33. package/dist/lib/components/navigation/SidebarWrapper.js +9 -2
  34. package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
  35. package/dist/lib/components/navigation/ZudokuLogo.d.ts +6 -0
  36. package/dist/lib/components/navigation/ZudokuLogo.js +5 -0
  37. package/dist/lib/components/navigation/ZudokuLogo.js.map +1 -0
  38. package/dist/lib/core/RouteGuard.d.ts +1 -0
  39. package/dist/lib/core/RouteGuard.js +9 -3
  40. package/dist/lib/core/RouteGuard.js.map +1 -1
  41. package/dist/lib/core/ZudokuContext.d.ts +1 -0
  42. package/dist/lib/core/ZudokuContext.js.map +1 -1
  43. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.d.ts +2 -1
  44. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js +2 -2
  45. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js.map +1 -1
  46. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js +1 -1
  47. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js.map +1 -1
  48. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  49. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  50. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +9 -4
  51. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  52. package/dist/lib/plugins/search-pagefind/ResultList.d.ts +1 -1
  53. package/dist/lib/plugins/search-pagefind/ResultList.js +6 -12
  54. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  55. package/dist/lib/plugins/search-pagefind/index.d.ts +1 -3
  56. package/dist/vite/build.js +1 -9
  57. package/dist/vite/build.js.map +1 -1
  58. package/dist/vite/plugin-search.js +1 -1
  59. package/dist/vite/plugin-search.js.map +1 -1
  60. package/dist/vite/prerender/FileWritingResponse.d.ts +9 -5
  61. package/dist/vite/prerender/FileWritingResponse.js +5 -5
  62. package/dist/vite/prerender/FileWritingResponse.js.map +1 -1
  63. package/dist/vite/prerender/InMemoryResponse.d.ts +16 -0
  64. package/dist/vite/prerender/InMemoryResponse.js +32 -0
  65. package/dist/vite/prerender/InMemoryResponse.js.map +1 -0
  66. package/dist/vite/prerender/PrerenderResponse.d.ts +10 -0
  67. package/dist/vite/prerender/PrerenderResponse.js +2 -0
  68. package/dist/vite/prerender/PrerenderResponse.js.map +1 -0
  69. package/dist/vite/prerender/prerender.d.ts +1 -0
  70. package/dist/vite/prerender/prerender.js +18 -0
  71. package/dist/vite/prerender/prerender.js.map +1 -1
  72. package/dist/vite/prerender/worker.js +36 -8
  73. package/dist/vite/prerender/worker.js.map +1 -1
  74. package/dist/zuplo/with-zuplo.js +4 -0
  75. package/dist/zuplo/with-zuplo.js.map +1 -1
  76. package/lib/{Callout-D5frCCJ0.js → Callout-B2vsR09t.js} +2 -2
  77. package/lib/{Callout-D5frCCJ0.js.map → Callout-B2vsR09t.js.map} +1 -1
  78. package/lib/{Dialog-Dv6WG8RN.js → Dialog-sbgekbjb.js} +5 -5
  79. package/lib/{Dialog-Dv6WG8RN.js.map → Dialog-sbgekbjb.js.map} +1 -1
  80. package/lib/{MdxPage-ZW1StNhp.js → MdxPage-JscVnWM8.js} +22 -21
  81. package/lib/{MdxPage-ZW1StNhp.js.map → MdxPage-JscVnWM8.js.map} +1 -1
  82. package/lib/{OasProvider-Cld9RAMQ.js → OasProvider-C4T5TU8Z.js} +2 -2
  83. package/lib/{OasProvider-Cld9RAMQ.js.map → OasProvider-C4T5TU8Z.js.map} +1 -1
  84. package/lib/{OperationList-D-OfzJm6.js → OperationList-C-gBHUou.js} +49 -48
  85. package/lib/{OperationList-D-OfzJm6.js.map → OperationList-C-gBHUou.js.map} +1 -1
  86. package/lib/{Pagination-CYB3nVYx.js → Pagination-DCCvGq0m.js} +2 -2
  87. package/lib/{Pagination-CYB3nVYx.js.map → Pagination-DCCvGq0m.js.map} +1 -1
  88. package/lib/RouteGuard-CqZPoZYJ.js +744 -0
  89. package/lib/RouteGuard-CqZPoZYJ.js.map +1 -0
  90. package/lib/{SchemaList-Ci1WxRh0.js → SchemaList-DuN6ThXR.js} +3 -3
  91. package/lib/{SchemaList-Ci1WxRh0.js.map → SchemaList-DuN6ThXR.js.map} +1 -1
  92. package/lib/{SchemaView-Brn-YxHY.js → SchemaView-B3fOPR4V.js} +112 -100
  93. package/lib/SchemaView-B3fOPR4V.js.map +1 -0
  94. package/lib/{createServer-mMau3eV_.js → createServer-mYvGvmc0.js} +2469 -2443
  95. package/lib/createServer-mYvGvmc0.js.map +1 -0
  96. package/lib/index-D6ktNq4i.js +1863 -0
  97. package/lib/index-D6ktNq4i.js.map +1 -0
  98. package/lib/{index-CjPMxpOV.js → index-DsdAaiwx.js} +13 -12
  99. package/lib/{index-CjPMxpOV.js.map → index-DsdAaiwx.js.map} +1 -1
  100. package/lib/objectEntries-yMIkr2mI.js +5 -0
  101. package/lib/objectEntries-yMIkr2mI.js.map +1 -0
  102. package/lib/ui/Command.js +1 -1
  103. package/lib/useLatest-hmRS46UF.js +11 -0
  104. package/lib/useLatest-hmRS46UF.js.map +1 -0
  105. package/lib/zudoku.components.js +15 -14
  106. package/lib/zudoku.components.js.map +1 -1
  107. package/lib/zudoku.plugin-api-catalog.js +6 -5
  108. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  109. package/lib/zudoku.plugin-markdown.js +1 -1
  110. package/lib/zudoku.plugin-openapi.js +1 -1
  111. package/lib/zudoku.plugin-search-pagefind.js +132 -137
  112. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  113. package/package.json +3 -3
  114. package/src/app/entry.server.tsx +6 -3
  115. package/src/lib/components/Bootstrap.tsx +13 -6
  116. package/src/lib/components/Header.tsx +2 -2
  117. package/src/lib/components/Layout.tsx +1 -1
  118. package/src/lib/components/Main.tsx +3 -2
  119. package/src/lib/components/MobileTopNavigation.tsx +27 -18
  120. package/src/lib/components/TopNavigation.tsx +2 -2
  121. package/src/lib/components/Zudoku.tsx +5 -3
  122. package/src/lib/components/context/BypassProtectedRoutesContext.ts +3 -0
  123. package/src/lib/components/navigation/PoweredByZudoku.tsx +23 -0
  124. package/src/lib/components/navigation/SidebarWrapper.tsx +27 -13
  125. package/src/lib/components/navigation/ZudokuLogo.tsx +25 -0
  126. package/src/lib/core/RouteGuard.tsx +26 -4
  127. package/src/lib/core/ZudokuContext.ts +1 -0
  128. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx +3 -0
  129. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx +5 -1
  130. package/src/lib/plugins/openapi/schema/SchemaView.tsx +6 -1
  131. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +11 -4
  132. package/src/lib/plugins/search-pagefind/ResultList.tsx +5 -16
  133. package/src/lib/plugins/search-pagefind/index.tsx +1 -1
  134. package/dist/cli/dev/pagefind-command.d.ts +0 -3
  135. package/dist/cli/dev/pagefind-command.js +0 -59
  136. package/dist/cli/dev/pagefind-command.js.map +0 -1
  137. package/dist/lib/components/context/PluginSystem.d.ts +0 -1
  138. package/dist/lib/components/context/PluginSystem.js +0 -2
  139. package/dist/lib/components/context/PluginSystem.js.map +0 -1
  140. package/lib/SchemaView-Brn-YxHY.js.map +0 -1
  141. package/lib/createServer-mMau3eV_.js.map +0 -1
  142. package/lib/index-Bt7MKhZq.js +0 -2514
  143. package/lib/index-Bt7MKhZq.js.map +0 -1
  144. package/lib/objectEntries-BS7aAgOm.js +0 -12
  145. package/lib/objectEntries-BS7aAgOm.js.map +0 -1
  146. package/src/lib/components/context/PluginSystem.ts +0 -0
@@ -11,6 +11,7 @@ import {
11
11
  import { DialogTitle } from "zudoku/ui/Dialog.js";
12
12
  import { useAuthState } from "../../authentication/state.js";
13
13
  import { useZudoku } from "../../components/context/ZudokuContext.js";
14
+ import { SEARCH_PROTECTED_SECTION } from "../../core/RouteGuard.js";
14
15
  import { joinUrl } from "../../util/joinUrl.js";
15
16
  import { getResults } from "./get-results.js";
16
17
  import type { PagefindOptions } from "./index.js";
@@ -35,11 +36,14 @@ const importPagefind = (basePath?: string): Promise<Pagefind> =>
35
36
  : import(/* @vite-ignore */ joinUrl(basePath, "/pagefind/pagefind.js"));
36
37
 
37
38
  const usePagefind = (options: PagefindOptions) => {
39
+ const {
40
+ options: { basePath },
41
+ } = useZudoku();
38
42
  const { data: pagefind, ...result } = useQuery<Pagefind>({
39
43
  queryKey: ["pagefind", options.ranking],
40
44
  retry: false,
41
45
  queryFn: async () => {
42
- const pagefind = await importPagefind(options.basePath);
46
+ const pagefind = await importPagefind(basePath);
43
47
  await pagefind.init();
44
48
  await pagefind.options({
45
49
  ranking: {
@@ -82,9 +86,13 @@ export const PagefindSearch = ({
82
86
  const inputRef = useRef<HTMLInputElement>(null);
83
87
 
84
88
  const { data: searchResults } = useQuery({
85
- queryKey: ["pagefind-search", searchTerm],
89
+ queryKey: ["pagefind-search", searchTerm, auth.isAuthenticated],
86
90
  queryFn: async () => {
87
- const search = await pagefind?.search(searchTerm);
91
+ const filters = auth.isAuthenticated
92
+ ? undefined
93
+ : { not: { section: SEARCH_PROTECTED_SECTION } };
94
+
95
+ const search = await pagefind?.search(searchTerm, { filters });
88
96
  if (!search) return [];
89
97
  return getResults({ search, options, auth, context });
90
98
  },
@@ -145,7 +153,6 @@ export const PagefindSearch = ({
145
153
  </div>
146
154
  ) : (
147
155
  <ResultList
148
- basePath={options.basePath}
149
156
  searchResults={searchResults ?? []}
150
157
  searchTerm={searchTerm}
151
158
  onClose={onClose}
@@ -1,5 +1,5 @@
1
1
  import { BracketsIcon, FileTextIcon } from "lucide-react";
2
- import { useCallback, useLayoutEffect, useRef } from "react";
2
+ import { useLayoutEffect, useRef } from "react";
3
3
  import { Link, useNavigate } from "react-router";
4
4
  import { CommandGroup, CommandItem, CommandList } from "zudoku/ui/Command.js";
5
5
  import {
@@ -22,7 +22,6 @@ const sortSubResults = (a: PagefindSubResult, b: PagefindSubResult) => {
22
22
  const hoverClassname = `cursor-pointer border border-transparent data-[selected=true]:border-border`;
23
23
 
24
24
  export const ResultList = ({
25
- basePath,
26
25
  searchResults,
27
26
  searchTerm,
28
27
  onClose,
@@ -37,16 +36,6 @@ export const ResultList = ({
37
36
  const navigate = useNavigate();
38
37
  const commandListRef = useRef<HTMLDivElement | null>(null);
39
38
 
40
- const cleanResultUrl = useCallback(
41
- (url: string) => {
42
- const clean = url.replace(".html", "");
43
- return basePath && clean.startsWith(basePath)
44
- ? clean.slice(basePath.length)
45
- : clean;
46
- },
47
- [basePath],
48
- );
49
-
50
39
  useLayoutEffect(() => {
51
40
  requestIdleCallback(() => {
52
41
  commandListRef.current?.scrollTo({ top: 0 });
@@ -71,11 +60,11 @@ export const ResultList = ({
71
60
  value={`${result.meta.title}-${result.url}`}
72
61
  className={hoverClassname}
73
62
  onSelect={() => {
74
- void navigate(cleanResultUrl(result.url));
63
+ void navigate(result.url);
75
64
  onClose();
76
65
  }}
77
66
  >
78
- <Link to={cleanResultUrl(result.url)}>
67
+ <Link to={result.url}>
79
68
  {result.meta.section === "openapi" ? (
80
69
  <BracketsIcon />
81
70
  ) : (
@@ -94,11 +83,11 @@ export const ResultList = ({
94
83
  value={`sub-${result.meta.title}-${subResult.url}`}
95
84
  className={hoverClassname}
96
85
  onSelect={() => {
97
- void navigate(cleanResultUrl(subResult.url));
86
+ void navigate(subResult.url);
98
87
  onClose();
99
88
  }}
100
89
  >
101
- <Link to={cleanResultUrl(subResult.url)} onClick={onClose}>
90
+ <Link to={subResult.url} onClick={onClose}>
102
91
  <div className="flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50">
103
92
  <span className="font-bold">{subResult.title}</span>
104
93
  <span
@@ -6,7 +6,7 @@ import { PagefindSearch } from "./PagefindSearch.js";
6
6
  export type PagefindOptions = Extract<
7
7
  ZudokuConfig["search"],
8
8
  { type: "pagefind" }
9
- > & { basePath?: string };
9
+ >;
10
10
 
11
11
  export const pagefindSearchPlugin = (
12
12
  options: PagefindOptions,
@@ -1,3 +0,0 @@
1
- export declare const pagefindCommand: (argv: {
2
- forceBuild: boolean;
3
- }) => Promise<void>;
@@ -1,59 +0,0 @@
1
- import { glob } from "glob";
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- import colors from "picocolors";
5
- import { runBuild } from "../../vite/build.js";
6
- import { loadZudokuConfig } from "../../vite/config.js";
7
- import { createPagefindIndex } from "../../vite/create-pagefind-index.js";
8
- import { writeLine } from "../../vite/reporter.js";
9
- import { logger } from "../common/logger.js";
10
- const captureOutput = async (fn) => {
11
- const stdout = process.stdout.write;
12
- const stderr = process.stderr.write;
13
- process.stdout.write = () => true;
14
- process.stderr.write = () => true;
15
- try {
16
- return await fn();
17
- }
18
- finally {
19
- process.stdout.write = stdout;
20
- process.stderr.write = stderr;
21
- }
22
- };
23
- export const pagefindCommand = async (argv) => {
24
- const dir = process.cwd();
25
- const dist = path.join(dir, "dist");
26
- const { config } = await loadZudokuConfig({ mode: "production", command: "build" }, dir);
27
- if (config.search?.type !== "pagefind") {
28
- logger.warn(colors.yellow("Search is not configured to use pagefind."));
29
- }
30
- const message = argv.forceBuild
31
- ? "creating build and pagefind index..."
32
- : "building pagefind index...";
33
- writeLine(colors.blue(message));
34
- if (argv.forceBuild) {
35
- await captureOutput(() => runBuild({ dir }));
36
- }
37
- const outputPath = await createPagefindIndex({
38
- dir: dist,
39
- outDir: path.join(process.cwd(), "public"),
40
- });
41
- const successMessage = argv.forceBuild
42
- ? `✓ build created and pagefind index written to ${outputPath}`
43
- : `✓ pagefind index written to ${outputPath}`;
44
- writeLine(colors.blue(successMessage));
45
- // find pagefind directory in dist with glob
46
- const pagefindGlob = await glob("**/pagefind/", {
47
- cwd: dist,
48
- absolute: true,
49
- });
50
- const pagefindDir = pagefindGlob.at(0);
51
- if (!pagefindDir) {
52
- throw new Error(`pagefind directory not found in ${dist}.`);
53
- }
54
- // move from dist to public dir so it can be consumed in dev
55
- const publicDir = path.join(dir, "public/pagefind");
56
- await fs.rm(publicDir, { recursive: true, force: true });
57
- await fs.rename(pagefindDir, publicDir);
58
- };
59
- //# sourceMappingURL=pagefind-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagefind-command.js","sourceRoot":"","sources":["../../../src/cli/dev/pagefind-command.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=PluginSystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginSystem.js","sourceRoot":"","sources":["../../../../src/lib/components/context/PluginSystem.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SchemaView-Brn-YxHY.js","sources":["../../../node_modules/.pnpm/graphql@16.10.0/node_modules/graphql/utilities/stripIgnoredCharacters.mjs","../src/lib/plugins/openapi/client/useCreateQuery.ts","../src/lib/util/groupBy.ts","../src/lib/plugins/openapi/ParamInfos.tsx","../src/lib/plugins/openapi/components/EnumValues.tsx","../src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx","../src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx","../src/lib/plugins/openapi/schema/utils.ts","../src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx","../src/lib/plugins/openapi/schema/SchemaView.tsx"],"sourcesContent":["import { printBlockString } from '../language/blockString.mjs';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.mjs';\nimport { isSource, Source } from '../language/source.mjs';\nimport { TokenKind } from '../language/tokenKind.mjs';\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n *\n * Query example:\n *\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n *\n * SDL example:\n *\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n */\n\nexport function stripIgnoredCharacters(source) {\n const sourceObj = isSource(source) ? source : new Source(source);\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n let wasLastAddedTokenNonPunctuator = false;\n\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n */\n\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, {\n minimize: true,\n });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n","import { stripIgnoredCharacters } from \"graphql\";\nimport { use } from \"react\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport { GraphQLContext } from \"./GraphQLContext.js\";\n\ntype NoExtraProps<T, U extends T = T> = U & {\n [K in Exclude<keyof U, keyof T>]?: never;\n};\n\nexport const useCreateQuery = <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never>\n ? []\n : [NoExtraProps<TVariables>]\n) => {\n const graphQLClient = use(GraphQLContext);\n\n if (graphQLClient === undefined) {\n throw new Error(\"useGraphQL must be used within a GraphQLProvider\");\n }\n\n return {\n queryFn: () => graphQLClient.fetch(query, variables),\n queryKey: [stripIgnoredCharacters(query.toString()), variables],\n } as const;\n};\n","export const groupBy = <\n T extends Record<PropertyKey, any>,\n KeySelector extends (item: T) => PropertyKey,\n>(\n arr: T[],\n keySelector: KeySelector,\n): Partial<Record<ReturnType<KeySelector>, T[]>> => {\n return arr.reduce(\n (accumulator, val) => {\n const groupedKey = keySelector(val) as ReturnType<KeySelector>;\n if (!accumulator[groupedKey]) {\n accumulator[groupedKey] = [];\n }\n accumulator[groupedKey].push(val);\n return accumulator;\n },\n {} as Record<ReturnType<KeySelector>, T[]>,\n );\n};\n","import { ChevronsLeftRightIcon } from \"lucide-react\";\nimport { isValidElement, useState } from \"react\";\nimport { InlineCode } from \"../../components/InlineCode.js\";\nimport { type SchemaObject } from \"../../oas/parser/index.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst Pattern = ({ pattern }: { pattern: string }) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const isExpandable = pattern.length > 20;\n const shortPattern = isExpandable ? `${pattern.slice(0, 20)}…` : pattern;\n\n return (\n <InlineCode\n className={cn(\"text-xs\", isExpandable && \"cursor-pointer\")}\n onClick={() => setIsExpanded(!isExpanded)}\n selectOnClick={false}\n >\n {isExpanded ? pattern : shortPattern}\n {isExpandable && (\n <button type=\"button\" className=\"p-1 translate-y-[2px]\">\n {!isExpanded && <ChevronsLeftRightIcon size={12} />}\n </button>\n )}\n </InlineCode>\n );\n};\n\nconst getSchemaInfos = (schema?: SchemaObject) => {\n if (!schema) return [];\n\n return [\n schema.type === \"array\" && schema.items.type\n ? `${schema.items.type}[]`\n : Array.isArray(schema.type)\n ? schema.type.join(\" | \")\n : schema.type,\n\n schema.enum && \"enum\",\n schema.format,\n schema.minimum && `min: ${schema.minimum}`,\n schema.maximum && `max: ${schema.maximum}`,\n schema.minLength && `minLength: ${schema.minLength}`,\n schema.maxLength && `maxLength: ${schema.maxLength}`,\n schema.minItems && `minItems: ${schema.minItems}`,\n schema.maxItems && `maxItems: ${schema.maxItems}`,\n schema.uniqueItems && \"unique\",\n schema.minProperties && `minProps: ${schema.minProperties}`,\n schema.maxProperties && `maxProps: ${schema.maxProperties}`,\n schema.readOnly && \"readOnly\",\n schema.writeOnly && \"writeOnly\",\n schema.deprecated && \"deprecated\",\n schema.pattern && (\n <>\n pattern: <Pattern pattern={schema.pattern} />\n </>\n ),\n ];\n};\n\nexport const ParamInfos = ({\n schema,\n extraItems = [],\n className,\n}: {\n schema?: SchemaObject;\n extraItems?: unknown[];\n className?: string;\n}) => {\n const filteredItems = [...getSchemaInfos(schema), ...extraItems].flatMap(\n (item) => (typeof item === \"string\" || isValidElement(item) ? item : []),\n );\n\n return (\n <span className={className}>\n {filteredItems.map((item, index) => (\n <span className=\"text-muted-foreground\" key={index}>\n {item}\n {index < filteredItems.length - 1 && (\n <span className=\"text-muted-foreground/50\">\n &nbsp;&middot;&nbsp;\n </span>\n )}\n </span>\n ))}\n </span>\n );\n};\n","import { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"zudoku/ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { SelectOnClick } from \"./SelectOnClick.js\";\n\nexport const EnumValues = ({\n values,\n className,\n maxVisibleValues = 8,\n}: {\n values: Array<string | number>;\n className?: string;\n maxVisibleValues?: number;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!values.length) return null;\n\n const shouldCollapse = values.length > maxVisibleValues;\n const visibleValues =\n shouldCollapse && !isOpen ? values.slice(0, maxVisibleValues) : values;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1.5 text-xs\", className)}>\n <span className=\"text-muted-foreground\">Enum values: </span>\n {visibleValues.map((value) => (\n <div key={value}>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {value}\n </SelectOnClick>\n </div>\n ))}\n {shouldCollapse && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-fit px-0\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {isOpen ? (\n <div className=\"flex items-center gap-1\">\n <ChevronUpIcon size={12} />\n <span className=\"text-muted-foreground\">show less</span>\n </div>\n ) : (\n <div className=\"flex items-center gap-1\">\n <ChevronDownIcon size={12} />\n <span className=\"text-muted-foreground\">\n show {values.length - maxVisibleValues} more\n </span>\n </div>\n )}\n </Button>\n )}\n </div>\n );\n};\n","import type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\n\nexport const SchemaExampleAndDefault = ({\n schema,\n}: {\n schema: SchemaObject;\n}) => {\n const example = schema.examples?.at(0);\n const defaultValue = schema.default;\n\n if (!example && !defaultValue) return null;\n\n return (\n <div className=\"flex flex-col gap-1 text-xs\">\n {example && (\n <div>\n <span className=\"text-muted-foreground\">Example: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {typeof example === \"object\" ? JSON.stringify(example) : example}\n </SelectOnClick>\n </div>\n )}\n {defaultValue && (\n <div>\n <span className=\"text-muted-foreground\">Default: </span>\n <SelectOnClick className=\"border rounded px-1 font-mono\">\n {typeof defaultValue === \"object\"\n ? JSON.stringify(defaultValue)\n : defaultValue}\n </SelectOnClick>\n </div>\n )}\n </div>\n );\n};\n","import {\n ChevronDownIcon,\n CircleDotIcon,\n CircleFadingPlusIcon,\n CircleIcon,\n} from \"lucide-react\";\nimport { cn } from \"../../../../util/cn.js\";\n\nimport type { LogicalGroupType } from \"../utils.js\";\n\nconst iconMap = {\n AND: <CircleFadingPlusIcon size={16} className=\"fill-card\" />,\n OR: <CircleDotIcon size={16} className=\"fill-card\" />,\n ONE: <CircleIcon size={14} className=\"fill-card\" />,\n} as const;\n\nconst colorClass = {\n AND: \"text-green-500 dark:text-green-300/60\",\n OR: \"text-blue-400 dark:text-blue-500\",\n ONE: \"text-purple-500 dark:text-purple-300/60\",\n} as const;\n\nexport const LogicalGroupConnector = ({\n type,\n isOpen,\n className,\n}: {\n type: LogicalGroupType;\n isOpen: boolean;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n colorClass[type],\n \"relative text-sm flex py-2\",\n \"before:border-l before:absolute before:-top-2 before:-bottom-2 before:border-border before:border-dashed before:content-['']\",\n className,\n )}\n >\n <div className=\"-translate-x-[7px] flex gap-1 items-center\">\n {iconMap[type]}\n <div\n className={cn(\n \"translate-y-px mx-px opacity-0 group-hover:opacity-100 transition\",\n !isOpen && \"-rotate-90\",\n )}\n >\n <ChevronDownIcon size={16} />\n </div>\n </div>\n </div>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { useState } from \"react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { SchemaView } from \"../SchemaView.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupConnector } from \"./LogicalGroupConnector.js\";\n\nexport const LogicalGroupItem = (props: {\n type: LogicalGroupType;\n schema: SchemaObject;\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n\n return (\n <Collapsible.Root\n open={isOpen}\n onOpenChange={() => setIsOpen((prev) => !prev)}\n className=\"group\"\n >\n <Collapsible.Trigger>\n <LogicalGroupConnector type={props.type} isOpen={isOpen} />\n </Collapsible.Trigger>\n {!isOpen && <div className=\"wavy-line bg-border translate-y-1\" />}\n <Collapsible.Content>\n <SchemaView schema={props.schema} />\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { SquareMinusIcon, SquarePlusIcon } from \"lucide-react\";\nimport type { SchemaObject } from \"../../../../oas/parser/index.js\";\nimport { Card } from \"../../../../ui/Card.js\";\nimport type { LogicalGroupType } from \"../utils.js\";\nimport { LogicalGroupItem } from \"./LogicalGroupItem.js\";\n\nconst typeLabel = {\n AND: \"All of\",\n OR: \"Any of\",\n ONE: \"One of\",\n};\n\nexport const LogicalGroup = ({\n schemas,\n type,\n isOpen,\n toggleOpen,\n}: {\n schemas: SchemaObject[];\n type: LogicalGroupType;\n isOpen: boolean;\n toggleOpen: () => void;\n}) => (\n <Collapsible.Root open={isOpen} onOpenChange={toggleOpen} asChild>\n <Card className=\"px-6\">\n <Collapsible.Trigger className=\"flex gap-2 items-center py-2 w-full text-sm text-muted-foreground -translate-x-1.5\">\n {isOpen ? <SquareMinusIcon size={14} /> : <SquarePlusIcon size={14} />}\n <span>{typeLabel[type]}</span>\n </Collapsible.Trigger>\n\n <Collapsible.Content className=\"pb-4\">\n {schemas.map((subSchema, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <LogicalGroupItem key={index} type={type} schema={subSchema} />\n ))}\n </Collapsible.Content>\n </Card>\n </Collapsible.Root>\n);\n","import { CIRCULAR_REF } from \"../../../oas/graphql/circular.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\n\nexport const isBasicType = (\n type: unknown,\n): type is \"string\" | \"number\" | \"boolean\" | \"integer\" | \"null\" =>\n typeof type === \"string\" &&\n [\"string\", \"number\", \"boolean\", \"integer\", \"null\"].includes(type);\n\nexport const isComplexType = (value: SchemaObject) =>\n (value.type === \"object\" && Object.keys(value.properties ?? {}).length > 0) ||\n (value.type === \"array\" &&\n typeof value.items === \"object\" &&\n (!value.items.type || value.items.type === \"object\"));\n\nexport const hasLogicalGroupings = (value: SchemaObject) =>\n Boolean(value.oneOf ?? value.allOf ?? value.anyOf);\n\nexport const LogicalSchemaTypeMap = {\n allOf: \"AND\",\n anyOf: \"OR\",\n oneOf: \"ONE\",\n} as const;\n\nexport type LogicalGroupType = \"AND\" | \"OR\" | \"ONE\";\n\nexport const isCircularRef = (schema: unknown): schema is string =>\n schema === CIRCULAR_REF;\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { MinusIcon, PlusIcon, RefreshCcwDotIcon } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { InlineCode } from \"../../../components/InlineCode.js\";\nimport { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { objectEntries } from \"../../../util/objectEntries.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { SelectOnClick } from \"../components/SelectOnClick.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { LogicalGroup } from \"./LogicalGroup/LogicalGroup.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport { SchemaView } from \"./SchemaView.js\";\nimport {\n hasLogicalGroupings,\n isCircularRef,\n isComplexType,\n LogicalSchemaTypeMap,\n} from \"./utils.js\";\n\nexport const SchemaLogicalGroup = ({ schema }: { schema: SchemaObject }) => {\n const [isOpen, setIsOpen] = useState(true);\n const toggleOpen = useCallback(() => setIsOpen((prev) => !prev), []);\n\n for (const [key, type] of objectEntries(LogicalSchemaTypeMap)) {\n if (!schema[key]) continue;\n\n return (\n <LogicalGroup\n schemas={schema[key]}\n type={type}\n isOpen={isOpen}\n toggleOpen={toggleOpen}\n />\n );\n }\n};\n\nconst RecursiveIndicator = () => (\n <InlineCode\n className=\"inline-flex items-center gap-1.5 italic text-xs translate-y-0.5\"\n selectOnClick={false}\n >\n <RefreshCcwDotIcon size={13} />\n <span>circular</span>\n </InlineCode>\n);\n\nexport const SchemaPropertyItem = ({\n name,\n schema,\n group,\n defaultOpen = false,\n showCollapseButton = true,\n}: {\n name: string;\n schema: SchemaObject;\n group: \"required\" | \"optional\" | \"deprecated\";\n defaultOpen?: boolean;\n showCollapseButton?: boolean;\n}) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n if (isCircularRef(schema)) {\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2\">\n <code>{name}</code>\n <ParamInfos\n schema={schema}\n extraItems={[<RecursiveIndicator key=\"circular-ref\" />]}\n />\n </div>\n <SchemaExampleAndDefault schema={schema} />\n </div>\n </li>\n );\n }\n\n return (\n <li className=\"p-4 bg-border/20 hover:bg-border/30\">\n <div className=\"flex flex-col gap-2.5 justify-between text-sm\">\n <div className=\"space-x-2\">\n <SelectOnClick asChild>\n <code>{name}</code>\n </SelectOnClick>\n <ParamInfos\n schema={schema}\n extraItems={[\n group !== \"optional\" && (\n <span className=\"text-primary\">required</span>\n ),\n schema.type === \"array\" &&\n \"items\" in schema &&\n isCircularRef(schema.items) && <RecursiveIndicator />,\n ]}\n />\n </div>\n {schema.description && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={schema.description}\n />\n )}\n {schema.type === \"array\" && \"items\" in schema && schema.items.enum && (\n <EnumValues values={schema.items.enum} />\n )}\n {schema.enum && <EnumValues values={schema.enum} />}\n <SchemaExampleAndDefault schema={schema} />\n {(hasLogicalGroupings(schema) || isComplexType(schema)) && (\n <Collapsible.Root\n defaultOpen={defaultOpen}\n open={isOpen}\n onOpenChange={() => setIsOpen(!isOpen)}\n >\n {showCollapseButton && (\n <Collapsible.Trigger asChild>\n <Button variant=\"expand\" size=\"sm\" className=\"h-7\">\n {isOpen ? <MinusIcon size={12} /> : <PlusIcon size={12} />}\n {!isOpen ? \"Show properties\" : \"Hide properties\"}\n </Button>\n </Collapsible.Trigger>\n )}\n <Collapsible.Content>\n <div className=\"mt-2\">\n {hasLogicalGroupings(schema) ? (\n <SchemaLogicalGroup schema={schema} />\n ) : schema.type === \"object\" ? (\n <SchemaView schema={schema} />\n ) : (\n schema.type === \"array\" &&\n \"items\" in schema &&\n typeof schema.items === \"object\" &&\n !isCircularRef(schema.items) && (\n <SchemaView schema={schema.items} />\n )\n )}\n </div>\n </Collapsible.Content>\n </Collapsible.Root>\n )}\n </div>\n </li>\n );\n};\n","import { Markdown, ProseClasses } from \"../../../components/Markdown.js\";\nimport type { SchemaObject } from \"../../../oas/parser/index.js\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../../../ui/Card.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { groupBy } from \"../../../util/groupBy.js\";\nimport { EnumValues } from \"../components/EnumValues.js\";\nimport { ParamInfos } from \"../ParamInfos.js\";\nimport { SchemaExampleAndDefault } from \"./SchemaExampleAndDefault.js\";\nimport {\n SchemaLogicalGroup,\n SchemaPropertyItem,\n} from \"./SchemaPropertyItem.js\";\nimport { hasLogicalGroupings, isBasicType } from \"./utils.js\";\n\nconst renderMarkdown = (content?: string) =>\n content && (\n <Markdown\n className={cn(ProseClasses, \"text-sm leading-normal line-clamp-4\")}\n content={content}\n />\n );\n\nconst renderBasicSchema = (schema: SchemaObject) => (\n <Card className=\"p-4 space-y-2\">\n <span className=\"text-sm text-muted-foreground\">\n <ParamInfos schema={schema} />\n </span>\n {schema.enum && <EnumValues values={schema.enum} />}\n {renderMarkdown(schema.description)}\n <SchemaExampleAndDefault schema={schema} />\n </Card>\n);\n\nexport const SchemaView = ({\n schema,\n defaultOpen = false,\n}: {\n schema?: SchemaObject | null;\n defaultOpen?: boolean;\n}) => {\n if (!schema || Object.keys(schema).length === 0) {\n return (\n <Card className=\"p-4\">\n <span className=\"text-sm text-muted-foreground italic\">\n No schema specified\n </span>\n </Card>\n );\n }\n\n if (hasLogicalGroupings(schema)) {\n return <SchemaLogicalGroup schema={schema} />;\n }\n\n if (isBasicType(schema.type)) {\n return renderBasicSchema(schema);\n }\n\n if (schema.type === \"array\" && typeof schema.items === \"object\") {\n return renderBasicSchema(schema.items as SchemaObject);\n }\n\n if (schema.type === \"object\") {\n const groupedProperties = groupBy(\n Object.entries(schema.properties ?? {}),\n ([propertyName, property]) => {\n return property.deprecated\n ? \"deprecated\"\n : schema.required?.includes(propertyName)\n ? \"required\"\n : \"optional\";\n },\n );\n const groupNames = [\"required\", \"optional\", \"deprecated\"] as const;\n\n return (\n <Card className=\"divide-y overflow-hidden\">\n {groupNames.map(\n (group) =>\n groupedProperties[group] && (\n <ul key={group} className=\"divide-y\">\n {groupedProperties[group].map(([name, schema]) => (\n <SchemaPropertyItem\n key={name}\n name={name}\n schema={schema}\n group={group}\n defaultOpen={defaultOpen}\n />\n ))}\n </ul>\n ),\n )}\n </Card>\n );\n }\n\n if (schema.additionalProperties) {\n return (\n <Card className=\"my-2\">\n <CardHeader>\n <CardTitle>Additional Properties:</CardTitle>\n </CardHeader>\n <CardContent>\n <SchemaView schema={schema.additionalProperties as SchemaObject} />\n </CardContent>\n </Card>\n );\n }\n\n return null;\n};\n"],"names":["stripIgnoredCharacters","source","sourceObj","isSource","Source","body","lexer","Lexer","strippedBody","wasLastAddedTokenNonPunctuator","TokenKind","currentToken","tokenKind","isNonPunctuator","isPunctuatorTokenKind","tokenBody","printBlockString","useCreateQuery","query","variables","graphQLClient","use","GraphQLContext","groupBy","arr","keySelector","accumulator","val","groupedKey","Pattern","pattern","isExpanded","setIsExpanded","useState","isExpandable","shortPattern","jsxs","InlineCode","cn","jsx","ChevronsLeftRightIcon","getSchemaInfos","schema","Fragment","ParamInfos","extraItems","className","filteredItems","item","isValidElement","index","EnumValues","values","maxVisibleValues","isOpen","setIsOpen","shouldCollapse","visibleValues","value","SelectOnClick","Button","ChevronUpIcon","ChevronDownIcon","SchemaExampleAndDefault","example","_a","defaultValue","iconMap","CircleFadingPlusIcon","CircleDotIcon","CircleIcon","colorClass","LogicalGroupConnector","type","LogicalGroupItem","props","Collapsible","prev","SchemaView","typeLabel","LogicalGroup","schemas","toggleOpen","Card","SquareMinusIcon","SquarePlusIcon","subSchema","isBasicType","isComplexType","hasLogicalGroupings","LogicalSchemaTypeMap","isCircularRef","CIRCULAR_REF","SchemaLogicalGroup","useCallback","key","objectEntries","RecursiveIndicator","RefreshCcwDotIcon","SchemaPropertyItem","name","group","defaultOpen","showCollapseButton","Markdown","ProseClasses","MinusIcon","PlusIcon","renderMarkdown","content","renderBasicSchema","groupedProperties","propertyName","property","groupNames","CardHeader","CardTitle","CardContent"],"mappings":"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","x_google_ignoreList":[0]}