@scalar/oas-utils 0.4.1 → 0.4.3

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 (106) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/entities/spec/request-examples.d.ts +27 -27
  3. package/dist/entities/spec/request-examples.d.ts.map +1 -1
  4. package/dist/entities/spec/request-examples.js +4 -4
  5. package/dist/entities/spec/request-examples.js.map +2 -2
  6. package/dist/entities/spec/spec-objects.d.ts.map +1 -1
  7. package/dist/entities/spec/spec-objects.js +1 -1
  8. package/dist/entities/spec/spec-objects.js.map +1 -1
  9. package/dist/helpers/index.d.ts +77 -18
  10. package/dist/helpers/index.d.ts.map +1 -1
  11. package/dist/helpers/index.js +69 -21
  12. package/dist/helpers/index.js.map +2 -2
  13. package/dist/helpers/redirect-to-proxy.d.ts +0 -4
  14. package/dist/helpers/redirect-to-proxy.d.ts.map +1 -1
  15. package/dist/helpers/redirect-to-proxy.js +2 -13
  16. package/dist/helpers/redirect-to-proxy.js.map +2 -2
  17. package/dist/helpers/security/get-schemes.d.ts.map +1 -1
  18. package/dist/helpers/security/get-schemes.js +1 -1
  19. package/dist/helpers/security/get-schemes.js.map +2 -2
  20. package/dist/migrations/local-storage.d.ts +1 -1
  21. package/dist/migrations/local-storage.d.ts.map +1 -1
  22. package/dist/migrations/local-storage.js +1 -1
  23. package/dist/migrations/local-storage.js.map +2 -2
  24. package/dist/migrations/v-2.1.0/migration.d.ts.map +1 -1
  25. package/dist/migrations/v-2.1.0/migration.js +2 -1
  26. package/dist/migrations/v-2.1.0/migration.js.map +2 -2
  27. package/dist/spec-getters/get-request-body-from-operation.d.ts.map +1 -1
  28. package/dist/spec-getters/get-request-body-from-operation.js +1 -1
  29. package/dist/spec-getters/get-request-body-from-operation.js.map +2 -2
  30. package/dist/transforms/import-spec.d.ts +1 -1
  31. package/dist/transforms/import-spec.d.ts.map +1 -1
  32. package/dist/transforms/import-spec.js +9 -6
  33. package/dist/transforms/import-spec.js.map +2 -2
  34. package/package.json +8 -7
  35. package/dist/helpers/create-hash.d.ts +0 -7
  36. package/dist/helpers/create-hash.d.ts.map +0 -1
  37. package/dist/helpers/create-hash.js +0 -18
  38. package/dist/helpers/create-hash.js.map +0 -7
  39. package/dist/helpers/ensure-protocol.d.ts +0 -3
  40. package/dist/helpers/ensure-protocol.d.ts.map +0 -1
  41. package/dist/helpers/ensure-protocol.js +0 -11
  42. package/dist/helpers/ensure-protocol.js.map +0 -7
  43. package/dist/helpers/find-variables.d.ts +0 -5
  44. package/dist/helpers/find-variables.d.ts.map +0 -1
  45. package/dist/helpers/find-variables.js +0 -8
  46. package/dist/helpers/find-variables.js.map +0 -7
  47. package/dist/helpers/http-methods.d.ts +0 -29
  48. package/dist/helpers/http-methods.d.ts.map +0 -1
  49. package/dist/helpers/http-methods.js +0 -66
  50. package/dist/helpers/http-methods.js.map +0 -7
  51. package/dist/helpers/http-status-codes.d.ts +0 -8
  52. package/dist/helpers/http-status-codes.d.ts.map +0 -1
  53. package/dist/helpers/http-status-codes.js +0 -321
  54. package/dist/helpers/http-status-codes.js.map +0 -7
  55. package/dist/helpers/is-defined.d.ts +0 -13
  56. package/dist/helpers/is-defined.d.ts.map +0 -1
  57. package/dist/helpers/is-defined.js +0 -5
  58. package/dist/helpers/is-defined.js.map +0 -7
  59. package/dist/helpers/is-local-url.d.ts +0 -5
  60. package/dist/helpers/is-local-url.d.ts.map +0 -1
  61. package/dist/helpers/is-local-url.js +0 -13
  62. package/dist/helpers/is-local-url.js.map +0 -7
  63. package/dist/helpers/is-valid-url.d.ts +0 -12
  64. package/dist/helpers/is-valid-url.d.ts.map +0 -1
  65. package/dist/helpers/is-valid-url.js +0 -11
  66. package/dist/helpers/is-valid-url.js.map +0 -7
  67. package/dist/helpers/iterate-title.d.ts +0 -5
  68. package/dist/helpers/iterate-title.d.ts.map +0 -1
  69. package/dist/helpers/iterate-title.js +0 -12
  70. package/dist/helpers/iterate-title.js.map +0 -7
  71. package/dist/helpers/json2xml.d.ts +0 -5
  72. package/dist/helpers/json2xml.d.ts.map +0 -1
  73. package/dist/helpers/json2xml.js +0 -45
  74. package/dist/helpers/json2xml.js.map +0 -7
  75. package/dist/helpers/local-storage.d.ts +0 -16
  76. package/dist/helpers/local-storage.d.ts.map +0 -1
  77. package/dist/helpers/local-storage.js +0 -15
  78. package/dist/helpers/local-storage.js.map +0 -7
  79. package/dist/helpers/make-url-absolute.d.ts +0 -5
  80. package/dist/helpers/make-url-absolute.d.ts.map +0 -1
  81. package/dist/helpers/make-url-absolute.js +0 -13
  82. package/dist/helpers/make-url-absolute.js.map +0 -7
  83. package/dist/helpers/merge-urls.d.ts +0 -15
  84. package/dist/helpers/merge-urls.d.ts.map +0 -1
  85. package/dist/helpers/merge-urls.js +0 -56
  86. package/dist/helpers/merge-urls.js.map +0 -7
  87. package/dist/helpers/object.d.ts +0 -10
  88. package/dist/helpers/object.d.ts.map +0 -1
  89. package/dist/helpers/object.js +0 -15
  90. package/dist/helpers/object.js.map +0 -7
  91. package/dist/helpers/omit-undefined-values.d.ts +0 -7
  92. package/dist/helpers/omit-undefined-values.d.ts.map +0 -1
  93. package/dist/helpers/omit-undefined-values.js +0 -19
  94. package/dist/helpers/omit-undefined-values.js.map +0 -7
  95. package/dist/helpers/regex-helpers.d.ts +0 -10
  96. package/dist/helpers/regex-helpers.d.ts.map +0 -1
  97. package/dist/helpers/regex-helpers.js +0 -13
  98. package/dist/helpers/regex-helpers.js.map +0 -7
  99. package/dist/helpers/replace-variables.d.ts +0 -5
  100. package/dist/helpers/replace-variables.d.ts.map +0 -1
  101. package/dist/helpers/replace-variables.js +0 -15
  102. package/dist/helpers/replace-variables.js.map +0 -7
  103. package/dist/helpers/string.d.ts +0 -15
  104. package/dist/helpers/string.d.ts.map +0 -1
  105. package/dist/helpers/string.js +0 -7
  106. package/dist/helpers/string.js.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,KAAK,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACpG,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC5G,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,KAAK,6BAA6B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC5G,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3D;;;GAGG;AACH,OAAO;AACL,yFAAyF;AACzF,UAAU,GACX,MAAM,oCAAoC,CAAA;AAC3C,OAAO;AACL,sFAAsF;AACtF,SAAS,GACV,MAAM,kCAAkC,CAAA;AACzC,OAAO;AACL,4FAA4F;AAC5F,YAAY,GACb,MAAM,qCAAqC,CAAA;AAC5C,OAAO;AACL,4FAA4F;AAC5F,iBAAiB,GAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO;AACL,kFAAkF;AAClF,QAAQ,GACT,MAAM,+BAA+B,CAAA;AACtC,OAAO;AACL,wFAAwF;AACxF,UAAU,GACX,MAAM,mCAAmC,CAAA;AAC1C,OAAO;AACL,mGAAmG;AACnG,iBAAiB,GAClB,MAAM,uCAAuC,CAAA;AAC9C,OAAO;AACL,qFAAqF;AACrF,KAAK,GACN,MAAM,qCAAqC,CAAA;AAC5C,OAAO;AACL,uFAAuF;AACvF,UAAU,GACX,MAAM,kCAAkC,CAAA;AACzC,OAAO;AACL,+FAA+F;AAC/F,cAAc,GACf,MAAM,sCAAsC,CAAA;AAC7C,OAAO;AACL,8FAA8F;AAC9F,cAAc,GACf,MAAM,qCAAqC,CAAA;AAC5C,OAAO;AACL,8FAA8F;AAC9F,aAAa,GACd,MAAM,sCAAsC,CAAA;AAC7C,OAAO;AACL,uGAAuG;AACvG,iBAAiB,GAClB,MAAM,2CAA2C,CAAA;AAClD,OAAO;AACL,4FAA4F;AAC5F,iBAAiB,GAClB,MAAM,gCAAgC,CAAA;AACvC,OAAO;AACL,6FAA6F;AAC7F,eAAe,GAChB,MAAM,gCAAgC,CAAA;AACvC,OAAO;AACL,iGAAiG;AACjG,KAAK,cAAc;AACnB,kGAAkG;AAClG,KAAK,eAAe;AACpB,kGAAkG;AAClG,eAAe,GAChB,MAAM,wCAAwC,CAAA;AAC/C,OAAO;AACL,uFAAuF;AACvF,UAAU,GACX,MAAM,kCAAkC,CAAA;AACzC,OAAO;AACL,6FAA6F;AAC7F,YAAY,GACb,MAAM,sCAAsC,CAAA;AAC7C,OAAO;AACL,iGAAiG;AACjG,eAAe,GAChB,MAAM,uCAAuC,CAAA;AAC9C,OAAO;AACL,4FAA4F;AAC5F,iBAAiB;AACjB,oFAAoF;AACpF,SAAS,GACV,MAAM,gCAAgC,CAAA;AACvC,OAAO;AACL,yFAAyF;AACzF,UAAU,IAAI,aAAa,GAC5B,MAAM,oCAAoC,CAAA;AAC3C,OAAO;AACL,oGAAoG;AACpG,gBAAgB,GACjB,MAAM,yCAAyC,CAAA"}
@@ -1,32 +1,81 @@
1
- import { createHash } from "./create-hash.js";
2
- import { ensureProtocol } from "./ensure-protocol.js";
3
1
  import { fetchDocument } from "./fetch-document.js";
4
2
  import { fetchWithProxyFallback } from "./fetch-with-proxy-fallback.js";
5
- import { findVariables } from "./find-variables.js";
6
- import { canMethodHaveBody, getHttpMethodInfo, isHttpMethod, REQUEST_METHODS } from "./http-methods.js";
7
- import { httpStatusCodes } from "./http-status-codes.js";
8
- import { isDefined } from "./is-defined.js";
9
- import { isLocalUrl } from "./is-local-url.js";
10
- import { isValidUrl } from "./is-valid-url.js";
11
- import { iterateTitle } from "./iterate-title.js";
12
- import { json2xml } from "./json2xml.js";
13
- import { LS_KEYS } from "./local-storage.js";
14
- import { makeUrlAbsolute } from "./make-url-absolute.js";
15
- import { combineUrlAndPath, mergeSearchParams, mergeUrls } from "./merge-urls.js";
16
3
  import { normalizeMimeType } from "./normalize-mime-type.js";
