@scalar/api-client 2.19.3 → 2.20.1

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 (62) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/style.css +1 -1
  3. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts +0 -9
  4. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
  5. package/dist/v2/blocks/operation-block/OperationBlock.vue.js +126 -67
  6. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts +6 -0
  7. package/dist/v2/blocks/operation-block/components/Header.vue.d.ts.map +1 -1
  8. package/dist/v2/blocks/operation-block/components/Header.vue.js +2 -2
  9. package/dist/v2/blocks/operation-block/components/Header.vue2.js +25 -24
  10. package/dist/v2/blocks/operation-block/helpers/build-request-cookie-header.d.ts +1 -1
  11. package/dist/v2/blocks/operation-block/helpers/build-request-cookie-header.d.ts.map +1 -1
  12. package/dist/v2/blocks/operation-block/helpers/build-request-cookie-header.js +1 -1
  13. package/dist/v2/blocks/operation-block/helpers/build-request.d.ts.map +1 -1
  14. package/dist/v2/blocks/operation-block/helpers/build-request.js +44 -41
  15. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.d.ts +42 -0
  16. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.d.ts.map +1 -0
  17. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-request.js +31 -0
  18. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts +66 -0
  19. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.d.ts.map +1 -0
  20. package/dist/v2/blocks/operation-block/helpers/har-to-fetch-response.js +43 -0
  21. package/dist/v2/blocks/operation-block/helpers/send-request.d.ts +1 -0
  22. package/dist/v2/blocks/operation-block/helpers/send-request.d.ts.map +1 -1
  23. package/dist/v2/blocks/operation-block/helpers/send-request.js +40 -38
  24. package/dist/v2/blocks/request-block/RequestBlock.vue.d.ts.map +1 -1
  25. package/dist/v2/blocks/request-block/RequestBlock.vue.js +2 -2
  26. package/dist/v2/blocks/request-block/RequestBlock.vue2.js +34 -33
  27. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts +3 -1
  28. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.d.ts.map +1 -1
  29. package/dist/v2/blocks/request-block/components/RequestTableRow.vue.js +28 -28
  30. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.d.ts.map +1 -1
  31. package/dist/v2/blocks/request-block/helpers/create-parameter-handlers.js +31 -22
  32. package/dist/v2/blocks/request-block/helpers/get-default-headers.js +1 -1
  33. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts +6 -0
  34. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.d.ts.map +1 -1
  35. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue.js +2 -2
  36. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBar.vue2.js +24 -23
  37. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.d.ts +2 -3
  38. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.d.ts.map +1 -1
  39. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +2 -2
  40. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue2.js +20 -20
  41. package/dist/v2/components/data-table/DataTableCheckbox.vue.js +2 -2
  42. package/dist/v2/components/sidebar/Sidebar.vue.d.ts +5 -0
  43. package/dist/v2/components/sidebar/Sidebar.vue.d.ts.map +1 -1
  44. package/dist/v2/components/sidebar/Sidebar.vue.js +60 -54
  45. package/dist/v2/features/app/app-events.d.ts.map +1 -1
  46. package/dist/v2/features/app/app-events.js +53 -42
  47. package/dist/v2/features/app/app-state.d.ts.map +1 -1
  48. package/dist/v2/features/app/app-state.js +72 -72
  49. package/dist/v2/features/app/components/AppSidebar.vue.d.ts.map +1 -1
  50. package/dist/v2/features/app/components/AppSidebar.vue.js +1 -1
  51. package/dist/v2/features/app/components/AppSidebar.vue2.js +84 -76
  52. package/dist/v2/features/collection/DocumentCollection.vue.d.ts.map +1 -1
  53. package/dist/v2/features/collection/DocumentCollection.vue.js +82 -43
  54. package/dist/v2/features/operation/Operation.vue.d.ts.map +1 -1
  55. package/dist/v2/features/operation/Operation.vue.js +2 -3
  56. package/dist/v2/features/operation/helpers/combine-params.d.ts +2 -2
  57. package/dist/v2/features/operation/helpers/combine-params.d.ts.map +1 -1
  58. package/dist/v2/features/operation/helpers/combine-params.js +11 -10
  59. package/dist/v2/workspace-events.d.ts.map +1 -1
  60. package/dist/v2/workspace-events.js +12 -6
  61. package/dist/views/Request/ResponseSection/ResponseEmpty.vue2.js +1 -1
  62. package/package.json +11 -11
