fumadocs-openapi 10.10.1 → 10.10.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 (125) hide show
  1. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/bundle.js +239 -0
  2. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/dereference.js +187 -0
  3. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js +136 -0
  4. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/normalize-args.js +41 -0
  5. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/options.js +124 -0
  6. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parse.js +109 -0
  7. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parsers/binary.js +30 -0
  8. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parsers/json.js +46 -0
  9. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parsers/text.js +36 -0
  10. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parsers/yaml.js +49 -0
  11. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/pointer.js +242 -0
  12. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/ref.js +247 -0
  13. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/refs.js +210 -0
  14. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/resolve-external.js +100 -0
  15. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/resolvers/file.js +41 -0
  16. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/resolvers/http.js +112 -0
  17. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/convert-path-to-posix.js +8 -0
  18. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/errors.js +146 -0
  19. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/is-windows.js +5 -0
  20. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/maybe.js +18 -0
  21. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/next.js +11 -0
  22. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/plugins.js +99 -0
  23. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/schema-resources.js +30 -0
  24. package/dist/node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/url.js +315 -0
  25. package/dist/utils/document/process.js +7 -12
  26. package/package.json +6 -9
  27. package/dist/node_modules/.pnpm/@scalar_helpers@0.8.0/node_modules/@scalar/helpers/dist/general/create-limiter.js +0 -43
  28. package/dist/node_modules/.pnpm/@scalar_helpers@0.8.0/node_modules/@scalar/helpers/dist/object/is-object.js +0 -27
  29. package/dist/node_modules/.pnpm/@scalar_helpers@0.8.0/node_modules/@scalar/helpers/dist/object/prevent-pollution.js +0 -33
  30. package/dist/node_modules/.pnpm/@scalar_helpers@0.8.0/node_modules/@scalar/helpers/dist/queue/queue.js +0 -106
  31. package/dist/node_modules/.pnpm/@scalar_helpers@0.8.0/node_modules/@scalar/helpers/dist/string/generate-hash.js +0 -120
  32. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/bundle.js +0 -357
  33. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/fetch-urls/index.js +0 -73
  34. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/node.js +0 -3
  35. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/parse-yaml/index.js +0 -1
  36. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/read-files/index.js +0 -51
  37. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/value-generator.js +0 -102
  38. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/convert-to-local-ref.js +0 -24
  39. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/escape-json-pointer.js +0 -11
  40. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/get-schemas.js +0 -44
  41. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/get-segments-from-path.js +0 -10
  42. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/get-value-by-path.js +0 -42
  43. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/is-file-path.js +0 -23
  44. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/is-http-url.js +0 -23
  45. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/is-json-object.js +0 -28
  46. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/is-yaml.js +0 -21
  47. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/normalize.js +0 -33
  48. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/resolve-reference-path.js +0 -30
  49. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/set-value-at-path.js +0 -70
  50. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/to-relative-path.js +0 -33
  51. package/dist/node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/helpers/unescape-json-pointer.js +0 -12
  52. package/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -19
  53. package/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -430
  54. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-collection.js +0 -50
  55. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-doc.js +0 -39
  56. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-node.js +0 -85
  57. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-scalar.js +0 -57
  58. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/composer.js +0 -193
  59. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-map.js +0 -82
  60. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +0 -174
  61. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +0 -40
  62. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-end.js +0 -36
  63. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +0 -153
  64. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +0 -203
  65. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-props.js +0 -105
  66. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-contains-newline.js +0 -27
  67. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +0 -25
  68. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +0 -10
  69. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-map-includes.js +0 -10
  70. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/Document.js +0 -277
  71. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/anchors.js +0 -62
  72. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/applyReviver.js +0 -38
  73. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/createNode.js +0 -61
  74. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/directives.js +0 -163
  75. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/errors.js +0 -48
  76. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/index.js +0 -16
  77. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/log.js +0 -6
  78. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Alias.js +0 -92
  79. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Collection.js +0 -117
  80. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Node.js +0 -32
  81. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Pair.js +0 -29
  82. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Scalar.js +0 -24
  83. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLMap.js +0 -106
  84. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +0 -104
  85. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +0 -49
  86. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js +0 -33
  87. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/toJS.js +0 -35
  88. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-scalar.js +0 -3
  89. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-visit.js +0 -89
  90. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst.js +0 -40
  91. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/lexer.js +0 -529
  92. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/line-counter.js +0 -45
  93. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/parser.js +0 -859
  94. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/public-api.js +0 -44
  95. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/Schema.js +0 -27
  96. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/map.js +0 -16
  97. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/null.js +0 -13
  98. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/seq.js +0 -16
  99. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/string.js +0 -14
  100. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/bool.js +0 -17
  101. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/float.js +0 -38
  102. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/int.js +0 -37
  103. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/schema.js +0 -23
  104. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/json/schema.js +0 -61
  105. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/tags.js +0 -81
  106. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +0 -52
  107. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +0 -24
  108. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +0 -41
  109. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +0 -70
  110. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +0 -39
  111. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +0 -60
  112. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +0 -56
  113. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +0 -39
  114. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +0 -65
  115. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +0 -79
  116. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +0 -111
  117. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringify.js +0 -105
  118. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +0 -116
  119. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyComment.js +0 -16
  120. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +0 -59
  121. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +0 -19
  122. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyPair.js +0 -95
  123. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyString.js +0 -222
  124. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js +0 -187
  125. package/dist/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/index.js +0 -16