17
4
  import { normalizeMimeTypeObject } from "./normalize-mime-type-object.js";
18
- import { objectMerge, getObjectKeys } from "./object.js";
19
5
  import { formatJsonOrYamlString, isJsonString, json, parseJsonOrYaml, transformToJson, yaml } from "./parse.js";
20
6
  import { prettyPrintJson, replaceCircularDependencies } from "./pretty-print-json.js";
21
- import { redirectToProxy, isRelativePath, shouldUseProxy } from "./redirect-to-proxy.js";
22
- import { REGEX } from "./regex-helpers.js";
23
- import { replaceVariables } from "./replace-variables.js";
7
+ import { shouldUseProxy, redirectToProxy } from "./redirect-to-proxy.js";
24
8
  import { schemaModel } from "./schema-model.js";
25
9
  import { shouldIgnoreEntity } from "./should-ignore-entity.js";
26
10
  import { defaultStateFactory, ssrState } from "./ssr-state.js";
27
- import { camelToTitleWords, capitalize } from "./string.js";
11
+ import {
12
+ createHash
13
+ } from "@scalar/helpers/string/create-hash";
14
+ import {
15
+ isDefined
16
+ } from "@scalar/helpers/array/is-defined";
17
+ import {
18
+ isHttpMethod
19
+ } from "@scalar/helpers/http/is-http-method";
20
+ import {
21
+ combineUrlAndPath
22
+ } from "@scalar/helpers/url/merge-urls";
23
+ import {
24
+ json2xml
25
+ } from "@scalar/helpers/file/json2xml";
26
+ import {
27
+ capitalize
28
+ } from "@scalar/helpers/string/capitalize";
29
+ import {
30
+ camelToTitleWords
31
+ } from "@scalar/helpers/string/camel-to-title";
32
+ import {
33
+ REGEX
34
+ } from "@scalar/helpers/regex/regex-helpers";
35
+ import {
36
+ isLocalUrl
37
+ } from "@scalar/helpers/url/is-local-url";
38
+ import {
39
+ isRelativePath
40
+ } from "@scalar/helpers/url/is-relative-path";
41
+ import {
42
+ ensureProtocol
43
+ } from "@scalar/helpers/url/ensure-protocol";
44
+ import {
45
+ findVariables
46
+ } from "@scalar/helpers/regex/find-variables";
47
+ import {
48
+ canMethodHaveBody
49
+ } from "@scalar/helpers/http/can-method-have-body";
50
+ import {
51
+ getHttpMethodInfo
52
+ } from "@scalar/helpers/http/http-info";
53
+ import {
54
+ REQUEST_METHODS
55
+ } from "@scalar/helpers/http/http-info";
56
+ import {
57
+ httpStatusCodes
58
+ } from "@scalar/helpers/http/http-status-codes";
59
+ import {
60
+ isValidUrl
61
+ } from "@scalar/helpers/url/is-valid-url";
62
+ import {
63
+ iterateTitle
64
+ } from "@scalar/helpers/string/iterate-title";
65
+ import {
66
+ makeUrlAbsolute
67
+ } from "@scalar/helpers/url/make-url-absolute";
68
+ import {
69
+ mergeSearchParams,
70
+ mergeUrls
71
+ } from "@scalar/helpers/url/merge-urls";
72
+ import {
73
+ objectKeys
74
+ } from "@scalar/helpers/object/object-keys";
75
+ import {
76
+ replaceVariables
77
+ } from "@scalar/helpers/regex/replace-variables";
28
78
  export {
29
- LS_KEYS,
30
79
  REGEX,
31
80
  REQUEST_METHODS,
32
81
  camelToTitleWords,
@@ -41,7 +90,7 @@ export {
41
90
  findVariables,
42
91
  formatJsonOrYamlString,
43
92
  getHttpMethodInfo,
44
- getObjectKeys,
93
+ objectKeys as getObjectKeys,
45
94
  httpStatusCodes,
46
95
  isDefined,
47
96
  isHttpMethod,
@@ -57,7 +106,6 @@ export {
57
106
  mergeUrls,
58
107
  normalizeMimeType,
59
108
  normalizeMimeTypeObject,
60
- objectMerge,
61
109
  parseJsonOrYaml,
62
110
  prettyPrintJson,
63
111
  redirectToProxy,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/index.ts"],
4
- "sourcesContent": ["export { createHash } from './create-hash'\nexport { ensureProtocol } from './ensure-protocol'\nexport { fetchDocument } from './fetch-document'\nexport { type FetchWithProxyFallbackOptions, fetchWithProxyFallback } from './fetch-with-proxy-fallback'\nexport { findVariables } from './find-variables'\nexport { canMethodHaveBody, getHttpMethodInfo, isHttpMethod, REQUEST_METHODS } from './http-methods'\nexport { type HttpStatusCode, type HttpStatusCodes, httpStatusCodes } from './http-status-codes'\nexport { isDefined } from './is-defined'\nexport { isLocalUrl } from './is-local-url'\nexport { isValidUrl } from './is-valid-url'\nexport { iterateTitle } from './iterate-title'\nexport { json2xml } from './json2xml'\nexport { LS_KEYS } from './local-storage'\nexport { makeUrlAbsolute } from './make-url-absolute'\nexport { combineUrlAndPath, mergeSearchParams, mergeUrls } from './merge-urls'\nexport { normalizeMimeType } from './normalize-mime-type'\nexport { normalizeMimeTypeObject } from './normalize-mime-type-object'\nexport { objectMerge, getObjectKeys } from './object'\nexport { formatJsonOrYamlString, isJsonString, json, parseJsonOrYaml, transformToJson, yaml } from './parse'\nexport { prettyPrintJson, replaceCircularDependencies } from './pretty-print-json'\nexport { redirectToProxy, isRelativePath, shouldUseProxy } from './redirect-to-proxy'\nexport { REGEX } from './regex-helpers'\nexport { replaceVariables } from './replace-variables'\nexport { schemaModel } from './schema-model'\nexport { shouldIgnoreEntity } from './should-ignore-entity'\nexport { defaultStateFactory, ssrState } from './ssr-state'\nexport { camelToTitleWords, capitalize } from './string'\n"],
5
- "mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAA6C,8BAA8B;AAC3E,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB,mBAAmB,cAAc,uBAAuB;AACpF,SAAoD,uBAAuB;AAC3E,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB,mBAAmB,iBAAiB;AAChE,SAAS,yBAAyB;AAClC,SAAS,+BAA+B;AACxC,SAAS,aAAa,qBAAqB;AAC3C,SAAS,wBAAwB,cAAc,MAAM,iBAAiB,iBAAiB,YAAY;AACnG,SAAS,iBAAiB,mCAAmC;AAC7D,SAAS,iBAAiB,gBAAgB,sBAAsB;AAChE,SAAS,aAAa;AACtB,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,gBAAgB;AAC9C,SAAS,mBAAmB,kBAAkB;",
4
+ "sourcesContent": ["export { fetchDocument } from './fetch-document'\nexport { type FetchWithProxyFallbackOptions, fetchWithProxyFallback } from './fetch-with-proxy-fallback'\nexport { normalizeMimeType } from './normalize-mime-type'\nexport { normalizeMimeTypeObject } from './normalize-mime-type-object'\nexport { formatJsonOrYamlString, isJsonString, json, parseJsonOrYaml, transformToJson, yaml } from './parse'\nexport { prettyPrintJson, replaceCircularDependencies } from './pretty-print-json'\nexport { shouldUseProxy, redirectToProxy } from './redirect-to-proxy'\nexport { schemaModel } from './schema-model'\nexport { shouldIgnoreEntity } from './should-ignore-entity'\nexport { defaultStateFactory, ssrState } from './ssr-state'\n\n/**\n * @deprecated These helpers are being phased out. Please import directly from @scalar/helpers instead.\n * For example: import { createHash } from '\\@scalar/helpers/string/create-hash'\n */\nexport {\n /** @deprecated Please use createHash from \\@scalar/helpers/string/create-hash instead */\n createHash,\n} from '@scalar/helpers/string/create-hash'\nexport {\n /** @deprecated Please use isDefined from \\@scalar/helpers/array/is-defined instead */\n isDefined,\n} from '@scalar/helpers/array/is-defined'\nexport {\n /** @deprecated Please use isHttpMethod from \\@scalar/helpers/http/is-http-method instead */\n isHttpMethod,\n} from '@scalar/helpers/http/is-http-method'\nexport {\n /** @deprecated Please use combineUrlAndPath from \\@scalar/helpers/url/merge-urls instead */\n combineUrlAndPath,\n} from '@scalar/helpers/url/merge-urls'\nexport {\n /** @deprecated Please use json2xml from \\@scalar/helpers/file/json2xml instead */\n json2xml,\n} from '@scalar/helpers/file/json2xml'\nexport {\n /** @deprecated Please use capitalize from \\@scalar/helpers/string/capitalize instead */\n capitalize,\n} from '@scalar/helpers/string/capitalize'\nexport {\n /** @deprecated Please use camelToTitleWords from \\@scalar/helpers/string/camel-to-title instead */\n camelToTitleWords,\n} from '@scalar/helpers/string/camel-to-title'\nexport {\n /** @deprecated Please use REGEX from \\@scalar/helpers/regex/regex-helpers instead */\n REGEX,\n} from '@scalar/helpers/regex/regex-helpers'\nexport {\n /** @deprecated Please use isLocalUrl from \\@scalar/helpers/url/is-local-url instead */\n isLocalUrl,\n} from '@scalar/helpers/url/is-local-url'\nexport {\n /** @deprecated Please use isRelativePath from \\@scalar/helpers/url/is-relative-path instead */\n isRelativePath,\n} from '@scalar/helpers/url/is-relative-path'\nexport {\n /** @deprecated Please use ensureProtocol from \\@scalar/helpers/url/ensure-protocol instead */\n ensureProtocol,\n} from '@scalar/helpers/url/ensure-protocol'\nexport {\n /** @deprecated Please use findVariables from \\@scalar/helpers/regex/find-variables instead */\n findVariables,\n} from '@scalar/helpers/regex/find-variables'\nexport {\n /** @deprecated Please use canMethodHaveBody from \\@scalar/helpers/http/can-method-have-body instead */\n canMethodHaveBody,\n} from '@scalar/helpers/http/can-method-have-body'\nexport {\n /** @deprecated Please use getHttpMethodInfo from \\@scalar/helpers/http/http-info instead */\n getHttpMethodInfo,\n} from '@scalar/helpers/http/http-info'\nexport {\n /** @deprecated Please use REQUEST_METHODS from \\@scalar/helpers/http/http-methods instead */\n REQUEST_METHODS,\n} from '@scalar/helpers/http/http-info'\nexport {\n /** @deprecated Please use HttpStatusCode from \\@scalar/helpers/http/http-status-codes instead */\n type HttpStatusCode,\n /** @deprecated Please use HttpStatusCodes from \\@scalar/helpers/http/http-status-codes instead */\n type HttpStatusCodes,\n /** @deprecated Please use httpStatusCodes from \\@scalar/helpers/http/http-status-codes instead */\n httpStatusCodes,\n} from '@scalar/helpers/http/http-status-codes'\nexport {\n /** @deprecated Please use isValidUrl from \\@scalar/helpers/url/is-valid-url instead */\n isValidUrl,\n} from '@scalar/helpers/url/is-valid-url'\nexport {\n /** @deprecated Please use iterateTitle from \\@scalar/helpers/string/iterate-title instead */\n iterateTitle,\n} from '@scalar/helpers/string/iterate-title'\nexport {\n /** @deprecated Please use makeUrlAbsolute from \\@scalar/helpers/url/make-url-absolute instead */\n makeUrlAbsolute,\n} from '@scalar/helpers/url/make-url-absolute'\nexport {\n /** @deprecated Please use mergeSearchParams from \\@scalar/helpers/url/merge-urls instead */\n mergeSearchParams,\n /** @deprecated Please use mergeUrls from \\@scalar/helpers/url/merge-urls instead */\n mergeUrls,\n} from '@scalar/helpers/url/merge-urls'\nexport {\n /** @deprecated Please use objectKeys from \\@scalar/helpers/object/object-keys instead */\n objectKeys as getObjectKeys,\n} from '@scalar/helpers/object/object-keys'\nexport {\n /** @deprecated Please use replaceVariables from \\@scalar/helpers/regex/replace-variables instead */\n replaceVariables,\n} from '@scalar/helpers/regex/replace-variables'\n"],
5
+ "mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAA6C,8BAA8B;AAC3E,SAAS,yBAAyB;AAClC,SAAS,+BAA+B;AACxC,SAAS,wBAAwB,cAAc,MAAM,iBAAiB,iBAAiB,YAAY;AACnG,SAAS,iBAAiB,mCAAmC;AAC7D,SAAS,gBAAgB,uBAAuB;AAChD,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AACnC,SAAS,qBAAqB,gBAAgB;AAM9C;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAME;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EAEA;AAAA,OACK;AACP;AAAA,EAEgB;AAAA,OACT;AACP;AAAA,EAEE;AAAA,OACK;",
6
6
  "names": []
7
7
  }
@@ -6,10 +6,6 @@
6
6
  * - URLs that don’t look like a domain
7
7
  **/
8
8
  export declare function redirectToProxy(proxyUrl?: string, url?: string): string;
9
- /**
10
- * Check if the URL is relative or if it's a domain without protocol
11
- **/
12
- export declare const isRelativePath: (url: string) => boolean;
13
9
  /**
14
10
  * Returns false for requests to localhost, relative URLs, if no proxy is defined …
15
11
  **/
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-to-proxy.d.ts","sourceRoot":"","sources":["../../src/helpers/redirect-to-proxy.ts"],"names":[],"mappings":"AAGA;;;;;;IAMI;AACJ,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAmCvE;AAED;;IAEI;AACJ,eAAO,MAAM,cAAc,QAAS,MAAM,YAazC,CAAA;AAED;;IAEI;AACJ,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI,MAAM,CAkC7E"}
1
+ {"version":3,"file":"redirect-to-proxy.d.ts","sourceRoot":"","sources":["../../src/helpers/redirect-to-proxy.ts"],"names":[],"mappings":"AAGA;;;;;;IAMI;AACJ,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAkCvE;AAED;;IAEI;AACJ,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI,MAAM,CAkC7E"}
@@ -1,9 +1,8 @@
1
- import { isLocalUrl } from "./is-local-url.js";
2
- import { REGEX } from "./regex-helpers.js";
1
+ import { isLocalUrl } from "@scalar/helpers/url/is-local-url";
2
+ import { isRelativePath } from "@scalar/helpers/url/is-relative-path";
3
3
  function redirectToProxy(proxyUrl, url) {
4
4
  try {
5
5
  if (!shouldUseProxy(proxyUrl, url)) {
6
- console.log("should not use proxy", proxyUrl, url);
7
6
  return url ?? "";
8
7
  }
9
8
  const newUrl = new URL(url);
@@ -16,15 +15,6 @@ function redirectToProxy(proxyUrl, url) {
16
15
  return url ?? "";
17
16
  }
18
17
  }
19
- const isRelativePath = (url) => {
20
- if (REGEX.PROTOCOL.test(url)) {
21
- return false;
22
- }
23
- if (/^[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+(\/|$)/.test(url)) {
24
- return false;
25
- }
26
- return true;
27
- };
28
18
  function shouldUseProxy(proxyUrl, url) {
29
19
  try {
30
20
  if (!proxyUrl || !url) {
@@ -48,7 +38,6 @@ function shouldUseProxy(proxyUrl, url) {
48
38
  }
49
39
  }
50
40
  export {
51
- isRelativePath,
52
41
  redirectToProxy,
53
42
  shouldUseProxy
54
43
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/redirect-to-proxy.ts"],
4
- "sourcesContent": ["import { isLocalUrl } from './is-local-url'\nimport { REGEX } from './regex-helpers'\n\n/**\n * Redirects the request to a proxy server with a given URL. But not for:\n *\n * - Relative URLs\n * - URLs that seem to point to a local IP (except the proxy is on the same domain)\n * - URLs that don\u2019t look like a domain\n **/\nexport function redirectToProxy(proxyUrl?: string, url?: string): string {\n try {\n if (!shouldUseProxy(proxyUrl, url)) {\n console.log('should not use proxy', proxyUrl, url)\n return url ?? ''\n }\n\n // Create new URL object from url\n const newUrl = new URL(url)\n\n // Add temporary domain for relative proxy URLs\n //\n // Q: Why isn\u2019t proxyUrl type guarded?\n // A: Type guarding works for one parameter only (as of now).\n //\n // Q: Why do we need to add http://localhost to relative proxy URLs?\n // A: Because the `new URL()` would otherwise fail.\n //\n const temporaryProxyUrl = isRelativePath(proxyUrl as string) ? `http://localhost${proxyUrl}` : (proxyUrl as string)\n\n // Rewrite the URL with the proxy\n newUrl.href = temporaryProxyUrl\n\n // Add the original URL as a query parameter\n newUrl.searchParams.append('scalar_url', url)\n\n // Remove the temporary domain if we added it, but only from the start of the URL\n const result = isRelativePath(proxyUrl as string)\n ? newUrl.toString().replace(/^http:\\/\\/localhost/, '')\n : newUrl.toString()\n\n return result\n } catch {\n return url ?? ''\n }\n}\n\n/**\n * Check if the URL is relative or if it's a domain without protocol\n **/\nexport const isRelativePath = (url: string) => {\n // Allow http:// https:// and other protocols such as file://\n if (REGEX.PROTOCOL.test(url)) {\n return false\n }\n\n // Check if it looks like a domain (contains dots and no spaces)\n // This catches cases like \"galaxy.scalar.com/planets\"\n if (/^[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+(\\/|$)/.test(url)) {\n return false\n }\n\n return true\n}\n\n/**\n * Returns false for requests to localhost, relative URLs, if no proxy is defined \u2026\n **/\nexport function shouldUseProxy(proxyUrl?: string, url?: string): url is string {\n try {\n // \u274C We don\u2019t have a proxy URL or the URL\n if (!proxyUrl || !url) {\n return false\n }\n\n // \u274C Request to relative URLs (won\u2019t be blocked by CORS anyway)\n if (isRelativePath(url)) {\n return false\n }\n\n // \u2705 Proxy URL is on the same domain (e.g. /proxy)\n // It\u2019s more likely (not guaranteed, though) that the proxy has access to local domains.\n if (isRelativePath(proxyUrl)) {\n return true\n }\n\n // \u2705 Proxy URL is local\n if (isLocalUrl(proxyUrl)) {\n return true\n }\n\n // \u274C Requests to localhost\n // We won\u2019t reach them from a (likely remote) proxy.\n if (isLocalUrl(url)) {\n return false\n }\n\n // \u2705 Seems fine (e.g. remote proxy + remote URL)\n return true\n } catch {\n return false\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,aAAa;AASf,SAAS,gBAAgB,UAAmB,KAAsB;AACvE,MAAI;AACF,QAAI,CAAC,eAAe,UAAU,GAAG,GAAG;AAClC,cAAQ,IAAI,wBAAwB,UAAU,GAAG;AACjD,aAAO,OAAO;AAAA,IAChB;AAGA,UAAM,SAAS,IAAI,IAAI,GAAG;AAU1B,UAAM,oBAAoB,eAAe,QAAkB,IAAI,mBAAmB,QAAQ,KAAM;AAGhG,WAAO,OAAO;AAGd,WAAO,aAAa,OAAO,cAAc,GAAG;AAG5C,UAAM,SAAS,eAAe,QAAkB,IAC5C,OAAO,SAAS,EAAE,QAAQ,uBAAuB,EAAE,IACnD,OAAO,SAAS;AAEpB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,OAAO;AAAA,EAChB;AACF;AAKO,MAAM,iBAAiB,CAAC,QAAgB;AAE7C,MAAI,MAAM,SAAS,KAAK,GAAG,GAAG;AAC5B,WAAO;AAAA,EACT;AAIA,MAAI,uCAAuC,KAAK,GAAG,GAAG;AACpD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAKO,SAAS,eAAe,UAAmB,KAA6B;AAC7E,MAAI;AAEF,QAAI,CAAC,YAAY,CAAC,KAAK;AACrB,aAAO;AAAA,IACT;AAGA,QAAI,eAAe,GAAG,GAAG;AACvB,aAAO;AAAA,IACT;AAIA,QAAI,eAAe,QAAQ,GAAG;AAC5B,aAAO;AAAA,IACT;AAGA,QAAI,WAAW,QAAQ,GAAG;AACxB,aAAO;AAAA,IACT;AAIA,QAAI,WAAW,GAAG,GAAG;AACnB,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import { isLocalUrl } from '@scalar/helpers/url/is-local-url'\nimport { isRelativePath } from '@scalar/helpers/url/is-relative-path'\n\n/**\n * Redirects the request to a proxy server with a given URL. But not for:\n *\n * - Relative URLs\n * - URLs that seem to point to a local IP (except the proxy is on the same domain)\n * - URLs that don\u2019t look like a domain\n **/\nexport function redirectToProxy(proxyUrl?: string, url?: string): string {\n try {\n if (!shouldUseProxy(proxyUrl, url)) {\n return url ?? ''\n }\n\n // Create new URL object from url\n const newUrl = new URL(url)\n\n // Add temporary domain for relative proxy URLs\n //\n // Q: Why isn\u2019t proxyUrl type guarded?\n // A: Type guarding works for one parameter only (as of now).\n //\n // Q: Why do we need to add http://localhost to relative proxy URLs?\n // A: Because the `new URL()` would otherwise fail.\n //\n const temporaryProxyUrl = isRelativePath(proxyUrl as string) ? `http://localhost${proxyUrl}` : (proxyUrl as string)\n\n // Rewrite the URL with the proxy\n newUrl.href = temporaryProxyUrl\n\n // Add the original URL as a query parameter\n newUrl.searchParams.append('scalar_url', url)\n\n // Remove the temporary domain if we added it, but only from the start of the URL\n const result = isRelativePath(proxyUrl as string)\n ? newUrl.toString().replace(/^http:\\/\\/localhost/, '')\n : newUrl.toString()\n\n return result\n } catch {\n return url ?? ''\n }\n}\n\n/**\n * Returns false for requests to localhost, relative URLs, if no proxy is defined \u2026\n **/\nexport function shouldUseProxy(proxyUrl?: string, url?: string): url is string {\n try {\n // \u274C We don\u2019t have a proxy URL or the URL\n if (!proxyUrl || !url) {\n return false\n }\n\n // \u274C Request to relative URLs (won\u2019t be blocked by CORS anyway)\n if (isRelativePath(url)) {\n return false\n }\n\n // \u2705 Proxy URL is on the same domain (e.g. /proxy)\n // It\u2019s more likely (not guaranteed, though) that the proxy has access to local domains.\n if (isRelativePath(proxyUrl)) {\n return true\n }\n\n // \u2705 Proxy URL is local\n if (isLocalUrl(proxyUrl)) {\n return true\n }\n\n // \u274C Requests to localhost\n // We won\u2019t reach them from a (likely remote) proxy.\n if (isLocalUrl(url)) {\n return false\n }\n\n // \u2705 Seems fine (e.g. remote proxy + remote URL)\n return true\n } catch {\n return false\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AASxB,SAAS,gBAAgB,UAAmB,KAAsB;AACvE,MAAI;AACF,QAAI,CAAC,eAAe,UAAU,GAAG,GAAG;AAClC,aAAO,OAAO;AAAA,IAChB;AAGA,UAAM,SAAS,IAAI,IAAI,GAAG;AAU1B,UAAM,oBAAoB,eAAe,QAAkB,IAAI,mBAAmB,QAAQ,KAAM;AAGhG,WAAO,OAAO;AAGd,WAAO,aAAa,OAAO,cAAc,GAAG;AAG5C,UAAM,SAAS,eAAe,QAAkB,IAC5C,OAAO,SAAS,EAAE,QAAQ,uBAAuB,EAAE,IACnD,OAAO,SAAS;AAEpB,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,OAAO;AAAA,EAChB;AACF;AAKO,SAAS,eAAe,UAAmB,KAA6B;AAC7E,MAAI;AAEF,QAAI,CAAC,YAAY,CAAC,KAAK;AACrB,aAAO;AAAA,IACT;AAGA,QAAI,eAAe,GAAG,GAAG;AACvB,aAAO;AAAA,IACT;AAIA,QAAI,eAAe,QAAQ,GAAG;AAC5B,aAAO;AAAA,IACT;AAGA,QAAI,WAAW,QAAQ,GAAG;AACxB,aAAO;AAAA,IACT;AAIA,QAAI,WAAW,GAAG,GAAG;AACnB,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-schemes.d.ts","sourceRoot":"","sources":["../../../src/helpers/security/get-schemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAG1D,2IAA2I;AAC3I,eAAO,MAAM,UAAU,4BACI,SAAS,CAAC,4BAA4B,CAAC,mBAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAO2tnE,CAAC;;;;;;;;;;;qCAA0X,CAAC;;gBAA6E,CAAC;;;;;;;;;qCAAiV,CAAC;;yBAAsF,CAAC;;;;;;;;;qCAAuU,CAAC;;yBAAsF,CAAC;;;;;;;;;;;;qCAA+c,CAAC;;;;;IAD5/qE,CAAA"}
1
+ {"version":3,"file":"get-schemes.d.ts","sourceRoot":"","sources":["../../../src/helpers/security/get-schemes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAE1D,2IAA2I;AAC3I,eAAO,MAAM,UAAU,4BACI,SAAS,CAAC,4BAA4B,CAAC,mBAC/C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAO+snE,CAAC;;;;;;;;;;;qCAA0X,CAAC;;gBAA6E,CAAC;;;;;;;;;qCAAiV,CAAC;;yBAAsF,CAAC;;;;;;;;;qCAAuU,CAAC;;yBAAsF,CAAC;;;;;;;;;;;;qCAA+c,CAAC;;;;;IADh/qE,CAAA"}
@@ -1,4 +1,4 @@
1
- import { isDefined } from "../../helpers/is-defined.js";
1
+ import { isDefined } from "@scalar/helpers/array/is-defined";
2
2
  const getSchemes = (selectedSecuritySchemes, securitySchemes) => {
3
3
  const uids = new Set(selectedSecuritySchemes.flat());
4
4
  return Array.from(uids).map((uid) => securitySchemes[uid]).filter(isDefined);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/security/get-schemes.ts"],
4
- "sourcesContent": ["import type { SecurityScheme } from '@scalar/types/entities'\n\nimport type { Operation } from '@/entities/spec/operation'\nimport { isDefined } from '@/helpers/is-defined'\n\n/** Parses a list of selected security scheme uids which may be an array or single uid and returns a flattened array of security schemes */\nexport const getSchemes = (\n selectedSecuritySchemes: Operation['selectedSecuritySchemeUids'],\n securitySchemes: Record<SecurityScheme['uid'], SecurityScheme>,\n) => {\n const uids = new Set(selectedSecuritySchemes.flat())\n return Array.from(uids)\n .map((uid) => securitySchemes[uid])\n .filter(isDefined)\n}\n"],
5
- "mappings": "AAGA,SAAS,iBAAiB;AAGnB,MAAM,aAAa,CACxB,yBACA,oBACG;AACH,QAAM,OAAO,IAAI,IAAI,wBAAwB,KAAK,CAAC;AACnD,SAAO,MAAM,KAAK,IAAI,EACnB,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC,EACjC,OAAO,SAAS;AACrB;",
4
+ "sourcesContent": ["import type { SecurityScheme } from '@scalar/types/entities'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\n\nimport type { Operation } from '@/entities/spec/operation'\n\n/** Parses a list of selected security scheme uids which may be an array or single uid and returns a flattened array of security schemes */\nexport const getSchemes = (\n selectedSecuritySchemes: Operation['selectedSecuritySchemeUids'],\n securitySchemes: Record<SecurityScheme['uid'], SecurityScheme>,\n) => {\n const uids = new Set(selectedSecuritySchemes.flat())\n return Array.from(uids)\n .map((uid) => securitySchemes[uid])\n .filter(isDefined)\n}\n"],
5
+ "mappings": "AACA,SAAS,iBAAiB;AAKnB,MAAM,aAAa,CACxB,yBACA,oBACG;AACH,QAAM,OAAO,IAAI,IAAI,wBAAwB,KAAK,CAAC;AACnD,SAAO,MAAM,KAAK,IAAI,EACnB,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC,EACjC,OAAO,SAAS;AACrB;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import type { LS_KEYS } from '../helpers/local-storage.js';
1
+ import type { LS_KEYS } from '@scalar/helpers/object/local-storage';
2
2
  /**
3
3
  * Supports pre-flatted local storage
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../src/migrations/local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAKtD;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAAW,CAAC,OAAO,OAAO,EAAE,MAAM,OAAO,OAAO,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAKvG,CAAA;AAED,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,QAAO,MAyBzC,CAAA"}
1
+ {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../src/migrations/local-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAMnE;;GAEG;AACH,eAAO,MAAM,iBAAiB,UAAW,CAAC,OAAO,OAAO,EAAE,MAAM,OAAO,OAAO,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAKvG,CAAA;AAED,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,QAAO,MAyBzC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { DATA_VERSION_LS_LEY } from "../migrations/data-version.js";
2
1
  import { parse } from "flatted";
2
+ import { DATA_VERSION_LS_LEY } from "../migrations/data-version.js";
3
3
  const parseLocalStorage = (lsKey) => {
4
4
  const item = localStorage.getItem(lsKey) || "[{}]";
5
5
  const data = item[0] === "[" ? parse(item) : JSON.parse(item);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/migrations/local-storage.ts"],
4
- "sourcesContent": ["import type { LS_KEYS } from '@/helpers/local-storage'\nimport { DATA_VERSION_LS_LEY } from '@/migrations/data-version'\nimport type { v_2_1_0 } from '@/migrations/v-2.1.0/types.generated'\nimport { parse } from 'flatted'\n\n/**\n * Supports pre-flatted local storage\n */\nexport const parseLocalStorage = (lsKey: (typeof LS_KEYS)[keyof typeof LS_KEYS]): Record<string, unknown> => {\n const item = localStorage.getItem(lsKey) || '[{}]'\n const data = item[0] === '[' ? parse(item) : JSON.parse(item)\n\n return data\n}\n\n/** Take a best guess of the localStorage version */\nexport const getLocalStorageVersion = (): string => {\n const collectionStr = localStorage.getItem('collection')\n const dataVersion = localStorage.getItem(DATA_VERSION_LS_LEY)\n if (dataVersion) {\n return dataVersion\n }\n\n // No flatted means first version\n if (!collectionStr?.length || collectionStr?.[0] === '{') {\n return '0.0.0'\n }\n\n // Flatted + types means > 2.1.0 but we should have a data version\n try {\n const [collection] = Object.values(parse(collectionStr) ?? {}) as v_2_1_0.Collection[]\n if (collection?.type === 'collection') {\n return '2.1.0'\n }\n\n return '0.0.0'\n } catch (e) {\n console.error(e)\n\n return '0.0.0'\n }\n}\n"],
5
- "mappings": "AACA,SAAS,2BAA2B;AAEpC,SAAS,aAAa;AAKf,MAAM,oBAAoB,CAAC,UAA2E;AAC3G,QAAM,OAAO,aAAa,QAAQ,KAAK,KAAK;AAC5C,QAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI;AAE5D,SAAO;AACT;AAGO,MAAM,yBAAyB,MAAc;AAClD,QAAM,gBAAgB,aAAa,QAAQ,YAAY;AACvD,QAAM,cAAc,aAAa,QAAQ,mBAAmB;AAC5D,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,eAAe,UAAU,gBAAgB,CAAC,MAAM,KAAK;AACxD,WAAO;AAAA,EACT;AAGA,MAAI;AACF,UAAM,CAAC,UAAU,IAAI,OAAO,OAAO,MAAM,aAAa,KAAK,CAAC,CAAC;AAC7D,QAAI,YAAY,SAAS,cAAc;AACrC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,YAAQ,MAAM,CAAC;AAEf,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import type { LS_KEYS } from '@scalar/helpers/object/local-storage'\nimport { parse } from 'flatted'\n\nimport { DATA_VERSION_LS_LEY } from '@/migrations/data-version'\nimport type { v_2_1_0 } from '@/migrations/v-2.1.0/types.generated'\n\n/**\n * Supports pre-flatted local storage\n */\nexport const parseLocalStorage = (lsKey: (typeof LS_KEYS)[keyof typeof LS_KEYS]): Record<string, unknown> => {\n const item = localStorage.getItem(lsKey) || '[{}]'\n const data = item[0] === '[' ? parse(item) : JSON.parse(item)\n\n return data\n}\n\n/** Take a best guess of the localStorage version */\nexport const getLocalStorageVersion = (): string => {\n const collectionStr = localStorage.getItem('collection')\n const dataVersion = localStorage.getItem(DATA_VERSION_LS_LEY)\n if (dataVersion) {\n return dataVersion\n }\n\n // No flatted means first version\n if (!collectionStr?.length || collectionStr?.[0] === '{') {\n return '0.0.0'\n }\n\n // Flatted + types means > 2.1.0 but we should have a data version\n try {\n const [collection] = Object.values(parse(collectionStr) ?? {}) as v_2_1_0.Collection[]\n if (collection?.type === 'collection') {\n return '2.1.0'\n }\n\n return '0.0.0'\n } catch (e) {\n console.error(e)\n\n return '0.0.0'\n }\n}\n"],
5
+ "mappings": "AACA,SAAS,aAAa;AAEtB,SAAS,2BAA2B;AAM7B,MAAM,oBAAoB,CAAC,UAA2E;AAC3G,QAAM,OAAO,aAAa,QAAQ,KAAK,KAAK;AAC5C,QAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI;AAE5D,SAAO;AACT;AAGO,MAAM,yBAAyB,MAAc;AAClD,QAAM,gBAAgB,aAAa,QAAQ,YAAY;AACvD,QAAM,cAAc,aAAa,QAAQ,mBAAmB;AAC5D,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,eAAe,UAAU,gBAAgB,CAAC,MAAM,KAAK;AACxD,WAAO;AAAA,EACT;AAGA,MAAI;AACF,UAAM,CAAC,UAAU,IAAI,OAAO,OAAO,MAAM,aAAa,KAAK,CAAC,CAAC;AAC7D,QAAI,YAAY,SAAS,cAAc;AACrC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,YAAQ,MAAM,CAAC;AAEf,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/migrations/v-2.1.0/migration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AAEnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,mCAAmC;AACnC,eAAO,MAAM,eAAe,SAAU,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;;;;;;;;;;CA0UxE,CAAA"}
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/migrations/v-2.1.0/migration.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,mCAAmC;AACnC,eAAO,MAAM,eAAe,SAAU,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;;;;;;;;;;CA0UxE,CAAA"}
@@ -1,4 +1,5 @@
1
- import { camelToTitleWords, capitalize } from "../../helpers/string.js";
1
+ import { capitalize } from "@scalar/helpers/string/capitalize";
2
+ import { camelToTitleWords } from "@scalar/helpers/string/camel-to-title";
2
3
  import { parseLocalStorage } from "../../migrations/local-storage.js";
3
4
  const migrate_v_2_1_0 = (data) => {
4
5
  console.info("Performing data migration v-0.0.0 to v-2.1.0");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/migrations/v-2.1.0/migration.ts"],
4
- "sourcesContent": ["import { camelToTitleWords, capitalize } from '@/helpers/string'\nimport { parseLocalStorage } from '@/migrations/local-storage'\nimport type { v_0_0_0 } from '@/migrations/v-0.0.0/types.generated'\n\nimport type { v_2_1_0 } from './types.generated'\n\n/** V-0.0.0 to V-2.1.0 migration */\nexport const migrate_v_2_1_0 = (data: Omit<v_0_0_0.DataRecord, 'folders'>) => {\n console.info('Performing data migration v-0.0.0 to v-2.1.0')\n\n // Augment the previous data\n const oldData = {\n ...data,\n // @ts-expect-error Tags used to be called folders\n folders: parseLocalStorage('folder'),\n } as v_0_0_0.DataRecord\n\n /** To grab requests and tags we must traverse children, also for security */\n const flattenChildren = (childUids: string[]) =>\n childUids.reduce(\n (prev, uid) => {\n const request = oldData.requests[uid]\n\n // Request\n if (request) {\n prev.requestUids.add(uid)\n // Security\n request.securitySchemeUids?.forEach((s) => prev.authUids.add(s))\n }\n\n // Folder -> tag\n else if (oldData.folders[uid]) {\n const { requestUids, tagUids, authUids } = flattenChildren(oldData.folders[uid].childUids ?? [])\n prev.tagUids.add(uid)\n requestUids.forEach((r) => prev.requestUids.add(r))\n tagUids.forEach((t) => prev.tagUids.add(t))\n authUids.forEach((a) => prev.authUids.add(a))\n }\n\n return prev\n },\n {\n requestUids: new Set<string>(),\n tagUids: new Set<string>(),\n authUids: new Set<string>(),\n },\n )\n\n /** Migrate values from old securitySchemes to the new auth */\n const migrateAuth = (scheme: v_0_0_0.SecurityScheme): NonNullable<v_2_1_0.Collection['auth']>[string] => {\n if (scheme.type === 'apiKey') {\n // ApiKey\n return { type: 'apiKey', name: scheme.name, value: scheme.value ?? '' }\n }\n\n // HTTP\n if (scheme.type === 'http') {\n return {\n type: 'http',\n username: scheme.value ?? '',\n password: scheme.secondValue ?? '',\n token: scheme.value ?? '',\n }\n }\n\n // Oauth2 Implicit\n if (scheme.type === 'oauth2' && scheme.flow.type === 'implicit') {\n return {\n type: 'oauth-implicit',\n token: scheme.flow.token ?? '',\n }\n }\n\n // Oauth2 Password\n if (scheme.type === 'oauth2' && scheme.flow.type === 'password') {\n return {\n type: 'oauth-password',\n token: scheme.flow.token ?? '',\n username: scheme.flow.value ?? '',\n password: scheme.flow.secondValue ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Oauth2 clientCredentials\n if (scheme.type === 'oauth2' && scheme.flow.type === 'clientCredentials') {\n return {\n type: 'oauth-clientCredentials',\n token: scheme.flow.token ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Oauth2 Authorization Code\n if (scheme.type === 'oauth2' && scheme.flow.type === 'authorizationCode') {\n return {\n type: 'oauth-authorizationCode',\n token: scheme.flow.token ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Default - should not get hit\n return {\n type: 'apiKey',\n name: '',\n value: '',\n }\n }\n\n /** This is needed due to our previous data being poluted, we will only allow auth on a requst which is in the spec */\n const requestSecurityDict: Record<string, string[]> = {}\n\n // Collections\n const collections = Object.values(oldData.collections ?? {}).reduce<v_2_1_0.DataRecord['collections']>((prev, c) => {\n const { requestUids, tagUids, authUids } = flattenChildren(c.childUids ?? [])\n\n // Ensure we got unique uids\n const securitySchemesSet = new Set([...authUids, ...Object.values(c.securitySchemeDict ?? {})])\n const securitySchemes = [...securitySchemesSet]\n\n // Add this auth to each request\n requestUids.forEach((r) => (requestSecurityDict[r] = securitySchemes))\n\n // Migrate auth\n const auth = securitySchemes.reduce(\n (_prev, uid) => {\n const scheme = oldData.securitySchemes[uid]\n if (scheme?.uid && _prev) {\n _prev[uid] = migrateAuth(scheme)\n }\n return _prev\n },\n {} as v_2_1_0.Collection['auth'],\n )\n\n prev[c.uid] = {\n 'type': 'collection',\n 'openapi': c.spec?.openapi || '3.1.0',\n 'info': c.spec?.info || { title: 'OpenAPI Spec', version: '0.0.1' },\n 'security': c.spec?.security || [],\n 'externalDocs': c.spec?.externalDocs,\n 'uid': c.uid,\n securitySchemes,\n 'selectedSecuritySchemeUids': [],\n 'selectedServerUid': c.selectedServerUid || c.spec?.serverUids?.[0] || '',\n 'servers': c.spec?.serverUids || [],\n 'requests': [...requestUids],\n 'tags': [...tagUids],\n auth,\n 'children': c.childUids || [],\n 'x-scalar-icon': 'interface-content-folder',\n 'watchMode': false,\n 'watchModeStatus': 'IDLE',\n } satisfies v_2_1_0.Collection\n return prev\n }, {})\n\n // Cookies\n const cookies = oldData.cookies ?? {}\n\n // Environments\n const environments = Object.values(oldData.environments ?? {}).reduce<v_2_1_0.DataRecord['environments']>(\n (prev, e) => {\n prev[e.uid] = {\n ...e,\n value: e.raw ?? '',\n }\n return prev\n },\n {},\n )\n\n // Requests\n const requests = Object.values(oldData.requests ?? {}).reduce<v_2_1_0.DataRecord['requests']>((prev, r) => {\n // Convert parameters\n const parameters: v_2_1_0.Request['parameters'] = [\n ...Object.values(r.parameters?.path ?? {}),\n ...Object.values(r.parameters?.query ?? {}),\n ...Object.values(r.parameters?.headers ?? {}),\n ...Object.values(r.parameters?.cookies ?? {}),\n ].filter((p) => p)\n\n // Ensure this request can access these schemes\n const selectedSecuritySchemeUids = (r.selectedSecuritySchemeUids || []).filter((s) =>\n requestSecurityDict[r.uid]?.includes(s),\n )\n\n prev[r.uid] = {\n ...r,\n parameters,\n type: 'request',\n method: (r.method?.toLowerCase() as v_2_1_0.Request['method']) ?? 'get',\n examples: r.childUids || [],\n selectedSecuritySchemeUids,\n selectedServerUid: '',\n servers: [],\n } satisfies v_2_1_0.Request\n return prev\n }, {})\n\n // Request Examples\n const requestExamples = Object.values(oldData.requestExamples ?? {}).reduce<v_2_1_0.DataRecord['requestExamples']>(\n (prev, e) => {\n prev[e.uid] = {\n ...e,\n type: 'requestExample',\n }\n return prev\n },\n {},\n )\n\n type Oauth2 = Exclude<v_2_1_0.SecurityScheme, { type: 'http' } | { type: 'apiKey' } | { type: 'openIdConnect' }>\n\n type Flow = Extract<v_0_0_0.SecurityScheme, { type: 'oauth2' }>['flow']\n\n /** Specifically handle each oauth2 flow */\n const migrateFlow = (flow: Flow): Oauth2['flow'] => {\n const base = {\n refreshUrl: flow.refreshUrl || '',\n selectedScopes: flow.selectedScopes || [],\n scopes: flow.scopes || {},\n } as const\n\n if (flow.type === 'implicit') {\n return {\n ...flow,\n ...base,\n 'type': 'implicit',\n 'x-scalar-redirect-uri': ('redirectUri' in flow ? flow.redirectUri : '') || '',\n }\n }\n if (flow.type === 'password') {\n return {\n ...flow,\n ...base,\n tokenUrl: flow.tokenUrl || '',\n }\n }\n if (flow.type === 'clientCredentials') {\n return {\n ...flow,\n ...base,\n tokenUrl: flow.tokenUrl || '',\n }\n }\n\n return {\n ...flow,\n ...base,\n 'x-usePkce': 'no',\n 'x-scalar-redirect-uri': ('redirectUri' in flow ? flow.redirectUri : '') || '',\n 'authorizationUrl': flow.authorizationUrl || '',\n 'tokenUrl': flow.tokenUrl || '',\n }\n }\n\n /** Generate a nameKey based on the type of oauth */\n const getNameKey = (scheme: v_0_0_0.SecurityScheme) => {\n switch (scheme?.type) {\n case 'apiKey':\n return `${capitalize(scheme.in)}`\n case 'http': {\n return `${capitalize(scheme.scheme)} Authentication`\n }\n case 'oauth2':\n return camelToTitleWords(scheme.flow.type)\n case 'openIdConnect':\n return 'Open ID Connect'\n default:\n return 'None'\n }\n }\n\n // Security Schemes\n const securitySchemes = Object.values(oldData.securitySchemes ?? {}).reduce<v_2_1_0.DataRecord['securitySchemes']>(\n (prev, s) => {\n prev[s.uid] =\n s.type === 'oauth2'\n ? ({\n ...s,\n 'nameKey': getNameKey(s),\n 'x-scalar-client-id': s.clientId || '',\n 'flow': migrateFlow(s.flow),\n } satisfies Oauth2)\n : ({ ...s, nameKey: getNameKey(s) } satisfies Exclude<v_2_1_0.SecurityScheme, { type: 'oauth2' }>)\n return prev\n },\n {},\n )\n\n // Servers\n const servers = Object.values(oldData.servers ?? {}).reduce<v_2_1_0.DataRecord['servers']>((prev, s) => {\n prev[s.uid] = {\n ...s,\n variables: s.variables ?? {},\n }\n return prev\n }, {})\n\n // Tags\n const tags = Object.values(oldData.folders ?? {}).reduce<v_2_1_0.DataRecord['tags']>((prev, f) => {\n prev[f.uid] = {\n 'type': 'tag',\n 'uid': f.uid,\n 'name': f.name || 'unknownTag',\n 'description': f.description,\n 'children': f.childUids || [],\n 'x-scalar-children': [],\n }\n return prev\n }, {})\n\n // Workspaces\n const workspaces = Object.values(oldData.workspaces ?? {}).reduce<v_2_1_0.DataRecord['workspaces']>((prev, w) => {\n prev[w.uid] = {\n ...w,\n description: w.description ?? 'Basic Scalar Workspace',\n cookies: w.cookieUids || [],\n collections: w.collectionUids || [],\n environments: w.environmentUids || [],\n }\n return prev\n }, {})\n\n return {\n collections,\n cookies,\n environments,\n requestExamples,\n requests,\n securitySchemes,\n servers,\n tags,\n workspaces,\n } satisfies v_2_1_0.DataRecord\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { capitalize } from '@scalar/helpers/string/capitalize'\nimport { camelToTitleWords } from '@scalar/helpers/string/camel-to-title'\n\nimport { parseLocalStorage } from '@/migrations/local-storage'\nimport type { v_0_0_0 } from '@/migrations/v-0.0.0/types.generated'\nimport type { v_2_1_0 } from './types.generated'\n\n/** V-0.0.0 to V-2.1.0 migration */\nexport const migrate_v_2_1_0 = (data: Omit<v_0_0_0.DataRecord, 'folders'>) => {\n console.info('Performing data migration v-0.0.0 to v-2.1.0')\n\n // Augment the previous data\n const oldData = {\n ...data,\n // @ts-expect-error Tags used to be called folders\n folders: parseLocalStorage('folder'),\n } as v_0_0_0.DataRecord\n\n /** To grab requests and tags we must traverse children, also for security */\n const flattenChildren = (childUids: string[]) =>\n childUids.reduce(\n (prev, uid) => {\n const request = oldData.requests[uid]\n\n // Request\n if (request) {\n prev.requestUids.add(uid)\n // Security\n request.securitySchemeUids?.forEach((s) => prev.authUids.add(s))\n }\n\n // Folder -> tag\n else if (oldData.folders[uid]) {\n const { requestUids, tagUids, authUids } = flattenChildren(oldData.folders[uid].childUids ?? [])\n prev.tagUids.add(uid)\n requestUids.forEach((r) => prev.requestUids.add(r))\n tagUids.forEach((t) => prev.tagUids.add(t))\n authUids.forEach((a) => prev.authUids.add(a))\n }\n\n return prev\n },\n {\n requestUids: new Set<string>(),\n tagUids: new Set<string>(),\n authUids: new Set<string>(),\n },\n )\n\n /** Migrate values from old securitySchemes to the new auth */\n const migrateAuth = (scheme: v_0_0_0.SecurityScheme): NonNullable<v_2_1_0.Collection['auth']>[string] => {\n if (scheme.type === 'apiKey') {\n // ApiKey\n return { type: 'apiKey', name: scheme.name, value: scheme.value ?? '' }\n }\n\n // HTTP\n if (scheme.type === 'http') {\n return {\n type: 'http',\n username: scheme.value ?? '',\n password: scheme.secondValue ?? '',\n token: scheme.value ?? '',\n }\n }\n\n // Oauth2 Implicit\n if (scheme.type === 'oauth2' && scheme.flow.type === 'implicit') {\n return {\n type: 'oauth-implicit',\n token: scheme.flow.token ?? '',\n }\n }\n\n // Oauth2 Password\n if (scheme.type === 'oauth2' && scheme.flow.type === 'password') {\n return {\n type: 'oauth-password',\n token: scheme.flow.token ?? '',\n username: scheme.flow.value ?? '',\n password: scheme.flow.secondValue ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Oauth2 clientCredentials\n if (scheme.type === 'oauth2' && scheme.flow.type === 'clientCredentials') {\n return {\n type: 'oauth-clientCredentials',\n token: scheme.flow.token ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Oauth2 Authorization Code\n if (scheme.type === 'oauth2' && scheme.flow.type === 'authorizationCode') {\n return {\n type: 'oauth-authorizationCode',\n token: scheme.flow.token ?? '',\n clientSecret: scheme.flow.clientSecret ?? '',\n }\n }\n\n // Default - should not get hit\n return {\n type: 'apiKey',\n name: '',\n value: '',\n }\n }\n\n /** This is needed due to our previous data being poluted, we will only allow auth on a requst which is in the spec */\n const requestSecurityDict: Record<string, string[]> = {}\n\n // Collections\n const collections = Object.values(oldData.collections ?? {}).reduce<v_2_1_0.DataRecord['collections']>((prev, c) => {\n const { requestUids, tagUids, authUids } = flattenChildren(c.childUids ?? [])\n\n // Ensure we got unique uids\n const securitySchemesSet = new Set([...authUids, ...Object.values(c.securitySchemeDict ?? {})])\n const securitySchemes = [...securitySchemesSet]\n\n // Add this auth to each request\n requestUids.forEach((r) => (requestSecurityDict[r] = securitySchemes))\n\n // Migrate auth\n const auth = securitySchemes.reduce(\n (_prev, uid) => {\n const scheme = oldData.securitySchemes[uid]\n if (scheme?.uid && _prev) {\n _prev[uid] = migrateAuth(scheme)\n }\n return _prev\n },\n {} as v_2_1_0.Collection['auth'],\n )\n\n prev[c.uid] = {\n 'type': 'collection',\n 'openapi': c.spec?.openapi || '3.1.0',\n 'info': c.spec?.info || { title: 'OpenAPI Spec', version: '0.0.1' },\n 'security': c.spec?.security || [],\n 'externalDocs': c.spec?.externalDocs,\n 'uid': c.uid,\n securitySchemes,\n 'selectedSecuritySchemeUids': [],\n 'selectedServerUid': c.selectedServerUid || c.spec?.serverUids?.[0] || '',\n 'servers': c.spec?.serverUids || [],\n 'requests': [...requestUids],\n 'tags': [...tagUids],\n auth,\n 'children': c.childUids || [],\n 'x-scalar-icon': 'interface-content-folder',\n 'watchMode': false,\n 'watchModeStatus': 'IDLE',\n } satisfies v_2_1_0.Collection\n return prev\n }, {})\n\n // Cookies\n const cookies = oldData.cookies ?? {}\n\n // Environments\n const environments = Object.values(oldData.environments ?? {}).reduce<v_2_1_0.DataRecord['environments']>(\n (prev, e) => {\n prev[e.uid] = {\n ...e,\n value: e.raw ?? '',\n }\n return prev\n },\n {},\n )\n\n // Requests\n const requests = Object.values(oldData.requests ?? {}).reduce<v_2_1_0.DataRecord['requests']>((prev, r) => {\n // Convert parameters\n const parameters: v_2_1_0.Request['parameters'] = [\n ...Object.values(r.parameters?.path ?? {}),\n ...Object.values(r.parameters?.query ?? {}),\n ...Object.values(r.parameters?.headers ?? {}),\n ...Object.values(r.parameters?.cookies ?? {}),\n ].filter((p) => p)\n\n // Ensure this request can access these schemes\n const selectedSecuritySchemeUids = (r.selectedSecuritySchemeUids || []).filter((s) =>\n requestSecurityDict[r.uid]?.includes(s),\n )\n\n prev[r.uid] = {\n ...r,\n parameters,\n type: 'request',\n method: (r.method?.toLowerCase() as v_2_1_0.Request['method']) ?? 'get',\n examples: r.childUids || [],\n selectedSecuritySchemeUids,\n selectedServerUid: '',\n servers: [],\n } satisfies v_2_1_0.Request\n return prev\n }, {})\n\n // Request Examples\n const requestExamples = Object.values(oldData.requestExamples ?? {}).reduce<v_2_1_0.DataRecord['requestExamples']>(\n (prev, e) => {\n prev[e.uid] = {\n ...e,\n type: 'requestExample',\n }\n return prev\n },\n {},\n )\n\n type Oauth2 = Exclude<v_2_1_0.SecurityScheme, { type: 'http' } | { type: 'apiKey' } | { type: 'openIdConnect' }>\n\n type Flow = Extract<v_0_0_0.SecurityScheme, { type: 'oauth2' }>['flow']\n\n /** Specifically handle each oauth2 flow */\n const migrateFlow = (flow: Flow): Oauth2['flow'] => {\n const base = {\n refreshUrl: flow.refreshUrl || '',\n selectedScopes: flow.selectedScopes || [],\n scopes: flow.scopes || {},\n } as const\n\n if (flow.type === 'implicit') {\n return {\n ...flow,\n ...base,\n 'type': 'implicit',\n 'x-scalar-redirect-uri': ('redirectUri' in flow ? flow.redirectUri : '') || '',\n }\n }\n if (flow.type === 'password') {\n return {\n ...flow,\n ...base,\n tokenUrl: flow.tokenUrl || '',\n }\n }\n if (flow.type === 'clientCredentials') {\n return {\n ...flow,\n ...base,\n tokenUrl: flow.tokenUrl || '',\n }\n }\n\n return {\n ...flow,\n ...base,\n 'x-usePkce': 'no',\n 'x-scalar-redirect-uri': ('redirectUri' in flow ? flow.redirectUri : '') || '',\n 'authorizationUrl': flow.authorizationUrl || '',\n 'tokenUrl': flow.tokenUrl || '',\n }\n }\n\n /** Generate a nameKey based on the type of oauth */\n const getNameKey = (scheme: v_0_0_0.SecurityScheme) => {\n switch (scheme?.type) {\n case 'apiKey':\n return `${capitalize(scheme.in)}`\n case 'http': {\n return `${capitalize(scheme.scheme)} Authentication`\n }\n case 'oauth2':\n return camelToTitleWords(scheme.flow.type)\n case 'openIdConnect':\n return 'Open ID Connect'\n default:\n return 'None'\n }\n }\n\n // Security Schemes\n const securitySchemes = Object.values(oldData.securitySchemes ?? {}).reduce<v_2_1_0.DataRecord['securitySchemes']>(\n (prev, s) => {\n prev[s.uid] =\n s.type === 'oauth2'\n ? ({\n ...s,\n 'nameKey': getNameKey(s),\n 'x-scalar-client-id': s.clientId || '',\n 'flow': migrateFlow(s.flow),\n } satisfies Oauth2)\n : ({ ...s, nameKey: getNameKey(s) } satisfies Exclude<v_2_1_0.SecurityScheme, { type: 'oauth2' }>)\n return prev\n },\n {},\n )\n\n // Servers\n const servers = Object.values(oldData.servers ?? {}).reduce<v_2_1_0.DataRecord['servers']>((prev, s) => {\n prev[s.uid] = {\n ...s,\n variables: s.variables ?? {},\n }\n return prev\n }, {})\n\n // Tags\n const tags = Object.values(oldData.folders ?? {}).reduce<v_2_1_0.DataRecord['tags']>((prev, f) => {\n prev[f.uid] = {\n 'type': 'tag',\n 'uid': f.uid,\n 'name': f.name || 'unknownTag',\n 'description': f.description,\n 'children': f.childUids || [],\n 'x-scalar-children': [],\n }\n return prev\n }, {})\n\n // Workspaces\n const workspaces = Object.values(oldData.workspaces ?? {}).reduce<v_2_1_0.DataRecord['workspaces']>((prev, w) => {\n prev[w.uid] = {\n ...w,\n description: w.description ?? 'Basic Scalar Workspace',\n cookies: w.cookieUids || [],\n collections: w.collectionUids || [],\n environments: w.environmentUids || [],\n }\n return prev\n }, {})\n\n return {\n collections,\n cookies,\n environments,\n requestExamples,\n requests,\n securitySchemes,\n servers,\n tags,\n workspaces,\n } satisfies v_2_1_0.DataRecord\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["securitySchemes"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-request-body-from-operation.d.ts","sourceRoot":"","sources":["../../src/spec-getters/get-request-body-from-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AA+C7E;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,EACjD,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,EACpC,8BAA8B,CAAC,EAAE,OAAO,GACvC;IACD,QAAQ,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACtB,EAAE,CAAA;CACJ,GAAG,IAAI,CA+JP"}
1
+ {"version":3,"file":"get-request-body-from-operation.d.ts","sourceRoot":"","sources":["../../src/spec-getters/get-request-body-from-operation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AA8C7E;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,EACjD,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,EACpC,8BAA8B,CAAC,EAAE,OAAO,GACvC;IACD,QAAQ,EAAE,WAAW,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KACtB,EAAE,CAAA;CACJ,GAAG,IAAI,CA+JP"}
@@ -1,4 +1,4 @@
1
- import { json2xml } from "../helpers/json2xml.js";
1
+ import { json2xml } from "@scalar/helpers/file/json2xml";
2
2
  import { normalizeMimeTypeObject } from "../helpers/normalize-mime-type-object.js";
3
3
  import { prettyPrintJson } from "../helpers/pretty-print-json.js";
4
4
  import { getExampleFromSchema } from "./get-example-from-schema.js";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/spec-getters/get-request-body-from-operation.ts"],
4
- "sourcesContent": ["import type { ContentType, TransformedOperation } from '@scalar/types/legacy'\n\nimport { json2xml } from '@/helpers/json2xml'\nimport { normalizeMimeTypeObject } from '@/helpers/normalize-mime-type-object'\nimport { prettyPrintJson } from '@/helpers/pretty-print-json'\nimport { getExampleFromSchema } from './get-example-from-schema'\nimport { getParametersFromOperation } from './get-parameters-from-operation'\n\ntype AnyObject = Record<string, any>\n\n/**\n * Transform the object into a nested array of objects\n * that represent the key-value pairs of the object.\n */\nfunction getParamsFromObject(\n obj: AnyObject,\n nested = false,\n field?: string,\n): {\n name: string\n value: any\n}[] {\n return Object.entries(obj).flatMap(([key, value]) => {\n const name = field ?? key\n\n if (Array.isArray(value) && !nested) {\n return getParamsFromObject(value, true, key)\n }\n\n if (typeof value === 'object' && !(value instanceof File) && value !== null) {\n // Nested object inside formData field: no way to represent it, so just serialize to JSON string\n value = JSON.stringify(value)\n }\n\n return [{ name, value }]\n })\n}\n// Define preferred standard mime types (order indicates preference)\nconst standardMimeTypes: ContentType[] = [\n 'application/json',\n 'application/octet-stream',\n 'application/x-www-form-urlencoded',\n 'application/xml',\n 'multipart/form-data',\n 'text/plain',\n]\n\n/**\n * Get the request body from the operation.\n */\nexport function getRequestBodyFromOperation(\n operation: Omit<TransformedOperation, 'httpVerb'>,\n selectedExampleKey?: string | number,\n omitEmptyAndOptionalProperties?: boolean,\n): {\n mimeType: ContentType\n text?: string | undefined\n params?: {\n name: string\n value?: string | File\n }[]\n} | null {\n const originalContent = operation.information?.requestBody?.content\n const content = normalizeMimeTypeObject(originalContent)\n\n // First try to find a standard mime type\n const mimeType =\n standardMimeTypes.find((currentMimeType) => !!content?.[currentMimeType]) ??\n ((Object.keys(content ?? {})[0] || 'application/json') as ContentType)\n\n // Handle JSON-like content types (e.g., application/vnd.github+json)\n const isJsonLike = mimeType.includes('json') || mimeType.endsWith('+json')\n\n /** Examples */\n const examples = content?.[mimeType]?.examples ?? content?.['application/json']?.examples\n\n // Let\u2019s use the first example\n const selectedExample = examples?.[selectedExampleKey ?? Object.keys(examples ?? {})[0] ?? '']\n\n if (selectedExample) {\n return {\n mimeType,\n text: prettyPrintJson(selectedExample?.value),\n }\n }\n\n /**\n * Body Parameters (Swagger 2.0)\n *\n * \u201DThe payload that's appended to the HTTP request. Since there can only be one payload, there can only\n * be one body parameter. The name of the body parameter has no effect on the parameter itself and is used\n * for documentation purposes only. Since Form parameters are also in the payload, body and form\n * parameters cannot exist together for the same operation.\u201D\n */\n const bodyParameters = getParametersFromOperation(operation, 'body', false)\n\n if (bodyParameters.length > 0) {\n return {\n mimeType: 'application/json',\n text: prettyPrintJson(bodyParameters[0]?.value ?? ''),\n }\n }\n\n /**\n * FormData Parameters (Swagger 2.0)\n *\n * \u201DForm - Used to describe the payload of an HTTP request when either application/x-www-form-urlencoded,\n * multipart/form-data or both are used as the content type of the request (in Swagger's definition, the\n * consumes property of an operation). This is the only parameter type that can be used to send files,\n * thus supporting the file type. Since form parameters are sent in the payload, they cannot be declared\n * together with a body parameter for the same operation. Form parameters have a different format based on\n * the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4):\n * - application/x-www-form-urlencoded - Similar to the format of Query parameters but as a payload.\n * For example, foo=1&bar=swagger - both foo and bar are form parameters. This is normally used for simple\n * parameters that are being transferred.\n * - multipart/form-data - each parameter takes a section in the payload with an internal header.\n * For example, for the header Content-Disposition: form-data; name=\"submit-name\" the name of the parameter is\n * submit-name. This type of form parameters is more commonly used for file transfers.\u201D\n */\n\n const formDataParameters = getParametersFromOperation(operation, 'formData', false)\n\n if (formDataParameters.length > 0) {\n return {\n mimeType: 'application/x-www-form-urlencoded',\n params: formDataParameters.map((parameter) => ({\n name: parameter.name,\n /**\n * TODO: This value MUST be a string\n * Figure out why this is not always a string\n *\n * JSON.stringify is a TEMPORARY fix\n */\n value: typeof parameter.value === 'string' ? parameter.value : JSON.stringify(parameter.value),\n })),\n }\n }\n\n // If no mime type is supported, exit early\n if (!mimeType) {\n return null\n }\n\n // Get the request body object for the mime type\n const requestBodyObject = content?.[mimeType]\n\n // Get example from operation\n const example = requestBodyObject?.example ? requestBodyObject?.example : undefined\n\n // Update the JSON handling section\n if (isJsonLike) {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n mode: 'write',\n omitEmptyAndOptionalProperties: omitEmptyAndOptionalProperties ?? false,\n })\n : null\n\n const body = example ?? exampleFromSchema\n\n return {\n mimeType,\n text: body ? (typeof body === 'string' ? body : JSON.stringify(body, null, 2)) : undefined,\n }\n }\n\n // XML\n if (mimeType === 'application/xml') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n text: example ?? json2xml(exampleFromSchema, ' '),\n }\n }\n\n // Binary data\n if (mimeType === 'application/octet-stream') {\n return {\n mimeType,\n text: 'BINARY',\n }\n }\n\n // Plain text\n if (mimeType === 'text/plain') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n text: example ?? exampleFromSchema ?? '',\n }\n }\n\n // URL encoded data\n if (mimeType === 'multipart/form-data' || mimeType === 'application/x-www-form-urlencoded') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n params: getParamsFromObject(example ?? exampleFromSchema ?? {}),\n }\n }\n\n return null\n}\n"],
5
- "mappings": "AAEA,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AACrC,SAAS,kCAAkC;AAQ3C,SAAS,oBACP,KACA,SAAS,OACT,OAIE;AACF,SAAO,OAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACnD,UAAM,OAAO,SAAS;AAEtB,QAAI,MAAM,QAAQ,KAAK,KAAK,CAAC,QAAQ;AACnC,aAAO,oBAAoB,OAAO,MAAM,GAAG;AAAA,IAC7C;AAEA,QAAI,OAAO,UAAU,YAAY,EAAE,iBAAiB,SAAS,UAAU,MAAM;AAE3E,cAAQ,KAAK,UAAU,KAAK;AAAA,IAC9B;AAEA,WAAO,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,EACzB,CAAC;AACH;AAEA,MAAM,oBAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,4BACd,WACA,oBACA,gCAQO;AACP,QAAM,kBAAkB,UAAU,aAAa,aAAa;AAC5D,QAAM,UAAU,wBAAwB,eAAe;AAGvD,QAAM,WACJ,kBAAkB,KAAK,CAAC,oBAAoB,CAAC,CAAC,UAAU,eAAe,CAAC,MACtE,OAAO,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK;AAGrC,QAAM,aAAa,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,OAAO;AAGzE,QAAM,WAAW,UAAU,QAAQ,GAAG,YAAY,UAAU,kBAAkB,GAAG;AAGjF,QAAM,kBAAkB,WAAW,sBAAsB,OAAO,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;AAE7F,MAAI,iBAAiB;AACnB,WAAO;AAAA,MACL;AAAA,MACA,MAAM,gBAAgB,iBAAiB,KAAK;AAAA,IAC9C;AAAA,EACF;AAUA,QAAM,iBAAiB,2BAA2B,WAAW,QAAQ,KAAK;AAE1E,MAAI,eAAe,SAAS,GAAG;AAC7B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM,gBAAgB,eAAe,CAAC,GAAG,SAAS,EAAE;AAAA,IACtD;AAAA,EACF;AAmBA,QAAM,qBAAqB,2BAA2B,WAAW,YAAY,KAAK;AAElF,MAAI,mBAAmB,SAAS,GAAG;AACjC,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ,mBAAmB,IAAI,CAAC,eAAe;AAAA,QAC7C,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOhB,OAAO,OAAO,UAAU,UAAU,WAAW,UAAU,QAAQ,KAAK,UAAU,UAAU,KAAK;AAAA,MAC/F,EAAE;AAAA,IACJ;AAAA,EACF;AAGA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAGA,QAAM,oBAAoB,UAAU,QAAQ;AAG5C,QAAM,UAAU,mBAAmB,UAAU,mBAAmB,UAAU;AAG1E,MAAI,YAAY;AACd,UAAM,oBAAoB,mBAAmB,SACzC,qBAAqB,mBAAmB,QAAQ;AAAA,MAC9C,MAAM;AAAA,MACN,gCAAgC,kCAAkC;AAAA,IACpE,CAAC,IACD;AAEJ,UAAM,OAAO,WAAW;AAExB,WAAO;AAAA,MACL;AAAA,MACA,MAAM,OAAQ,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,IAAK;AAAA,IACnF;AAAA,EACF;AAGA,MAAI,aAAa,mBAAmB;AAClC,UAAM,oBAAoB,mBAAmB,SACzC,qBAAqB,mBAAmB,QAAQ;AAAA,MAC9C,KAAK;AAAA,MACL,MAAM;AAAA,IACR,CAAC,IACD;AAEJ,WAAO;AAAA,MACL;AAAA,MACA,MAAM,WAAW,SAAS,mBAAmB,IAAI;AAAA,IACnD;AAAA,EACF;AAGA,MAAI,aAAa,4BAA4B;AAC3C,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF;AAGA,MAAI,aAAa,cAAc;AAC7B,UAAM,oBAAoB,mBAAmB,SACzC,qBAAqB,mBAAmB,QAAQ;AAAA,MAC9C,KAAK;AAAA,MACL,MAAM;AAAA,IACR,CAAC,IACD;AAEJ,WAAO;AAAA,MACL;AAAA,MACA,MAAM,WAAW,qBAAqB;AAAA,IACxC;AAAA,EACF;AAGA,MAAI,aAAa,yBAAyB,aAAa,qCAAqC;AAC1F,UAAM,oBAAoB,mBAAmB,SACzC,qBAAqB,mBAAmB,QAAQ;AAAA,MAC9C,KAAK;AAAA,MACL,MAAM;AAAA,IACR,CAAC,IACD;AAEJ,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,oBAAoB,WAAW,qBAAqB,CAAC,CAAC;AAAA,IAChE;AAAA,EACF;AAEA,SAAO;AACT;",
4
+ "sourcesContent": ["import { json2xml } from '@scalar/helpers/file/json2xml'\nimport type { ContentType, TransformedOperation } from '@scalar/types/legacy'\n\nimport { normalizeMimeTypeObject } from '@/helpers/normalize-mime-type-object'\nimport { prettyPrintJson } from '@/helpers/pretty-print-json'\nimport { getExampleFromSchema } from './get-example-from-schema'\nimport { getParametersFromOperation } from './get-parameters-from-operation'\n\ntype AnyObject = Record<string, any>\n\n/**\n * Transform the object into a nested array of objects\n * that represent the key-value pairs of the object.\n */\nfunction getParamsFromObject(\n obj: AnyObject,\n nested = false,\n field?: string,\n): {\n name: string\n value: any\n}[] {\n return Object.entries(obj).flatMap(([key, value]) => {\n const name = field ?? key\n\n if (Array.isArray(value) && !nested) {\n return getParamsFromObject(value, true, key)\n }\n\n if (typeof value === 'object' && !(value instanceof File) && value !== null) {\n // Nested object inside formData field: no way to represent it, so just serialize to JSON string\n value = JSON.stringify(value)\n }\n\n return [{ name, value }]\n })\n}\n// Define preferred standard mime types (order indicates preference)\nconst standardMimeTypes: ContentType[] = [\n 'application/json',\n 'application/octet-stream',\n 'application/x-www-form-urlencoded',\n 'application/xml',\n 'multipart/form-data',\n 'text/plain',\n]\n\n/**\n * Get the request body from the operation.\n */\nexport function getRequestBodyFromOperation(\n operation: Omit<TransformedOperation, 'httpVerb'>,\n selectedExampleKey?: string | number,\n omitEmptyAndOptionalProperties?: boolean,\n): {\n mimeType: ContentType\n text?: string | undefined\n params?: {\n name: string\n value?: string | File\n }[]\n} | null {\n const originalContent = operation.information?.requestBody?.content\n const content = normalizeMimeTypeObject(originalContent)\n\n // First try to find a standard mime type\n const mimeType =\n standardMimeTypes.find((currentMimeType) => !!content?.[currentMimeType]) ??\n ((Object.keys(content ?? {})[0] || 'application/json') as ContentType)\n\n // Handle JSON-like content types (e.g., application/vnd.github+json)\n const isJsonLike = mimeType.includes('json') || mimeType.endsWith('+json')\n\n /** Examples */\n const examples = content?.[mimeType]?.examples ?? content?.['application/json']?.examples\n\n // Let\u2019s use the first example\n const selectedExample = examples?.[selectedExampleKey ?? Object.keys(examples ?? {})[0] ?? '']\n\n if (selectedExample) {\n return {\n mimeType,\n text: prettyPrintJson(selectedExample?.value),\n }\n }\n\n /**\n * Body Parameters (Swagger 2.0)\n *\n * \u201DThe payload that's appended to the HTTP request. Since there can only be one payload, there can only\n * be one body parameter. The name of the body parameter has no effect on the parameter itself and is used\n * for documentation purposes only. Since Form parameters are also in the payload, body and form\n * parameters cannot exist together for the same operation.\u201D\n */\n const bodyParameters = getParametersFromOperation(operation, 'body', false)\n\n if (bodyParameters.length > 0) {\n return {\n mimeType: 'application/json',\n text: prettyPrintJson(bodyParameters[0]?.value ?? ''),\n }\n }\n\n /**\n * FormData Parameters (Swagger 2.0)\n *\n * \u201DForm - Used to describe the payload of an HTTP request when either application/x-www-form-urlencoded,\n * multipart/form-data or both are used as the content type of the request (in Swagger's definition, the\n * consumes property of an operation). This is the only parameter type that can be used to send files,\n * thus supporting the file type. Since form parameters are sent in the payload, they cannot be declared\n * together with a body parameter for the same operation. Form parameters have a different format based on\n * the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4):\n * - application/x-www-form-urlencoded - Similar to the format of Query parameters but as a payload.\n * For example, foo=1&bar=swagger - both foo and bar are form parameters. This is normally used for simple\n * parameters that are being transferred.\n * - multipart/form-data - each parameter takes a section in the payload with an internal header.\n * For example, for the header Content-Disposition: form-data; name=\"submit-name\" the name of the parameter is\n * submit-name. This type of form parameters is more commonly used for file transfers.\u201D\n */\n\n const formDataParameters = getParametersFromOperation(operation, 'formData', false)\n\n if (formDataParameters.length > 0) {\n return {\n mimeType: 'application/x-www-form-urlencoded',\n params: formDataParameters.map((parameter) => ({\n name: parameter.name,\n /**\n * TODO: This value MUST be a string\n * Figure out why this is not always a string\n *\n * JSON.stringify is a TEMPORARY fix\n */\n value: typeof parameter.value === 'string' ? parameter.value : JSON.stringify(parameter.value),\n })),\n }\n }\n\n // If no mime type is supported, exit early\n if (!mimeType) {\n return null\n }\n\n // Get the request body object for the mime type\n const requestBodyObject = content?.[mimeType]\n\n // Get example from operation\n const example = requestBodyObject?.example ? requestBodyObject?.example : undefined\n\n // Update the JSON handling section\n if (isJsonLike) {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n mode: 'write',\n omitEmptyAndOptionalProperties: omitEmptyAndOptionalProperties ?? false,\n })\n : null\n\n const body = example ?? exampleFromSchema\n\n return {\n mimeType,\n text: body ? (typeof body === 'string' ? body : JSON.stringify(body, null, 2)) : undefined,\n }\n }\n\n // XML\n if (mimeType === 'application/xml') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n text: example ?? json2xml(exampleFromSchema, ' '),\n }\n }\n\n // Binary data\n if (mimeType === 'application/octet-stream') {\n return {\n mimeType,\n text: 'BINARY',\n }\n }\n\n // Plain text\n if (mimeType === 'text/plain') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n text: example ?? exampleFromSchema ?? '',\n }\n }\n\n // URL encoded data\n if (mimeType === 'multipart/form-data' || mimeType === 'application/x-www-form-urlencoded') {\n const exampleFromSchema = requestBodyObject?.schema\n ? getExampleFromSchema(requestBodyObject?.schema, {\n xml: true,\n mode: 'write',\n })\n : null\n\n return {\n mimeType,\n params: getParamsFromObject(example ?? exampleFromSchema ?? {}),\n }\n }\n\n return null\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
1
  import type { OpenAPIV3_1 } from '@scalar/openapi-types';
2
2
  import type { ApiReferenceConfiguration } from '@scalar/types/api-reference';
3
+ import { type SecurityScheme } from '@scalar/types/entities';
3
4
  import type { UnknownObject } from '@scalar/types/utils';
4
5
  import type { SelectedSecuritySchemeUids } from '../entities/shared/utility.js';
5
6
  import { type Collection, type CollectionPayload } from '../entities/spec/collection.js';
@@ -7,7 +8,6 @@ import { type RequestExample } from '../entities/spec/request-examples.js';
7
8
  import { type Request } from '../entities/spec/requests.js';
8
9
  import { type Server } from '../entities/spec/server.js';
9
10
  import { type Tag } from '../entities/spec/spec-objects.js';
10
- import { type SecurityScheme } from '@scalar/types/entities';
11
11
  /** Takes a string or object and parses it into an openapi spec compliant schema */
12
12
  export declare const parseSchema: (originalDocument: string | UnknownObject | undefined, { shouldLoad, dereferencedDocument, }?: {
13
13
  shouldLoad?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"import-spec.d.ts","sourceRoot":"","sources":["../../src/transforms/import-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-spec.d.ts","sourceRoot":"","sources":["../../src/transforms/import-spec.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
+ import { isDefined } from "@scalar/helpers/array/is-defined";
2
+ import { isHttpMethod } from "@scalar/helpers/http/is-http-method";
3
+ import { combineUrlAndPath } from "@scalar/helpers/url/merge-urls";
1
4
  import { keysOf } from "@scalar/object-utils/arrays";
2
5
  import { dereference, load, upgrade } from "@scalar/openapi-parser";
6
+ import {
7
+ securitySchemeSchema
8
+ } from "@scalar/types/entities";
3
9
  import { collectionSchema } from "../entities/spec/collection.js";
4
10
  import { createExampleFromRequest } from "../entities/spec/request-examples.js";
5
11
  import { requestSchema } from "../entities/spec/requests.js";
6
12
  import { serverSchema } from "../entities/spec/server.js";
7
13
  import { tagSchema } from "../entities/spec/spec-objects.js";
8
- import { isHttpMethod } from "../helpers/http-methods.js";
9
- import { isDefined } from "../helpers/is-defined.js";
10
- import { combineUrlAndPath } from "../helpers/merge-urls.js";
11
14
  import { schemaModel } from "../helpers/schema-model.js";
12
- import {
13
- securitySchemeSchema
14
- } from "@scalar/types/entities";
15
15
  const dereferenceDocument = async (document, { shouldLoad = true } = {}) => {
16
16
  if (document === null || typeof document === "string" && document.trim() === "") {
17
17
  console.warn("[@scalar/oas-utils] Empty OpenAPI document provided.");
@@ -188,6 +188,9 @@ async function importSpecToWorkspace(content, {
188
188
  const methods = Object.keys(path).filter(isHttpMethod);
189
189
  methods.forEach((method) => {
190
190
  const operation = path[method];
191
+ if (!operation) {
192
+ return;
193
+ }
191
194
  const operationLevelServers = serverSchema.array().parse(operation.servers ?? []);
192
195
  for (const server of operationLevelServers) {
193
196
  operationServers.push(server);