@@ -0,0 +1,42 @@
1
+ import type { HarRequest } from '@scalar/snippetz';
2
+ type HarToFetchRequestProps = {
3
+ /** The HAR Request object to convert */
4
+ harRequest: HarRequest;
5
+ };
6
+ /**
7
+ * Converts a HAR (HTTP Archive) Request to a Fetch API Request object.
8
+ *
9
+ * This function is the reverse of fetchRequestToHar - it takes a HAR request
10
+ * and converts it into a standard JavaScript Fetch API Request object.
11
+ *
12
+ * The conversion handles:
13
+ * - Request method and URL reconstruction
14
+ * - Headers reconstruction from HAR headers array
15
+ * - Cookies conversion to Cookie header
16
+ * - Form data (params) conversion to FormData or URLSearchParams
17
+ * - Body decoding
18
+ * - Content-Type and other header restoration
19
+ * - Query parameters (already embedded in the URL)
20
+ *
21
+ * Use cases:
22
+ * - Replaying recorded HTTP requests
23
+ * - Creating mock requests from HAR files
24
+ * - Testing with fixtures
25
+ * - Request caching and restoration
26
+ * - Re-executing historical API calls
27
+ *
28
+ * Note: The Fetch API Request object does not support setting the HTTP version,
29
+ * so that information from the HAR is not preserved in the returned Request.
30
+ * Query parameters are expected to be already part of the URL in the HAR.
31
+ *
32
+ * @see https://w3c.github.io/web-performance/specs/HAR/Overview.html
33
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Request
34
+ *
35
+ * @example
36
+ * const harRequest = { method: 'POST', url: 'https://api.example.com', ... }
37
+ * const request = harToFetchRequest({ harRequest })
38
+ * const response = await fetch(request)
39
+ */
40
+ export declare const harToFetchRequest: ({ harRequest }: HarToFetchRequestProps) => Request;
41
+ export {};
42
+ //# sourceMappingURL=har-to-fetch-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"har-to-fetch-request.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/operation-block/helpers/har-to-fetch-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,KAAK,sBAAsB,GAAG;IAC5B,wCAAwC;IACxC,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,sBAAsB,KAAG,OAS1E,CAAA"}
@@ -0,0 +1,31 @@
1
+ const l = ({ harRequest: e }) => {
2
+ const n = s(e), o = d(e.postData);
3
+ return new Request(e.url, {
4
+ method: e.method,
5
+ headers: n,
6
+ body: o
7
+ });
8
+ }, s = (e) => {
9
+ const n = new Headers();
10
+ if (e.headers.forEach(({ name: o, value: t }) => {
11
+ n.append(o, t);
12
+ }), e.cookies?.length) {
13
+ const o = e.cookies.map(({ name: t, value: r }) => `${t}=${r}`).join("; ");
14
+ n.append("Cookie", o);
15
+ }
16
+ return n;
17
+ }, d = (e) => {
18
+ if (!e)
19
+ return null;
20
+ const { params: n, text: o, mimeType: t } = e;
21
+ if (n?.length) {
22
+ const c = t?.includes("multipart/form-data") ? new FormData() : new URLSearchParams();
23
+ return n.forEach(({ name: a, value: i }) => {
24
+ c.append(a, i || "");
25
+ }), c;
26
+ }
27
+ return o ? new TextEncoder().encode(o) : null;
28
+ };
29
+ export {
30
+ l as harToFetchRequest
31
+ };
@@ -0,0 +1,66 @@
1
+ import type { HttpMethod } from '@scalar/helpers/http/http-methods';
2
+ import type { HarResponse } from '@scalar/snippetz';
3
+ import type { ResponseInstance } from '../../../../v2/blocks/operation-block/helpers/send-request.js';
4
+ type HarToFetchResponseProps = {
5
+ /** The HAR Response object to convert */
6
+ harResponse: HarResponse;
7
+ /** Optional URL to set on the Response object */
8
+ url?: string;
9
+ /** The HTTP method used for the request */
10
+ method: HttpMethod;
11
+ /** The request path */
12
+ path: string;
13
+ /** Time in ms the request took */
14
+ duration?: number;
15
+ };
16
+ /**
17
+ * Converts a HAR (HTTP Archive) Response back to a ResponseInstance object.
18
+ *
19
+ * This function is the reverse of fetchResponseToHar - it takes a HAR response
20
+ * and converts it back into a ResponseInstance object that includes both the
21
+ * standard Fetch API Response properties and additional metadata.
22
+ *
23
+ * The conversion handles:
24
+ * - Status code and status text restoration
25
+ * - Headers reconstruction from HAR headers array
26
+ * - Body decoding
27
+ * - Content-Type and other header restoration
28
+ * - URL property setting (if provided)
29
+ * - Cookie header detection
30
+ * - Duration tracking
31
+ * - Response size calculation in bytes
32
+ *
33
+ * Body Handling:
34
+ * - Plain text (no encoding): Text-based responses under 1MB from fetchResponseToHar
35
+ * - Base64 encoded: Binary or legacy data (note: new HAR files won't contain binary data)
36
+ * - Empty: Streaming responses, large responses (>1MB), or responses without bodies
37
+ *
38
+ * Use cases:
39
+ * - Replaying recorded HTTP responses
40
+ * - Creating mock responses from HAR files
41
+ * - Testing with fixtures
42
+ * - Response caching and restoration
43
+ *
44
+ * Note: The Fetch API Response object does not support setting the HTTP version,
45
+ * so that information from the HAR is not preserved in the returned Response.
46
+ * The URL property is set using Object.defineProperty since it is read-only
47
+ * in the standard Response constructor.
48
+ *
49
+ * @see https://w3c.github.io/web-performance/specs/HAR/Overview.html
50
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Response
51
+ *
52
+ * @example
53
+ * const harResponse = { status: 200, statusText: 'OK', ... }
54
+ * const response = harToFetchResponse({
55
+ * harResponse,
56
+ * url: 'https://api.example.com',
57
+ * method: 'GET',
58
+ * path: '/users',
59
+ * duration: 250
60
+ * })
61
+ * console.log(response.url) // 'https://api.example.com'
62
+ * console.log(response.duration) // 250
63
+ */
64
+ export declare const harToFetchResponse: ({ harResponse, url, method, path, duration, }: HarToFetchResponseProps) => ResponseInstance;
65
+ export {};
66
+ //# sourceMappingURL=har-to-fetch-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"har-to-fetch-response.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/operation-block/helpers/har-to-fetch-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAA;AAExF,KAAK,uBAAuB,GAAG;IAC7B,yCAAyC;IACzC,WAAW,EAAE,WAAW,CAAA;IACxB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,MAAM,EAAE,UAAU,CAAA;IAClB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,kBAAkB,GAAI,+CAMhC,uBAAuB,KAAG,gBAwB5B,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { getCookieHeaderKeys as i } from "./get-cookie-header-keys.js";
2
+ const l = ({
3
+ harResponse: t,
4
+ url: e = "",
5
+ method: n,
6
+ path: s,
7
+ duration: r = 0
8
+ }) => {
9
+ const o = b(t), { body: d, data: a, size: c } = x(t), u = i(o);
10
+ return {
11
+ ...new Response(d, {
12
+ status: t.status,
13
+ statusText: t.statusText,
14
+ headers: o
15
+ }),
16
+ headers: Object.fromEntries(o.entries()),
17
+ cookieHeaderKeys: u,
18
+ duration: r,
19
+ status: t.status,
20
+ statusText: t.statusText,
21
+ method: n,
22
+ path: s,
23
+ data: a,
24
+ size: c,
25
+ url: e
26
+ };
27
+ }, b = (t) => {
28
+ const e = new Headers();
29
+ return t.headers.forEach(({ name: n, value: s }) => {
30
+ e.append(n, s);
31
+ }), e;
32
+ }, x = (t) => {
33
+ if (!t.content.text)
34
+ return { body: null, data: "", size: 0 };
35
+ const { text: e, encoding: n } = t.content;
36
+ if (n)
37
+ return { body: null, data: e, size: e.length };
38
+ const s = new TextEncoder().encode(e).buffer;
39
+ return { body: s, data: e, size: s.byteLength };
40
+ };
41
+ export {
42
+ l as harToFetchResponse
43
+ };
@@ -49,5 +49,6 @@ export declare const sendRequest: ({ isUsingProxy, operation, request, plugins,
49
49
  response: ResponseInstance;
50
50
  request: Request;
51
51
  timestamp: number;
52
+ originalResponse: Response;
52
53
  }>>;
53
54
  //# sourceMappingURL=send-request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"send-request.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/operation-block/helpers/send-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAEnG,OAAO,EAAU,KAAK,aAAa,EAAkB,MAAM,eAAe,CAAA;AAE1E,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,sBAAsB,CAAA;AAKrE,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IACzD,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,CACE;IACE,wBAAwB;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,qDAAqD;IACrD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAA;CAChD,CACJ,CAAA;AAKH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAU,gDAK/B;IACD,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB,KAAG,OAAO,CACT,aAAa,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAC,CA0DH,CAAA"}
1
+ {"version":3,"file":"send-request.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/operation-block/helpers/send-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAEnG,OAAO,EAAU,KAAK,aAAa,EAAkB,MAAM,eAAe,CAAA;AAE1E,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,sBAAsB,CAAA;AAKrE,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG;IACzD,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,CACE;IACE,wBAAwB;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;CACb,GACD;IACE,qDAAqD;IACrD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAA;CAChD,CACJ,CAAA;AAKH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAU,gDAK/B;IACD,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,eAAe,CAAA;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB,KAAG,OAAO,CACT,aAAa,CAAC;IACZ,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,EAAE,QAAQ,CAAA;CAC3B,CAAC,CA0DH,CAAA"}
@@ -6,47 +6,47 @@ import { decodeBuffer as D } from "./decode-buffer.js";
6
6
  import { getCookieHeaderKeys as T } from "./get-cookie-header-keys.js";
7
7
  const E = [204, 205, 304], v = async ({
8
8
  isUsingProxy: t,
9
- operation: r,
10
- request: i,
11
- plugins: n
9
+ operation: n,
10
+ request: p,
11
+ plugins: r
12
12
  }) => {
13
13
  try {
14
- const { request: s } = await f({ request: i }, "beforeRequest", n), m = Date.now(), e = await fetch(s), a = Date.now(), c = a - m, d = e.headers.get("content-type"), o = x(e.headers, t), u = new URL(e.url), h = u.pathname + u.search, p = e.statusText || S[e.status]?.name || "", l = s.method, y = E.includes(e.status);
14
+ const { request: s } = await f({ request: p }, "beforeRequest", r), l = Date.now(), e = await fetch(s.clone()), a = Date.now(), c = a - l, d = e.headers.get("content-type"), o = x(e.headers, t), u = new URL(e.url), m = u.pathname + u.search, i = e.statusText || S[e.status]?.name || "", h = s.method, R = E.includes(e.status);
15
15
  return d?.startsWith("text/event-stream") && e.body ? H({
16
16
  response: e,
17
17
  modifiedRequest: s,
18
- operation: r,
19
- plugins: n,
18
+ operation: n,
19
+ plugins: r,
20
20
  endTime: a,
21
21
  duration: c,
22
22
  responseHeaders: o,
23
- statusText: p,
24
- method: l,
25
- fullPath: h
26
- }) : k({
23
+ statusText: i,
24
+ method: h,
25
+ fullPath: m
26
+ }) : g({
27
27
  response: e,
28
28
  modifiedRequest: s,
29
- operation: r,
30
- plugins: n,
29
+ operation: n,
30
+ plugins: r,
31
31
  endTime: a,
32
32
  duration: c,
33
33
  responseHeaders: o,
34
- statusText: p,
35
- method: l,
36
- fullPath: h,
34
+ statusText: i,
35
+ method: h,
36
+ fullPath: m,
37
37
  contentType: d,
38
- shouldSkipBody: y
38
+ shouldSkipBody: R
39
39
  });
40
40
  } catch (s) {
41
41
  return [b(s, q.REQUEST_FAILED), null];
42
42
  }
43
43
  }, H = async ({
44
44
  response: t,
45
- modifiedRequest: r,
46
- operation: i,
47
- plugins: n,
45
+ modifiedRequest: n,
46
+ operation: p,
47
+ plugins: r,
48
48
  endTime: s,
49
- duration: m,
49
+ duration: l,
50
50
  responseHeaders: e,
51
51
  statusText: a,
52
52
  method: c,
@@ -57,31 +57,32 @@ const E = [204, 205, 304], v = async ({
57
57
  statusText: a,
58
58
  headers: t.headers
59
59
  });
60
- await f({ response: o, request: r, operation: i }, "responseReceived", n);
60
+ await f({ response: o, request: n, operation: p }, "responseReceived", r);
61
61
  const u = T(o.headers);
62
62
  return [
63
63
  null,
64
64
  {
65
65
  timestamp: s,
66
- request: r,
66
+ request: n,
67
67
  response: {
68
68
  ...o,
69
69
  headers: e,
70
70
  cookieHeaderKeys: u,
71
71
  reader: t.body.getReader(),
72
- duration: m,
72
+ duration: l,
73
73
  method: c,
74
74
  path: d
75
- }
75
+ },
76
+ originalResponse: o.clone()
76
77
  }
77
78
  ];
78
- }, k = async ({
79
+ }, g = async ({
79
80
  response: t,
80
- modifiedRequest: r,
81
- operation: i,
82
- plugins: n,
81
+ modifiedRequest: n,
82
+ operation: p,
83
+ plugins: r,
83
84
  endTime: s,
84
- duration: m,
85
+ duration: l,
85
86
  responseHeaders: e,
86
87
  statusText: a,
87
88
  method: c,
@@ -89,29 +90,30 @@ const E = [204, 205, 304], v = async ({
89
90
  contentType: o,
90
91
  shouldSkipBody: u
91
92
  }) => {
92
- const p = await t.clone().arrayBuffer(), y = D(p, o ?? "text/plain;charset=UTF-8"), R = new Response(u ? null : p, {
93
+ const i = await t.clone().arrayBuffer(), R = D(i, o ?? "text/plain;charset=UTF-8"), y = new Response(u ? null : i, {
93
94
  status: t.status,
94
95
  statusText: a,
95
96
  headers: t.headers
96
97
  });
97
- await f({ response: R, request: r, operation: i }, "responseReceived", n);
98
- const w = T(R.headers);
98
+ await f({ response: y, request: n, operation: p }, "responseReceived", r);
99
+ const w = T(y.headers);
99
100
  return [
100
101
  null,
101
102
  {
102
103
  timestamp: s,
103
- request: r,
104
+ request: n,
104
105
  response: {
105
- ...R,
106
+ ...y,
106
107
  headers: e,
107
108
  cookieHeaderKeys: w,
108
- data: y,
109
- size: p.byteLength,
110
- duration: m,
109
+ data: R,
110
+ size: i.byteLength,
111
+ duration: l,
111
112
  method: c,
112
113
  status: t.status,
113
114
  path: d
114
- }
115
+ },
116
+ originalResponse: t.clone()
115
117
  }
116
118
  ];
117
119
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RequestBlock.vue.d.ts","sourceRoot":"","sources":["../../../../src/v2/blocks/request-block/RequestBlock.vue"],"names":[],"mappings":"AAsiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAEV,QAAQ,EACR,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qEAAqE,CAAA;AACxG,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,YAAY,EACb,MAAM,8DAA8D,CAAA;AAKrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAW1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAWxD,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAA;CACnC,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,gBAAgB,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAA;IAC/D,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,EAAE,eAAe,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,oBAAoB,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACjD,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAC9E,cAAc,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,yBAAyB,CAAC,CAAA;IACtE,uBAAuB,EAAE,oBAAoB,EAAE,CAAA;IAC/C,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,aAAa,EAAE,oBAAoB,EAAE,CAAA;CACtC,CAAC;;AAkqBF,wBAMG"}
1
+ {"version":3,"file":"RequestBlock.vue.d.ts","sourceRoot":"","sources":["../../../../src/v2/blocks/request-block/RequestBlock.vue"],"names":[],"mappings":"AAuiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,KAAK,EAEV,QAAQ,EACR,iBAAiB,EAClB,MAAM,gCAAgC,CAAA;AAGvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qEAAqE,CAAA;AACxG,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,YAAY,EACb,MAAM,8DAA8D,CAAA;AAKrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAW1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAWxD,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAA;CACnC,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,gBAAgB,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAA;IAC/D,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,WAAW,EAAE,kBAAkB,CAAA;IAC/B,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,EAAE,eAAe,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,oBAAoB,EAAE,eAAe,CAAC,UAAU,CAAC,CAAA;IACjD,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAC9E,cAAc,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,yBAAyB,CAAC,CAAA;IACtE,uBAAuB,EAAE,oBAAoB,EAAE,CAAA;IAC/C,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,aAAa,EAAE,oBAAoB,EAAE,CAAA;CACtC,CAAC;;AAmqBF,wBAMG"}
@@ -1,7 +1,7 @@
1
1
  import o from "./RequestBlock.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../../../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-175541a7"]]);
4
+ const e = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8c6cdddb"]]);
5
5
  export {
6
- m as default
6
+ e as default
7
7
  };
@@ -9,8 +9,8 @@ import le from "../../../components/ViewLayout/ViewLayoutSection.vue.js";
9
9
  import { filterGlobalCookie as ne } from "../operation-block/helpers/filter-global-cookies.js";
10
10
  import { getExample as oe } from "../operation-block/helpers/get-example.js";
11
11
  import { getResolvedUrl as re } from "../operation-block/helpers/get-resolved-url.js";
12
- import ue from "./components/RequestBody.vue.js";
13
- import ie from "./components/RequestCodeSnippet.vue.js";
12
+ import ie from "./components/RequestBody.vue.js";
13
+ import ue from "./components/RequestCodeSnippet.vue.js";
14
14
  import k from "./components/RequestParams.vue.js";
15
15
  import { createParameterHandlers as S } from "./helpers/create-parameter-handlers.js";
16
16
  import { getDefaultHeaders as se } from "./helpers/get-default-headers.js";
@@ -60,7 +60,8 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
60
60
  description: t.description,
61
61
  schema: me(t),
62
62
  isRequired: t.required,
63
- isDisabled: de(t, a)
63
+ isDisabled: de(t, a),
64
+ originalParameter: t
64
65
  };
65
66
  }
66
67
  )