@@ -0,0 +1,315 @@
1
+ import convertPathToPosix from "./convert-path-to-posix.js";
2
+ import { isWindows } from "./is-windows.js";
3
+ //#region ../../node_modules/.pnpm/@apidevtools+json-schema-ref-parser@15.3.5_@types+json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/url.js
4
+ const forwardSlashPattern = /\//g;
5
+ const protocolPattern = /^(\w{2,}):\/\//i;
6
+ const jsonPointerSlash = /~1/g;
7
+ const jsonPointerTilde = /~0/g;
8
+ const isAbsoluteWin32Path = /^[a-zA-Z]:[\\/]/;
9
+ const urlEncodePatterns = [[/\?/g, "%3F"], [/#/g, "%23"]];
10
+ const urlDecodePatterns = [
11
+ /%23/g,
12
+ "#",
13
+ /%24/g,
14
+ "$",
15
+ /%26/g,
16
+ "&",
17
+ /%2C/g,
18
+ ",",
19
+ /%40/g,
20
+ "@"
21
+ ];
22
+ const parse = (u) => new URL(u);
23
+ /**
24
+ * Returns resolved target URL relative to a base URL in a manner similar to that of a Web browser resolving an anchor tag HREF.
25
+ *
26
+ * @returns
27
+ */
28
+ function resolve(from, to) {
29
+ const fromUrl = new URL(convertPathToPosix(from), "https://aaa.nonexistanturl.com");
30
+ const resolvedUrl = new URL(convertPathToPosix(to), fromUrl);
31
+ const endSpaces = to.match(/(\s*)$/)?.[1] || "";
32
+ if (resolvedUrl.hostname === "aaa.nonexistanturl.com") {
33
+ const { pathname, search, hash } = resolvedUrl;
34
+ return pathname + search + decodeURIComponent(hash) + endSpaces;
35
+ }
36
+ const resolved = resolvedUrl.toString() + endSpaces;
37
+ if (resolved.includes("#")) {
38
+ const [base, hash] = resolved.split("#", 2);
39
+ return base + "#" + decodeURIComponent(hash || "");
40
+ }
41
+ return resolved;
42
+ }
43
+ /**
44
+ * Returns the current working directory (in Node) or the current page URL (in browsers).
45
+ *
46
+ * @returns
47
+ */
48
+ function cwd() {
49
+ if (typeof window !== "undefined" && window.location && window.location.href) {
50
+ const href = window.location.href;
51
+ if (!href || !href.startsWith("http")) try {
52
+ new URL(href);
53
+ return href;
54
+ } catch {
55
+ return "/";
56
+ }
57
+ return href;
58
+ }
59
+ if (typeof process !== "undefined" && process.cwd) {
60
+ const path = process.cwd();
61
+ const lastChar = path.slice(-1);
62
+ if (lastChar === "/" || lastChar === "\\") return path;
63
+ else return path + "/";
64
+ }
65
+ return "/";
66
+ }
67
+ /**
68
+ * Returns the protocol of the given URL, or `undefined` if it has no protocol.
69
+ *
70
+ * @param path
71
+ * @returns
72
+ */
73
+ function getProtocol(path) {
74
+ const match = protocolPattern.exec(path || "");
75
+ if (match) return match[1].toLowerCase();
76
+ }
77
+ /**
78
+ * Returns the lowercased file extension of the given URL,
79
+ * or an empty string if it has no extension.
80
+ *
81
+ * @param path
82
+ * @returns
83
+ */
84
+ function getExtension(path) {
85
+ const lastDot = path.lastIndexOf(".");
86
+ if (lastDot >= 0) return stripQuery(path.substring(lastDot).toLowerCase());
87
+ return "";
88
+ }
89
+ /**
90
+ * Removes the query, if any, from the given path.
91
+ *
92
+ * @param path
93
+ * @returns
94
+ */
95
+ function stripQuery(path) {
96
+ const queryIndex = path.indexOf("?");
97
+ if (queryIndex >= 0) path = path.substring(0, queryIndex);
98
+ return path;
99
+ }
100
+ /**
101
+ * Returns the hash (URL fragment), of the given path.
102
+ * If there is no hash, then the root hash ("#") is returned.
103
+ *
104
+ * @param path
105
+ * @returns
106
+ */
107
+ function getHash(path) {
108
+ if (!path) return "#";
109
+ const hashIndex = path.indexOf("#");
110
+ if (hashIndex >= 0) return path.substring(hashIndex);
111
+ return "#";
112
+ }
113
+ /**
114
+ * Removes the hash (URL fragment), if any, from the given path.
115
+ *
116
+ * @param path
117
+ * @returns
118
+ */
119
+ function stripHash(path) {
120
+ if (!path) return "";
121
+ const hashIndex = path.indexOf("#");
122
+ if (hashIndex >= 0) path = path.substring(0, hashIndex);
123
+ return path;
124
+ }
125
+ /**
126
+ * Determines whether the given path is an HTTP(S) URL.
127
+ *
128
+ * @param path
129
+ * @returns
130
+ */
131
+ function isHttp(path) {
132
+ const protocol = getProtocol(path);
133
+ if (protocol === "http" || protocol === "https") return true;
134
+ else if (protocol === void 0) return typeof window !== "undefined";
135
+ else return false;
136
+ }
137
+ /**
138
+ * Determines whether the given url is an unsafe or internal url.
139
+ *
140
+ * @param path - The URL or path to check
141
+ * @returns true if the URL is unsafe/internal, false otherwise
142
+ */
143
+ function isUnsafeUrl(path) {
144
+ if (!path || typeof path !== "string") return true;
145
+ const normalizedPath = path.trim().toLowerCase();
146
+ if (!normalizedPath) return true;
147
+ if (normalizedPath.startsWith("javascript:") || normalizedPath.startsWith("vbscript:") || normalizedPath.startsWith("data:")) return true;
148
+ if (normalizedPath.startsWith("file:")) return true;
149
+ if (typeof window !== "undefined" && window.location && window.location.href) return false;
150
+ const localPatterns = [
151
+ "localhost",
152
+ "127.0.0.1",
153
+ "::1",
154
+ "10.",
155
+ "172.16.",
156
+ "172.17.",
157
+ "172.18.",
158
+ "172.19.",
159
+ "172.20.",
160
+ "172.21.",
161
+ "172.22.",
162
+ "172.23.",
163
+ "172.24.",
164
+ "172.25.",
165
+ "172.26.",
166
+ "172.27.",
167
+ "172.28.",
168
+ "172.29.",
169
+ "172.30.",
170
+ "172.31.",
171
+ "192.168.",
172
+ "169.254.",
173
+ ".local",
174
+ ".internal",
175
+ ".intranet",
176
+ ".corp",
177
+ ".home",
178
+ ".lan"
179
+ ];
180
+ try {
181
+ const url = new URL(normalizedPath.startsWith("//") ? "http:" + normalizedPath : normalizedPath);
182
+ const hostname = url.hostname.toLowerCase();
183
+ for (const pattern of localPatterns) if (hostname === pattern || hostname.startsWith(pattern) || hostname.endsWith(pattern)) return true;
184
+ if (isPrivateIP(hostname)) return true;
185
+ const port = url.port;
186
+ if (port && isInternalPort(parseInt(port))) return true;
187
+ } catch {
188
+ if (normalizedPath.startsWith("/") && !normalizedPath.startsWith("//")) return false;
189
+ for (const pattern of localPatterns) if (normalizedPath.includes(pattern)) return true;
190
+ }
191
+ return false;
192
+ }
193
+ /**
194
+ * Helper function to check if an IP address is in a private range
195
+ */
196
+ function isPrivateIP(ip) {
197
+ const match = ip.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
198
+ if (!match) return false;
199
+ const [, a, b, c, d] = match.map(Number);
200
+ if (a > 255 || b > 255 || c > 255 || d > 255) return false;
201
+ return a === 10 || a === 127 || a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168 || a === 169 && b === 254;
202
+ }
203
+ /**
204
+ * Helper function to check if a port is typically used for internal services
205
+ */
206
+ function isInternalPort(port) {
207
+ return [
208
+ 22,
209
+ 23,
210
+ 25,
211
+ 53,
212
+ 135,
213
+ 139,
214
+ 445,
215
+ 993,
216
+ 995,
217
+ 1433,
218
+ 1521,
219
+ 3306,
220
+ 3389,
221
+ 5432,
222
+ 5900,
223
+ 6379,
224
+ 8080,
225
+ 8443,
226
+ 9200,
227
+ 27017
228
+ ].includes(port);
229
+ }
230
+ /**
231
+ * Determines whether the given path is a filesystem path.
232
+ * This includes "file://" URLs.
233
+ *
234
+ * @param path
235
+ * @returns
236
+ */
237
+ function isFileSystemPath(path) {
238
+ if (typeof window !== "undefined" || typeof process !== "undefined" && process.browser) return false;
239
+ const protocol = getProtocol(path);
240
+ return protocol === void 0 || protocol === "file";
241
+ }
242
+ /**
243
+ * Converts a filesystem path to a properly-encoded URL.
244
+ *
245
+ * This is intended to handle situations where JSON Schema $Ref Parser is called
246
+ * with a filesystem path that contains characters which are not allowed in URLs.
247
+ *
248
+ * @example
249
+ * The following filesystem paths would be converted to the following URLs:
250
+ *
251
+ * <"!@#$%^&*+=?'>.json ==> %3C%22!@%23$%25%5E&*+=%3F\'%3E.json
252
+ * C:\\My Documents\\File (1).json ==> C:/My%20Documents/File%20(1).json
253
+ * file://Project #42/file.json ==> file://Project%20%2342/file.json
254
+ *
255
+ * @param path
256
+ * @returns
257
+ */
258
+ function fromFileSystemPath(path) {
259
+ if (isWindows()) {
260
+ const projectDir = cwd();
261
+ const upperPath = path.toUpperCase();
262
+ const posixUpper = convertPathToPosix(projectDir).toUpperCase();
263
+ const hasProjectDir = upperPath.includes(posixUpper);
264
+ const hasProjectUri = upperPath.includes(posixUpper);
265
+ const isAbsolutePath = isAbsoluteWin32Path.test(path) || path.startsWith("http://") || path.startsWith("https://") || path.startsWith("file://");
266
+ if (!(hasProjectDir || hasProjectUri || isAbsolutePath) && !projectDir.startsWith("http")) {
267
+ const join = (a, b) => {
268
+ if (a.endsWith("/") || a.endsWith("\\")) return a + b;
269
+ else return a + "/" + b;
270
+ };
271
+ path = join(projectDir, path);
272
+ }
273
+ path = convertPathToPosix(path);
274
+ }
275
+ path = encodeURI(path);
276
+ for (const pattern of urlEncodePatterns) path = path.replace(pattern[0], pattern[1]);
277
+ return path;
278
+ }
279
+ /**
280
+ * Converts a URL to a local filesystem path.
281
+ */
282
+ function toFileSystemPath(path, keepFileProtocol) {
283
+ path = path.replace(/%(?![0-9A-Fa-f]{2})/g, "%25");
284
+ path = decodeURI(path);
285
+ for (let i = 0; i < urlDecodePatterns.length; i += 2) path = path.replace(urlDecodePatterns[i], urlDecodePatterns[i + 1]);
286
+ let isFileUrl = path.toLowerCase().startsWith("file://");
287
+ if (isFileUrl) {
288
+ path = path.replace(/^file:\/\//, "").replace(/^\//, "");
289
+ if (isWindows() && path[1] === "/") path = `${path[0]}:${path.substring(1)}`;
290
+ if (keepFileProtocol) path = "file:///" + path;
291
+ else {
292
+ isFileUrl = false;
293
+ path = isWindows() ? path : "/" + path;
294
+ }
295
+ }
296
+ if (isWindows() && !isFileUrl) {
297
+ path = path.replace(forwardSlashPattern, "\\");
298
+ if (path.match(/^[a-z]:\\/i)) path = path[0].toUpperCase() + path.substring(1);
299
+ }
300
+ return path;
301
+ }
302
+ /**
303
+ * Converts a $ref pointer to a valid JSON Path.
304
+ *
305
+ * @param pointer
306
+ * @returns
307
+ */
308
+ function safePointerToPath(pointer) {
309
+ if (pointer.length <= 1 || pointer[0] !== "#" || pointer[1] !== "/") return [];
310
+ return pointer.slice(2).split("/").map((value) => {
311
+ return value.replace(jsonPointerSlash, "/").replace(jsonPointerTilde, "~");
312
+ });
313
+ }
314
+ //#endregion
315
+ export { cwd, fromFileSystemPath, getExtension, getHash, isFileSystemPath, isHttp, isUnsafeUrl, parse, resolve, safePointerToPath, stripHash, toFileSystemPath };
@@ -1,23 +1,18 @@
1
- import { bundle } from "../../node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/bundle.js";
2
1
  import { upgrade } from "../../node_modules/.pnpm/@scalar_openapi-upgrader@0.2.8/node_modules/@scalar/openapi-upgrader/dist/upgrade.js";
3
- import { fetchUrls } from "../../node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/fetch-urls/index.js";
4
- import { readFiles } from "../../node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/read-files/index.js";
5
- import "../../node_modules/.pnpm/@scalar_json-magic@0.12.14/node_modules/@scalar/json-magic/dist/bundle/plugins/node.js";
6
2
  import { dereferenceDocument } from "./dereference.js";
3
+ import { bundle } from "../../node_modules/.pnpm/@apidevtools_json-schema-ref-parser@15.3.5_@types_json-schema@7.0.15/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js";
7
4
  //#region src/utils/document/process.ts
8
5
  /**
9
6
  * process & reference input document to a Fumadocs OpenAPI compatible format
10
7
  */
11
8
  async function processDocument(input) {
12
- return dereferenceDocument(await bundle(input, {
13
- plugins: [fetchUrls(), readFiles()],
14
- treeShake: true,
15
- hooks: { onResolveError(node) {
16
- throw new Error(`Failed to resolve ${node.$ref}`);
17
- } }
18
- }).then((v) => upgrade(v, "3.2")).catch((e) => {
9
+ try {
10
+ let bundled = await bundle(input);
11
+ bundled = upgrade(bundled, "3.2");
12
+ return dereferenceDocument(bundled);
13
+ } catch (e) {
19
14
  throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, { cause: e });
20
- }));
15
+ }
21
16
  }
22
17
  //#endregion
23
18
  export { processDocument };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fumadocs-openapi",
3
- "version": "10.10.1",
3
+ "version": "10.10.2",
4
4
  "description": "Generate MDX docs for your OpenAPI spec",
5
5
  "keywords": [
6
6
  "Docs",
@@ -57,9 +57,9 @@
57
57
  "@fumari/stf": "1.0.5"
58
58
  },
59
59
  "devDependencies": {
60
+ "@apidevtools/json-schema-ref-parser": "^15.3.5",
60
61
  "@fastify/deepmerge": "^3.2.1",
61
62
  "@scalar/api-client-react": "2.0.20",
62
- "@scalar/json-magic": "^0.12.14",
63
63
  "@scalar/openapi-upgrader": "^0.2.8",
64
64
  "@tailwindcss/oxide": "^4.3.0",
65
65
  "@types/js-yaml": "^4.0.9",
@@ -72,8 +72,8 @@
72
72
  "tsdown": "0.22.0",
73
73
  "xml-js": "^1.6.11",
74
74
  "fumadocs-core": "16.9.3",
75
- "fumadocs-ui": "16.9.3",
76
- "tsconfig": "0.0.0"
75
+ "tsconfig": "0.0.0",
76
+ "fumadocs-ui": "16.9.3"
77
77
  },
78
78
  "peerDependencies": {
79
79
  "@scalar/api-client-react": "^2.0.20",
@@ -96,18 +96,15 @@
96
96
  }
97
97
  },
98
98
  "inlinedDependencies": {
99
+ "@apidevtools/json-schema-ref-parser": "15.3.5",
99
100
  "@fastify/deepmerge": "3.2.1",
100
- "@scalar/helpers": "0.8.0",
101
- "@scalar/json-magic": "0.12.14",
102
101
  "@scalar/openapi-upgrader": "0.2.8",
103
102
  "ajv": "8.20.0",
104
103
  "fast-content-type-parse": "3.0.0",
105
104
  "fast-deep-equal": "3.1.3",
106
105
  "fast-uri": "3.1.0",
107
106
  "json-schema-traverse": "1.0.0",
108
- "pathe": "2.0.3",
109
- "xml-js": "1.6.11",
110
- "yaml": "2.9.0"
107
+ "xml-js": "1.6.11"
111
108
  },
112
109
  "scripts": {
113
110
  "build": "tsdown",
@@ -1,43 +0,0 @@
1
- import { Queue } from "../queue/queue.js";
2
- //#region ../../node_modules/.pnpm/@scalar+helpers@0.8.0/node_modules/@scalar/helpers/dist/general/create-limiter.js
3
- /**
4
- * Creates a function that limits the number of concurrent executions of async functions.
5
- *
6
- * @param maxConcurrent - Maximum number of concurrent executions allowed
7
- * @returns A function that wraps async functions to limit their concurrent execution
8
- *
9
- * @example
10
- * ```ts
11
- * const limiter = createLimiter(2) // Allow max 2 concurrent executions
12
- *
13
- * // These will run with max 2 at a time
14
- * const results = await Promise.all([
15
- * limiter(() => fetch('/api/1')),
16
- * limiter(() => fetch('/api/2')),
17
- * limiter(() => fetch('/api/3')),
18
- * limiter(() => fetch('/api/4'))
19
- * ])
20
- * ```
21
- */
22
- function createLimiter(maxConcurrent) {
23
- let activeCount = 0;
24
- const queue = new Queue();
25
- const next = () => {
26
- if (queue.isEmpty() || activeCount >= maxConcurrent) return;
27
- const resolve = queue.dequeue();
28
- if (resolve) resolve();
29
- };
30
- const run = async (fn) => {
31
- if (activeCount >= maxConcurrent) await new Promise((resolve) => queue.enqueue(resolve));
32
- activeCount++;
33
- try {
34
- return await fn();
35
- } finally {
36
- activeCount--;
37
- next();
38
- }
39
- };
40
- return run;
41
- }
42
- //#endregion
43
- export { createLimiter };
@@ -1,27 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@scalar+helpers@0.8.0/node_modules/@scalar/helpers/dist/object/is-object.js
2
- /**
3
- * Returns true if the provided value is a record object
4
- * (i.e. not null, not an array, and has an actual object as the prototype).
5
- *
6
- * Differs from the previous isObject in that it returns false for Date,
7
- * RegExp, Error, Map, Set, WeakMap, WeakSet, Promise, and other non-plain objects.
8
- *
9
- * | Value | Result |
10
- * | :--- | :--- |
11
- * | `isObject({})` | `true` |
12
- * | `isObject({ a: 1 })` | `true` |
13
- * | `isObject([])` | `false` (Array) |
14
- * | `isObject(null)` | `false` |
15
- * | `isObject(123)` | `false` |
16
- * | `isObject('string')` | `false` |
17
- * | `isObject(new Error('test'))` | `false` |
18
- * | `isObject(new Date())` | `false` |
19
- * | `isObject(Object.create(null))` | `true` |
20
- */
21
- const isObject = (value) => {
22
- if (value === null || typeof value !== "object") return false;
23
- const proto = Object.getPrototypeOf(value);
24
- return proto === Object.prototype || proto === null;
25
- };
26
- //#endregion
27
- export { isObject };
@@ -1,33 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@scalar+helpers@0.8.0/node_modules/@scalar/helpers/dist/object/prevent-pollution.js
2
- /**
3
- * Set of dangerous keys that can be used for prototype pollution attacks.
4
- * These keys should never be used as property names in dynamic object operations.
5
- */
6
- const PROTOTYPE_POLLUTION_KEYS = new Set([
7
- "__proto__",
8
- "prototype",
9
- "constructor"
10
- ]);
11
- /**
12
- * Validates that a key is safe to use and does not pose a prototype pollution risk.
13
- * Throws an error if a dangerous key is detected.
14
- *
15
- * @param key - The key to validate
16
- * @param context - Optional context string to help identify where the validation failed
17
- * @throws {Error} If the key matches a known prototype pollution vector
18
- *
19
- * @example
20
- * ```ts
21
- * preventPollution('__proto__') // throws Error
22
- * preventPollution('safeName') // passes
23
- * preventPollution('constructor', 'operation update') // throws Error with context
24
- * ```
25
- */
26
- const preventPollution = (key, context) => {
27
- if (PROTOTYPE_POLLUTION_KEYS.has(key)) {
28
- const errorMessage = context ? `Prototype pollution key detected: "${key}" in ${context}` : `Prototype pollution key detected: "${key}"`;
29
- throw new Error(errorMessage);
30
- }
31
- };
32
- //#endregion
33
- export { preventPollution };
@@ -1,106 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@scalar+helpers@0.8.0/node_modules/@scalar/helpers/dist/queue/queue.js
2
- /**
3
- * Represents a node in a singly linked list structure, used internally by the Queue.
4
- *
5
- * Example:
6
- * const node = new Node<number>(42);
7
- * console.log(node.data); // 42
8
- * console.log(node.next); // null
9
- */
10
- var Node = class {
11
- data;
12
- next;
13
- constructor(data) {
14
- this.data = data;
15
- this.next = null;
16
- }
17
- };
18
- /**
19
- * A generic queue implementation using a singly linked list.
20
- *
21
- * Example usage:
22
- *
23
- * const q = new Queue<number>();
24
- * q.enqueue(1);
25
- * q.enqueue(2);
26
- * q.enqueue(3);
27
- * console.log(q.dequeue()); // 1
28
- * console.log(q.peek()); // 2
29
- * console.log(q.getSize()); // 2
30
- * console.log(q.toString()); // "2 -> 3"
31
- * console.log(q.isEmpty()); // false
32
- */
33
- var Queue = class {
34
- front;
35
- rear;
36
- size;
37
- constructor() {
38
- this.front = null;
39
- this.rear = null;
40
- this.size = 0;
41
- }
42
- /**
43
- * Adds an element to the end of the queue.
44
- * @param data - The data to add to the queue.
45
- */
46
- enqueue(data) {
47
- const newNode = new Node(data);
48
- if (this.isEmpty() || !this.rear) {
49
- this.front = newNode;
50
- this.rear = newNode;
51
- } else {
52
- this.rear.next = newNode;
53
- this.rear = newNode;
54
- }
55
- this.size++;
56
- }
57
- /**
58
- * Removes and returns the front element of the queue.
59
- * @returns The data from the removed node, or null if the queue is empty.
60
- */
61
- dequeue() {
62
- if (this.isEmpty() || !this.front) return null;
63
- const removedNode = this.front;
64
- this.front = this.front.next;
65
- if (this.front === null) this.rear = null;
66
- this.size--;
67
- return removedNode.data;
68
- }
69
- /**
70
- * Returns the front element of the queue without removing it.
71
- * @returns The front data, or null if the queue is empty.
72
- */
73
- peek() {
74
- if (this.isEmpty() || !this.front) return null;
75
- return this.front.data;
76
- }
77
- /**
78
- * Checks whether the queue is empty.
79
- * @returns True if the queue has no elements, false otherwise.
80
- */
81
- isEmpty() {
82
- return this.size === 0;
83
- }
84
- /**
85
- * Returns the number of elements in the queue.
86
- * @returns The size of the queue.
87
- */
88
- getSize() {
89
- return this.size;
90
- }
91
- /**
92
- * Returns a string representation of the queue.
93
- * @returns Elements of the queue separated by ' -> '.
94
- */
95
- toString() {
96
- let current = this.front;
97
- const elements = [];
98
- while (current) {
99
- elements.push(current.data);
100
- current = current.next;
101
- }
102
- return elements.join(" -> ");
103
- }
104
- };
105
- //#endregion
106
- export { Queue };