@@ -112,10 +113,10 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
112
113
  isReadonly: !0,
113
114
  isDisabled: a[l.name.toLowerCase()] ?? !1
114
115
  })) ?? [];
115
- }), p = n(() => [
116
+ }), H = n(() => [
116
117
  ...P.value ?? [],
117
118
  ...o.value.cookie ?? []
118
- ]), u = z("All"), T = [
119
+ ]), i = z("All"), T = [
119
120
  "Auth",
120
121
  "Variables",
121
122
  "Cookies",
@@ -130,20 +131,20 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
130
131
  Headers: s(),
131
132
  Query: s(),
132
133
  Body: s()
133
- }, H = n(() => {
134
+ }, O = n(() => {
134
135
  const t = /* @__PURE__ */ new Set(["All", ...T]);
135
- return o.value.path?.length || t.delete("Variables"), w(e.method) || t.delete("Body"), O.value && t.delete("Auth"), [...t];
136
- }), i = n(
136
+ return o.value.path?.length || t.delete("Variables"), w(e.method) || t.delete("Body"), U.value && t.delete("Auth"), [...t];
137
+ }), u = n(
137
138
  () => Object.fromEntries(
138
- H.value.map((t) => [t, $[t]])
139
+ O.value.map((t) => [t, $[t]])
139
140
  )
140
- ), O = n(
141
+ ), U = n(
141
142
  () => e.layout === "modal" && !e.operation.security && !Object.keys(e.securitySchemes ?? {}).length
142
- ), L = n(() => e.operation.summary ? e.operation.summary : e.path.replace(ee.PROTOCOL, "") || "Request Name"), h = (t) => u.value === "All" || u.value === t;
143
+ ), L = n(() => e.operation.summary ? e.operation.summary : e.path.replace(ee.PROTOCOL, "") || "Request Name"), h = (t) => i.value === "All" || i.value === t;
143
144
  X(
144
145
  () => e.method,
145
146
  (t) => {
146
- u.value === "Body" && !w(t) && (u.value = "All");
147
+ i.value === "Body" && !w(t) && (i.value = "All");
147
148
  }
148
149
  );
149
150
  const F = (t) => {
@@ -157,7 +158,7 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
157
158
  context: o.value.path ?? []
158
159
  }),
159
160
  cookie: S("cookie", e.eventBus, r.value, {
160
- context: p.value ?? [],
161
+ context: H.value ?? [],
161
162
  globalParameters: P.value.length
162
163
  }),
163
164
  header: S("header", e.eventBus, r.value, {
@@ -202,7 +203,7 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
202
203
  debounceKey: l
203
204
  }
204
205
  );
205
- }, U = s();
206
+ }, p = s();
206
207
  return (t, a) => (d(), C(le, {
207
208
  "aria-label": `Request: ${e.operation.summary}`
208
209
  }, {
@@ -211,11 +212,11 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
211
212
  e.layout !== "modal" ? (d(), x("label", {
212
213
  key: 0,
213
214
  class: "pointer-events-auto absolute top-0 left-0 h-full w-full cursor-text opacity-0",
214
- for: v(U)
215
+ for: v(p)
215
216
  }, null, 8, ye)) : E("", !0),
216
217
  e.layout !== "modal" ? (d(), x("input", {
217
218
  key: 1,
218
- id: v(U),
219
+ id: v(p),
219
220
  class: "text-c-1 group-hover-input pointer-events-auto relative z-10 -ml-0.5 h-8 w-full rounded pl-1.25 has-[:focus-visible]:outline md:-ml-1.25",
220
221
  placeholder: L.value,
221
222
  value: e.operation.summary,
@@ -223,20 +224,20 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
223
224
  }, null, 40, he)) : (d(), x("span", fe, Z(e.operation.summary), 1))
224
225
  ]),
225
226
  m(ae, {
226
- modelValue: u.value,
227
- "onUpdate:modelValue": a[0] || (a[0] = (l) => u.value = l),
228
- filterIds: i.value,
229
- filters: H.value
227
+ modelValue: i.value,
228
+ "onUpdate:modelValue": a[0] || (a[0] = (l) => i.value = l),
229
+ filterIds: u.value,
230
+ filters: O.value
230
231
  }, null, 8, ["modelValue", "filterIds", "filters"])
231
232
  ]),
232
233
  default: q(() => [
233
234
  K("div", {
234
- id: i.value.All,
235
+ id: u.value.All,
235
236
  class: "request-section-content custom-scroll relative flex flex-1 flex-col",
236
- role: u.value === "All" ? "tabpanel" : "none"
237
+ role: i.value === "All" ? "tabpanel" : "none"
237
238
  }, [
238
239
  c(m(v(ce), {
239
- id: i.value.Auth,
240
+ id: u.value.Auth,
240
241
  environment: e.environment,
241
242
  eventBus: e.eventBus,
242
243
  meta: e.authMeta,
@@ -248,10 +249,10 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
248
249
  server: e.server,
249
250
  title: "Authentication"
250
251
  }, null, 8, ["id", "environment", "eventBus", "meta", "proxyUrl", "securityRequirements", "securitySchemes", "selectedSecurity", "selectedSecuritySchemes", "server"]), [
251
- [y, h("Auth") && !O.value]
252
+ [y, h("Auth") && !U.value]
252
253
  ]),
253
254
  c(m(k, B({
254
- id: i.value.Variables,
255
+ id: u.value.Variables,
255
256
  environment: e.environment,
256
257
  eventBus: e.eventBus,
257
258
  exampleKey: e.exampleKey,
@@ -262,18 +263,18 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
262
263
  [y, h("Variables") && o.value.path?.length]
263
264
  ]),
264
265
  c(m(k, B({
265
- id: i.value.Cookies,
266
+ id: u.value.Cookies,
266
267
  environment: e.environment,
267
268
  eventBus: e.eventBus,
268
269
  exampleKey: e.exampleKey,
269
- rows: p.value ?? [],
270
+ rows: H.value ?? [],
270
271
  showAddRowPlaceholder: !0,
271
272
  title: "Cookies"
272
273
  }, b(f.value.cookie)), null, 16, ["id", "environment", "eventBus", "exampleKey", "rows"]), [
273
274
  [y, h("Cookies")]
274
275
  ]),
275
276
  c(m(k, B({
276
- id: i.value.Headers,
277
+ id: u.value.Headers,
277
278
  environment: e.environment,
278
279
  eventBus: e.eventBus,
279
280
  exampleKey: e.exampleKey,
@@ -283,7 +284,7 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
283
284
  [y, h("Headers")]
284
285
  ]),
285
286
  c(m(k, B({
286
- id: i.value.Query,
287
+ id: u.value.Query,
287
288
  environment: e.environment,
288
289
  eventBus: e.eventBus,
289
290
  exampleKey: e.exampleKey,
@@ -292,8 +293,8 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
292
293
  }, b(f.value.query)), null, 16, ["id", "environment", "eventBus", "exampleKey", "rows"]), [
293
294
  [y, h("Query")]
294
295
  ]),
295
- c(m(ue, {
296
- id: i.value.Body,
296
+ c(m(ie, {
297
+ id: u.value.Body,
297
298
  environment: e.environment,
298
299
  exampleKey: e.exampleKey,
299
300
  requestBody: v(R)(e.operation.requestBody),
@@ -315,7 +316,7 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
315
316
  _: 2
316
317
  }, 1024))), 128)),
317
318
  a[1] || (a[1] = K("div", { class: "flex flex-grow" }, null, -1)),
318
- c(m(ie, {
319
+ c(m(ue, {
319
320
  clientOptions: e.clientOptions,
320
321
  eventBus: e.eventBus,
321
322
  globalCookies: e.globalCookies,
@@ -328,7 +329,7 @@ const ve = { class: "group pointer-events-none flex flex-1 items-center gap-1 lg
328
329
  selectedContentType: v(R)(e.operation.requestBody)?.["x-scalar-selected-content-type"]?.[e.exampleKey],
329
330
  selectedServer: e.server ?? void 0
330
331
  }, null, 8, ["clientOptions", "eventBus", "globalCookies", "method", "operation", "path", "securitySchemes", "selectedClient", "selectedContentType", "selectedServer"]), [
331
- [y, u.value === "All"]
332
+ [y, i.value === "All"]
332
333
  ])
333
334
  ], 8, xe)
334
335
  ]),
@@ -1,5 +1,5 @@
1
1
  import type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments';
2
- import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ import type { ParameterObject, SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
3
3
  export type TableRow = {
4
4
  /** The parameter or field name/key */
5
5
  name: string;
@@ -22,6 +22,8 @@ export type TableRow = {
22
22
  isReadonly?: boolean;
23
23
  /** Whether the parameter is overridden later on */
24
24
  isOverridden?: boolean;
25
+ /** Track the original parameter so we can update it */
26
+ originalParameter?: ParameterObject;
25
27
  };
26
28
  type __VLS_Props = {
27
29
  data: TableRow;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTableRow.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"names":[],"mappings":"AAoRA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAchG,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;;;;;;;cAYmB,MAAM;eAAS,MAAM,GAAG,IAAI;oBAAc,OAAO;;;;;;;;cAAjD,MAAM;eAAS,MAAM,GAAG,IAAI;oBAAc,OAAO;;;AAghBtE,wBAOG"}
1
+ {"version":3,"file":"RequestTableRow.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/blocks/request-block/components/RequestTableRow.vue"],"names":[],"mappings":"AAyRA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,8DAA8D,CAAA;AAcrE,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wEAAwE;IACxE,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,eAAe,CAAA;CACpC,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,kBAAkB,CAAA;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAC;;;;;;;cAYmB,MAAM;eAAS,MAAM,GAAG,IAAI;oBAAc,OAAO;;;;;;;;cAAjD,MAAM;eAAS,MAAM,GAAG,IAAI;oBAAc,OAAO;;;AAghBtE,wBAOG"}