valyrian.js 8.1.2 → 8.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/request/index.ts"],"names":[],"mappings":"AAGA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,cAAc;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CACtC;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,UAAU,WAAY,SAAQ,sBAAsB,EAAE,WAAW;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAE/B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;IAEjH,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,gBAAgB,CAAC;IAErE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAE9C,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;IAEpD,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAEvG,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAExG,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAEvG,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAEzG,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAE1G,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAExG,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC;IAC3G,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CACtC;AAmND,eAAO,MAAM,OAAO,kBAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/request/index.ts"],"names":[],"mappings":"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"}
@@ -25,12 +25,18 @@ __export(index_exports, {
25
25
  module.exports = __toCommonJS(index_exports);
26
26
  var import_valyrian = require("valyrian.js");
27
27
  var import_utils = require("valyrian.js/utils");
28
- function serialize(obj, prefix = "") {
28
+ function serialize(obj, prefix) {
29
+ if (obj === null || obj === void 0) {
30
+ return new URLSearchParams();
31
+ }
29
32
  const params = new URLSearchParams();
30
33
  Object.keys(obj).forEach((prop) => {
31
34
  const key = prefix ? `${prefix}[${prop}]` : prop;
32
- if (typeof obj[prop] === "object") {
33
- params.append(key, serialize(obj[prop], key).toString());
35
+ if (typeof obj[prop] === "object" && obj[prop] !== null) {
36
+ const nestedParams = serialize(obj[prop], key);
37
+ nestedParams.forEach((value, nestedKey) => {
38
+ params.append(nestedKey, value);
39
+ });
34
40
  } else {
35
41
  params.append(key, obj[prop]);
36
42
  }
@@ -40,7 +46,9 @@ function serialize(obj, prefix = "") {
40
46
  function serializeFormData(data) {
41
47
  const fd = new FormData();
42
48
  Object.entries(data).forEach(([key, value]) => {
43
- if (value === null || value === void 0) return;
49
+ if (value === null || value === void 0) {
50
+ return;
51
+ }
44
52
  if (Array.isArray(value)) {
45
53
  value.forEach((v) => fd.append(key, v));
46
54
  } else {
@@ -51,7 +59,7 @@ function serializeFormData(data) {
51
59
  }
52
60
  function parseUrl(url, options) {
53
61
  const urlWithoutSlash = url.replace(/\/+$/, "").trim();
54
- const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;
62
+ const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base || ""}${urlWithoutSlash}`;
55
63
  if (import_valyrian.isNodeJs && typeof options.urls.node === "string") {
56
64
  if (typeof options.urls.api === "string") {
57
65
  return new URL(u.replace(options.urls.api, options.urls.node));
@@ -63,7 +71,10 @@ function parseUrl(url, options) {
63
71
  if (/^https?/gi.test(u)) {
64
72
  return new URL(u);
65
73
  }
66
- return new URL(u, options.urls.base);
74
+ if (!import_valyrian.isNodeJs) {
75
+ return new URL(u, window.location.origin);
76
+ }
77
+ return new URL(u);
67
78
  }
68
79
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
69
80
  var isNativeBody = (data) => data instanceof FormData || data instanceof URLSearchParams || data instanceof Blob || data instanceof ArrayBuffer || typeof DataView !== "undefined" && data instanceof DataView || typeof ReadableStream !== "undefined" && data instanceof ReadableStream;
@@ -108,7 +119,9 @@ function Requester(baseUrl = "", options = defaultOptions) {
108
119
  try {
109
120
  finalUrl = parseUrl(url2, opts);
110
121
  } catch (error) {
111
- throw new Error(`Failed to parse URL: ${url2}`);
122
+ const err = new Error(`Failed to parse URL: ${url2}`, { cause: error });
123
+ err.cause = error;
124
+ throw err;
112
125
  }
113
126
  if (data) {
114
127
  if (innerOptions.method === "GET" && typeof data === "object") {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/request/index.ts"],
4
- "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: Record<string, any>, prefix: string = \"\"): URLSearchParams {\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop: string) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n if (typeof obj[prop] === \"object\") {\n params.append(key, serialize(obj[prop], key).toString());\n } else {\n params.append(key, obj[prop]);\n }\n });\n\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n const fd = new FormData();\n Object.entries(data).forEach(([key, value]) => {\n if (value === null || value === undefined) return; // Ignorar nulos\n\n if (Array.isArray(value)) {\n value.forEach((v) => fd.append(key, v));\n } else {\n fd.append(key, value);\n }\n });\n return fd;\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n return new URL(u, options.urls.base);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\nconst isNativeBody = (data: any) =>\n data instanceof FormData ||\n data instanceof URLSearchParams ||\n data instanceof Blob ||\n data instanceof ArrayBuffer ||\n (typeof DataView !== \"undefined\" && data instanceof DataView) ||\n (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream);\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n throw new Error(`Failed to parse URL: ${url}`);\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (isNativeBody(data) || typeof data === \"string\") {\n innerOptions.body = data as BodyInit;\n } else {\n const isJson = /json/gi.test(contentType);\n if (isJson) {\n innerOptions.body = JSON.stringify(data);\n } else {\n innerOptions.body = serializeFormData(data);\n }\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: any, prefix?: string): URLSearchParams {\n if (obj === null || obj === undefined) {\n return new URLSearchParams();\n }\n\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n\n if (typeof obj[prop] === \"object\" && obj[prop] !== null) {\n const nestedParams = serialize(obj[prop], key);\n nestedParams.forEach((value, nestedKey) => {\n params.append(nestedKey, value);\n });\n } else {\n params.append(key, obj[prop]);\n }\n });\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n const fd = new FormData();\n Object.entries(data).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((v) => fd.append(key, v));\n } else {\n fd.append(key, value);\n }\n });\n return fd;\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base || \"\"}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n if (!isNodeJs) {\n return new URL(u, window.location.origin);\n }\n\n return new URL(u);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\nconst isNativeBody = (data: any) =>\n data instanceof FormData ||\n data instanceof URLSearchParams ||\n data instanceof Blob ||\n data instanceof ArrayBuffer ||\n (typeof DataView !== \"undefined\" && data instanceof DataView) ||\n (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream);\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n const err = new Error(`Failed to parse URL: ${url}`, { cause: error });\n err.cause = error;\n throw err;\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (isNativeBody(data) || typeof data === \"string\") {\n innerOptions.body = data as BodyInit;\n } else {\n const isJson = /json/gi.test(contentType);\n if (isJson) {\n innerOptions.body = JSON.stringify(data);\n } else {\n innerOptions.body = serializeFormData(data);\n }\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
+ "mappings": "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",
6
6
  "names": ["request", "url", "options", "baseUrl"]
7
7
  }
@@ -1 +1 @@
1
- (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})})(o,{request:()=>u});var a,n=(a=o,((o,a,n,l)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let i of r(a))s.call(o,i)||i===n||e(o,i,{get:()=>a[i],enumerable:!(l=t(a,i))||l.enumerable});return o})(e({},"__esModule",{value:!0}),a)),l=require("valyrian.js"),i=require("valyrian.js/utils");function c(e,t=""){const r=new URLSearchParams;return Object.keys(e).forEach(s=>{const o=t?`${t}[${s}]`:s;"object"==typeof e[s]?r.append(o,c(e[s],o).toString()):r.append(o,e[s])}),r}var d={allowedMethods:["get","post","put","patch","delete","head","options"]};var u=function e(t="",r=d){const s=t.replace(/\/$/gi,"").trim();r.urls||(r.urls={base:"",node:null,api:null}),r.allowedMethods||(r.allowedMethods=d.allowedMethods);const o={...r,urls:{node:r.urls.node||null,api:r.urls.api||null,base:r.urls.base?r.urls.base+s:s}},a=async function(e,t,r,s={}){const a={method:e.toUpperCase(),headers:{},resolveWithFullResponse:!1,...o,...s};a.headers={...a.headers,...o.headers,...s.headers},a.headers.Accept||(a.headers.Accept="application/json");const n=a.headers.Accept,i=a.headers["Content-Type"]||a.headers["content-type"]||"";if(!a.allowedMethods.includes(e))throw new Error(`Method ${e} not allowed. Allowed methods: ${a.allowedMethods.join(", ")}`);let d;try{d=function(e,t){const r=e.replace(/\/+$/,"").trim(),s=/^https?/gi.test(r)?r:`${t.urls.base}${r}`;if(l.isNodeJs&&"string"==typeof t.urls.node){if("string"==typeof t.urls.api)return new URL(s.replace(t.urls.api,t.urls.node));if(!/^https?/gi.test(s))return new URL(s,t.urls.node)}return/^https?/gi.test(s)?new URL(s):new URL(s,t.urls.base)}(t,o)}catch(e){throw new Error(`Failed to parse URL: ${t}`)}if(r)if("GET"===a.method&&"object"==typeof r)d.search=c(r).toString();else if((e=>e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer||"undefined"!=typeof DataView&&e instanceof DataView||"undefined"!=typeof ReadableStream&&e instanceof ReadableStream)(r)||"string"==typeof r)a.body=r;else{const e=/json/gi.test(i);a.body=e?JSON.stringify(r):function(e){const t=new FormData;return Object.entries(e).forEach(([e,r])=>{null!=r&&(Array.isArray(r)?r.forEach(r=>t.append(e,r)):t.append(e,r))}),t}(r)}const u=await fetch(d.toString(),a);let p=null;if(!u.ok){const e=new Error(`${u.status}: ${u.statusText}`);if(e.response=u,/text/gi.test(n)&&(e.body=await u.text()),/json/gi.test(n))try{e.body=await u.json()}catch(t){e.body=null,console.warn("Failed to parse JSON response:",t)}throw e}if(a.resolveWithFullResponse)return u;if(/text/gi.test(n))p=await u.text();else if(/json/gi.test(n))try{p=await u.json()}catch(e){console.warn("Failed to parse JSON response:",e),p=null}else p=/blob/gi.test(n)?await u.blob():/arraybuffer/gi.test(n)?await u.arrayBuffer():u;return p||u};return a.new=(t,r)=>e(t,{...o,...r||{}}),a.setOption=(e,t)=>((0,i.set)(o,e,t),o),a.getOptions=e=>e?(0,i.get)(o,e):o,Object.assign(a,o.allowedMethods.reduce((e,t)=>(e[t]=(e,r,s)=>a(t,e,r,s),e),{})),a}();"undefined"!=typeof module?module.exports=n:self.ValyrianRequest=n})();//# sourceMappingURL=index.min.js.map
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})})(o,{request:()=>u});var n,a=(n=o,((o,n,a,l)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let i of r(n))s.call(o,i)||i===a||e(o,i,{get:()=>n[i],enumerable:!(l=t(n,i))||l.enumerable});return o})(e({},"__esModule",{value:!0}),n)),l=require("valyrian.js"),i=require("valyrian.js/utils");function c(e,t){if(null==e)return new URLSearchParams;const r=new URLSearchParams;return Object.keys(e).forEach(s=>{const o=t?`${t}[${s}]`:s;if("object"==typeof e[s]&&null!==e[s]){c(e[s],o).forEach((e,t)=>{r.append(t,e)})}else r.append(o,e[s])}),r}var d={allowedMethods:["get","post","put","patch","delete","head","options"]};var u=function e(t="",r=d){const s=t.replace(/\/$/gi,"").trim();r.urls||(r.urls={base:"",node:null,api:null}),r.allowedMethods||(r.allowedMethods=d.allowedMethods);const o={...r,urls:{node:r.urls.node||null,api:r.urls.api||null,base:r.urls.base?r.urls.base+s:s}},n=async function(e,t,r,s={}){const n={method:e.toUpperCase(),headers:{},resolveWithFullResponse:!1,...o,...s};n.headers={...n.headers,...o.headers,...s.headers},n.headers.Accept||(n.headers.Accept="application/json");const a=n.headers.Accept,i=n.headers["Content-Type"]||n.headers["content-type"]||"";if(!n.allowedMethods.includes(e))throw new Error(`Method ${e} not allowed. Allowed methods: ${n.allowedMethods.join(", ")}`);let d;try{d=function(e,t){const r=e.replace(/\/+$/,"").trim(),s=/^https?/gi.test(r)?r:`${t.urls.base||""}${r}`;if(l.isNodeJs&&"string"==typeof t.urls.node){if("string"==typeof t.urls.api)return new URL(s.replace(t.urls.api,t.urls.node));if(!/^https?/gi.test(s))return new URL(s,t.urls.node)}return/^https?/gi.test(s)||l.isNodeJs?new URL(s):new URL(s,window.location.origin)}(t,o)}catch(e){const r=new Error(`Failed to parse URL: ${t}`,{cause:e});throw r.cause=e,r}if(r)if("GET"===n.method&&"object"==typeof r)d.search=c(r).toString();else if((e=>e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer||"undefined"!=typeof DataView&&e instanceof DataView||"undefined"!=typeof ReadableStream&&e instanceof ReadableStream)(r)||"string"==typeof r)n.body=r;else{const e=/json/gi.test(i);n.body=e?JSON.stringify(r):function(e){const t=new FormData;return Object.entries(e).forEach(([e,r])=>{null!=r&&(Array.isArray(r)?r.forEach(r=>t.append(e,r)):t.append(e,r))}),t}(r)}const u=await fetch(d.toString(),n);let p=null;if(!u.ok){const e=new Error(`${u.status}: ${u.statusText}`);if(e.response=u,/text/gi.test(a)&&(e.body=await u.text()),/json/gi.test(a))try{e.body=await u.json()}catch(t){e.body=null,console.warn("Failed to parse JSON response:",t)}throw e}if(n.resolveWithFullResponse)return u;if(/text/gi.test(a))p=await u.text();else if(/json/gi.test(a))try{p=await u.json()}catch(e){console.warn("Failed to parse JSON response:",e),p=null}else p=/blob/gi.test(a)?await u.blob():/arraybuffer/gi.test(a)?await u.arrayBuffer():u;return p||u};return n.new=(t,r)=>e(t,{...o,...r||{}}),n.setOption=(e,t)=>((0,i.set)(o,e,t),o),n.getOptions=e=>e?(0,i.get)(o,e):o,Object.assign(n,o.allowedMethods.reduce((e,t)=>(e[t]=(e,r,s)=>n(t,e,r,s),e),{})),n}();"undefined"!=typeof module?module.exports=a:self.ValyrianRequest=a})();//# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJyZXF1ZXN0IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwcm9wIiwia2V5IiwiYXBwZW5kIiwidG9TdHJpbmciLCJkZWZhdWx0T3B0aW9ucyIsImFsbG93ZWRNZXRob2RzIiwiUmVxdWVzdGVyIiwiYmFzZVVybCIsIm9wdGlvbnMiLCJ1cmwiLCJyZXBsYWNlIiwidHJpbSIsInVybHMiLCJiYXNlIiwibm9kZSIsImFwaSIsIm9wdHMiLCJhc3luYyIsIm1ldGhvZCIsImRhdGEiLCJpbm5lck9wdGlvbnMiLCJ0b1VwcGVyQ2FzZSIsImhlYWRlcnMiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsIkFjY2VwdCIsImFjY2VwdFR5cGUiLCJjb250ZW50VHlwZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJqb2luIiwiZmluYWxVcmwiLCJ1cmxXaXRob3V0U2xhc2giLCJ1IiwidGVzdCIsImlzTm9kZUpzIiwiVVJMIiwicGFyc2VVcmwiLCJlcnJvciIsInNlYXJjaCIsIkZvcm1EYXRhIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJSZWFkYWJsZVN0cmVhbSIsImlzTmF0aXZlQm9keSIsImJvZHkiLCJpc0pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZmQiLCJlbnRyaWVzIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ2Iiwic2VyaWFsaXplRm9ybURhdGEiLCJyZXNwb25zZSIsImZldGNoIiwib2siLCJlcnIiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidGV4dCIsImpzb24iLCJjb25zb2xlIiwid2FybiIsImJsb2IiLCJhcnJheUJ1ZmZlciIsIm5ldyIsInNldE9wdGlvbiIsInNldCIsImdldE9wdGlvbnMiLCJnZXQiLCJhc3NpZ24iLCJyZWR1Y2UiLCJhY2MiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcmVxdWVzdC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGVKcyB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZ2V0LCBzZXQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxuaW50ZXJmYWNlIFVybE9wdGlvbnMge1xuICBiYXNlPzogc3RyaW5nOyAvLyBVc2VkIHRvIHByZWZpeCB0aGUgdXJsIGZvciBzY29wZWQgcmVxdWVzdHMuXG4gIG5vZGU/OiBzdHJpbmcgfCBudWxsOyAvLyBVc2VkIHRvIHJlZGlyZWN0IGxvY2FsIHJlcXVlc3RzIHRvIG5vZGUgc2VydmVyIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuXG4gIGFwaT86IHN0cmluZyB8IG51bGw7IC8vIFVzZWQgdG8gcmVkaXJlY3QgYXBpIHJlcXVlc3RzIHRvIG5vZGUgc2VydmVyIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuXG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIGFsbG93ZWRNZXRob2RzPzogc3RyaW5nW107XG4gIHVybHM/OiBVcmxPcHRpb25zO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMge1xuICB1cmxzOiBVcmxPcHRpb25zO1xuICBhbGxvd2VkTWV0aG9kczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBTZW5kT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zV2l0aFVybHMsIFJlcXVlc3RJbml0IHtcbiAgYWxsb3dlZE1ldGhvZHM6IHN0cmluZ1tdO1xuICBtZXRob2Q6IHN0cmluZztcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmZhY2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUGFydGlhbDxTZW5kT3B0aW9ucz4pOiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG5ldzogKGJhc2VVcmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PiBSZXF1ZXN0SW50ZXJmYWNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgc2V0T3B0aW9uczogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0T3B0aW9uczogKGtleT86IHN0cmluZykgPT4gUmVxdWVzdE9wdGlvbnMgfCB2b2lkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0OiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcG9zdDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHB1dDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHBhdGNoOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaGVhZDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG9wdGlvbnM6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueTtcbn1cblxuLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXJpYWxpemUgYW4gb2JqZWN0IGludG8gYSBxdWVyeSBzdHJpbmcuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVmaXg6IHN0cmluZyA9IFwiXCIpOiBVUkxTZWFyY2hQYXJhbXMge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9WyR7cHJvcH1dYCA6IHByb3A7XG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCBzZXJpYWxpemUob2JqW3Byb3BdLCBrZXkpLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMuYXBwZW5kKGtleSwgb2JqW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1EYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBGb3JtRGF0YSB7XG4gIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XG4gIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIElnbm9yYXIgbnVsb3NcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4gZmQuYXBwZW5kKGtleSwgdikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmZC5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdE9wdGlvbnNXaXRoVXJscykge1xuICBjb25zdCB1cmxXaXRob3V0U2xhc2ggPSB1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS50cmltKCk7XG4gIGNvbnN0IHUgPSAvXmh0dHBzPy9naS50ZXN0KHVybFdpdGhvdXRTbGFzaCkgPyB1cmxXaXRob3V0U2xhc2ggOiBgJHtvcHRpb25zLnVybHMuYmFzZX0ke3VybFdpdGhvdXRTbGFzaH1gO1xuXG4gIGlmIChpc05vZGVKcyAmJiB0eXBlb2Ygb3B0aW9ucy51cmxzLm5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJscy5hcGkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHUucmVwbGFjZShvcHRpb25zLnVybHMuYXBpLCBvcHRpb25zLnVybHMubm9kZSkpO1xuICAgIH1cblxuICAgIGlmICghL15odHRwcz8vZ2kudGVzdCh1KSkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodSwgb3B0aW9ucy51cmxzLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICgvXmh0dHBzPy9naS50ZXN0KHUpKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTCh1LCBvcHRpb25zLnVybHMuYmFzZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgYWxsb3dlZE1ldGhvZHM6IFtcImdldFwiLCBcInBvc3RcIiwgXCJwdXRcIiwgXCJwYXRjaFwiLCBcImRlbGV0ZVwiLCBcImhlYWRcIiwgXCJvcHRpb25zXCJdIH07XG5cbmNvbnN0IGlzTmF0aXZlQm9keSA9IChkYXRhOiBhbnkpID0+XG4gIGRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSB8fFxuICBkYXRhIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBCbG9iIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAodHlwZW9mIERhdGFWaWV3ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRhVmlldykgfHxcbiAgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eVxuZnVuY3Rpb24gUmVxdWVzdGVyKGJhc2VVcmwgPSBcIlwiLCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKSB7XG4gIGNvbnN0IHVybCA9IGJhc2VVcmwucmVwbGFjZSgvXFwvJC9naSwgXCJcIikudHJpbSgpO1xuICBpZiAoIW9wdGlvbnMudXJscykge1xuICAgIG9wdGlvbnMudXJscyA9IHtcbiAgICAgIGJhc2U6IFwiXCIsXG4gICAgICBub2RlOiBudWxsLFxuICAgICAgYXBpOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5hbGxvd2VkTWV0aG9kcykge1xuICAgIG9wdGlvbnMuYWxsb3dlZE1ldGhvZHMgPSBkZWZhdWx0T3B0aW9ucy5hbGxvd2VkTWV0aG9kcztcbiAgfVxuXG4gIGNvbnN0IG9wdHM6IFJlcXVlc3RPcHRpb25zV2l0aFVybHMgPSB7XG4gICAgLi4uKG9wdGlvbnMgYXMgUmVxdWVzdE9wdGlvbnNXaXRoVXJscyksXG4gICAgdXJsczoge1xuICAgICAgbm9kZTogb3B0aW9ucy51cmxzLm5vZGUgfHwgbnVsbCxcbiAgICAgIGFwaTogb3B0aW9ucy51cmxzLmFwaSB8fCBudWxsLFxuICAgICAgYmFzZTogb3B0aW9ucy51cmxzLmJhc2UgPyBvcHRpb25zLnVybHMuYmFzZSArIHVybCA6IHVybFxuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdCByZXF1ZXN0ID0gYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9XG4gICkge1xuICAgIGNvbnN0IGlubmVyT3B0aW9uczogU2VuZE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogZmFsc2UsXG4gICAgICAuLi5vcHRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gYXMgU2VuZE9wdGlvbnM7XG5cbiAgICBpbm5lck9wdGlvbnMuaGVhZGVycyA9IHsgLi4uaW5uZXJPcHRpb25zLmhlYWRlcnMsIC4uLm9wdHMuaGVhZGVycywgLi4ub3B0aW9ucy5oZWFkZXJzIH07XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdCkge1xuICAgICAgaW5uZXJPcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdDtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdIHx8IFwiXCI7XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5hbGxvd2VkTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAke21ldGhvZH0gbm90IGFsbG93ZWQuIEFsbG93ZWQgbWV0aG9kczogJHtpbm5lck9wdGlvbnMuYWxsb3dlZE1ldGhvZHMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cblxuICAgIGxldCBmaW5hbFVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICBmaW5hbFVybCA9IHBhcnNlVXJsKHVybCwgb3B0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTDogJHt1cmx9YCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChpbm5lck9wdGlvbnMubWV0aG9kID09PSBcIkdFVFwiICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZpbmFsVXJsLnNlYXJjaCA9IHNlcmlhbGl6ZShkYXRhKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChpc05hdGl2ZUJvZHkoZGF0YSkgfHwgdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaW5uZXJPcHRpb25zLmJvZHkgPSBkYXRhIGFzIEJvZHlJbml0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNKc29uID0gL2pzb24vZ2kudGVzdChjb250ZW50VHlwZSk7XG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICBpbm5lck9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlubmVyT3B0aW9ucy5ib2R5ID0gc2VyaWFsaXplRm9ybURhdGEoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbmFsVXJsLnRvU3RyaW5nKCksIGlubmVyT3B0aW9ucyk7XG4gICAgbGV0IGJvZHkgPSBudWxsO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCkgYXMgRXJyb3IgJiB7IHJlc3BvbnNlPzogYW55OyBib2R5PzogYW55IH07XG4gICAgICBlcnIucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIGlmICgvdGV4dC9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoL2pzb24vZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVyci5ib2R5ID0gbnVsbDtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChpbm5lck9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAoL3RleHQvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICB9IGVsc2UgaWYgKC9qc29uL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZTpcIiwgZXJyb3IpO1xuICAgICAgICBib2R5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9ibG9iL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgfSBlbHNlIGlmICgvYXJyYXlidWZmZXIvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keSB8fCByZXNwb25zZTtcbiAgfSBhcyB1bmtub3duIGFzIFJlcXVlc3RJbnRlcmZhY2U7XG5cbiAgcmVxdWVzdC5uZXcgPSAoYmFzZVVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFJlcXVlc3RlcihiYXNlVXJsLCB7IC4uLm9wdHMsIC4uLihvcHRpb25zIHx8IHt9KSB9KTtcblxuICByZXF1ZXN0LnNldE9wdGlvbiA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIHNldChvcHRzLCBrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfTtcblxuICByZXF1ZXN0LmdldE9wdGlvbnMgPSAoa2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGtleSkge1xuICAgICAgcmV0dXJuIGdldChvcHRzLCBrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oXG4gICAgcmVxdWVzdCxcbiAgICBvcHRzLmFsbG93ZWRNZXRob2RzLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtZXRob2QpID0+IHtcbiAgICAgIGFjY1ttZXRob2RdID0gKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICByZXF1ZXN0KG1ldGhvZCwgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pXG4gICk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCBjb25zdCByZXF1ZXN0ID0gUmVxdWVzdGVyKCk7XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENB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
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJyZXF1ZXN0IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4IiwiVVJMU2VhcmNoUGFyYW1zIiwicGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwcm9wIiwia2V5IiwidmFsdWUiLCJuZXN0ZWRLZXkiLCJhcHBlbmQiLCJkZWZhdWx0T3B0aW9ucyIsImFsbG93ZWRNZXRob2RzIiwiUmVxdWVzdGVyIiwiYmFzZVVybCIsIm9wdGlvbnMiLCJ1cmwiLCJyZXBsYWNlIiwidHJpbSIsInVybHMiLCJiYXNlIiwibm9kZSIsImFwaSIsIm9wdHMiLCJhc3luYyIsIm1ldGhvZCIsImRhdGEiLCJpbm5lck9wdGlvbnMiLCJ0b1VwcGVyQ2FzZSIsImhlYWRlcnMiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsIkFjY2VwdCIsImFjY2VwdFR5cGUiLCJjb250ZW50VHlwZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJqb2luIiwiZmluYWxVcmwiLCJ1cmxXaXRob3V0U2xhc2giLCJ1IiwidGVzdCIsImlzTm9kZUpzIiwiVVJMIiwid2luZG93IiwibG9jYXRpb24iLCJvcmlnaW4iLCJwYXJzZVVybCIsImVycm9yIiwiZXJyIiwiY2F1c2UiLCJzZWFyY2giLCJ0b1N0cmluZyIsIkZvcm1EYXRhIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJSZWFkYWJsZVN0cmVhbSIsImlzTmF0aXZlQm9keSIsImJvZHkiLCJpc0pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZmQiLCJlbnRyaWVzIiwiQXJyYXkiLCJpc0FycmF5IiwidiIsInNlcmlhbGl6ZUZvcm1EYXRhIiwicmVzcG9uc2UiLCJmZXRjaCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInRleHQiLCJqc29uIiwiY29uc29sZSIsIndhcm4iLCJibG9iIiwiYXJyYXlCdWZmZXIiLCJuZXciLCJzZXRPcHRpb24iLCJzZXQiLCJnZXRPcHRpb25zIiwiZ2V0IiwiYXNzaWduIiwicmVkdWNlIiwiYWNjIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3JlcXVlc3QvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOb2RlSnMgfSBmcm9tIFwidmFseXJpYW4uanNcIjtcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSBcInZhbHlyaWFuLmpzL3V0aWxzXCI7XG5cbmludGVyZmFjZSBVcmxPcHRpb25zIHtcbiAgYmFzZT86IHN0cmluZzsgLy8gVXNlZCB0byBwcmVmaXggdGhlIHVybCBmb3Igc2NvcGVkIHJlcXVlc3RzLlxuICBub2RlPzogc3RyaW5nIHwgbnVsbDsgLy8gVXNlZCB0byByZWRpcmVjdCBsb2NhbCByZXF1ZXN0cyB0byBub2RlIHNlcnZlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nLlxuICBhcGk/OiBzdHJpbmcgfCBudWxsOyAvLyBVc2VkIHRvIHJlZGlyZWN0IGFwaSByZXF1ZXN0cyB0byBub2RlIHNlcnZlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nLlxufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdO1xuICB1cmxzPzogVXJsT3B0aW9ucztcbiAgW2tleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogYW55O1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnNXaXRoVXJscyBleHRlbmRzIFJlcXVlc3RPcHRpb25zIHtcbiAgdXJsczogVXJsT3B0aW9ucztcbiAgYWxsb3dlZE1ldGhvZHM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2VuZE9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzLCBSZXF1ZXN0SW5pdCB7XG4gIGFsbG93ZWRNZXRob2RzOiBzdHJpbmdbXTtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFBhcnRpYWw8U2VuZE9wdGlvbnM+KTogYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBuZXc6IChiYXNlVXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUmVxdWVzdEludGVyZmFjZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHNldE9wdGlvbnM6IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldE9wdGlvbnM6IChrZXk/OiBzdHJpbmcpID0+IFJlcXVlc3RPcHRpb25zIHwgdm9pZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBwdXQ6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBwYXRjaDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGRlbGV0ZTogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGhlYWQ6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvcHRpb25zOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbi8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuIG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLlxuZnVuY3Rpb24gc2VyaWFsaXplKG9iajogYW55LCBwcmVmaXg/OiBzdHJpbmcpOiBVUkxTZWFyY2hQYXJhbXMge1xuICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgfVxuXG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKHByb3ApID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9WyR7cHJvcH1dYCA6IHByb3A7XG5cbiAgICBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBvYmpbcHJvcF0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5lc3RlZFBhcmFtcyA9IHNlcmlhbGl6ZShvYmpbcHJvcF0sIGtleSk7XG4gICAgICBuZXN0ZWRQYXJhbXMuZm9yRWFjaCgodmFsdWUsIG5lc3RlZEtleSkgPT4ge1xuICAgICAgICBwYXJhbXMuYXBwZW5kKG5lc3RlZEtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCBvYmpbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1EYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBGb3JtRGF0YSB7XG4gIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XG4gIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKCh2KSA9PiBmZC5hcHBlbmQoa2V5LCB2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZkLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nLCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzKSB7XG4gIGNvbnN0IHVybFdpdGhvdXRTbGFzaCA9IHVybC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpLnRyaW0oKTtcbiAgY29uc3QgdSA9IC9eaHR0cHM/L2dpLnRlc3QodXJsV2l0aG91dFNsYXNoKSA/IHVybFdpdGhvdXRTbGFzaCA6IGAke29wdGlvbnMudXJscy5iYXNlIHx8IFwiXCJ9JHt1cmxXaXRob3V0U2xhc2h9YDtcblxuICBpZiAoaXNOb2RlSnMgJiYgdHlwZW9mIG9wdGlvbnMudXJscy5ub2RlID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnVybHMuYXBpID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gbmV3IFVSTCh1LnJlcGxhY2Uob3B0aW9ucy51cmxzLmFwaSwgb3B0aW9ucy51cmxzLm5vZGUpKTtcbiAgICB9XG5cbiAgICBpZiAoIS9eaHR0cHM/L2dpLnRlc3QodSkpIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHUsIG9wdGlvbnMudXJscy5ub2RlKTtcbiAgICB9XG4gIH1cblxuICBpZiAoL15odHRwcz8vZ2kudGVzdCh1KSkge1xuICAgIHJldHVybiBuZXcgVVJMKHUpO1xuICB9XG5cbiAgaWYgKCFpc05vZGVKcykge1xuICAgIHJldHVybiBuZXcgVVJMKHUsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBVUkwodSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgYWxsb3dlZE1ldGhvZHM6IFtcImdldFwiLCBcInBvc3RcIiwgXCJwdXRcIiwgXCJwYXRjaFwiLCBcImRlbGV0ZVwiLCBcImhlYWRcIiwgXCJvcHRpb25zXCJdIH07XG5cbmNvbnN0IGlzTmF0aXZlQm9keSA9IChkYXRhOiBhbnkpID0+XG4gIGRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSB8fFxuICBkYXRhIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBCbG9iIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAodHlwZW9mIERhdGFWaWV3ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRhVmlldykgfHxcbiAgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eVxuZnVuY3Rpb24gUmVxdWVzdGVyKGJhc2VVcmwgPSBcIlwiLCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKSB7XG4gIGNvbnN0IHVybCA9IGJhc2VVcmwucmVwbGFjZSgvXFwvJC9naSwgXCJcIikudHJpbSgpO1xuICBpZiAoIW9wdGlvbnMudXJscykge1xuICAgIG9wdGlvbnMudXJscyA9IHtcbiAgICAgIGJhc2U6IFwiXCIsXG4gICAgICBub2RlOiBudWxsLFxuICAgICAgYXBpOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5hbGxvd2VkTWV0aG9kcykge1xuICAgIG9wdGlvbnMuYWxsb3dlZE1ldGhvZHMgPSBkZWZhdWx0T3B0aW9ucy5hbGxvd2VkTWV0aG9kcztcbiAgfVxuXG4gIGNvbnN0IG9wdHM6IFJlcXVlc3RPcHRpb25zV2l0aFVybHMgPSB7XG4gICAgLi4uKG9wdGlvbnMgYXMgUmVxdWVzdE9wdGlvbnNXaXRoVXJscyksXG4gICAgdXJsczoge1xuICAgICAgbm9kZTogb3B0aW9ucy51cmxzLm5vZGUgfHwgbnVsbCxcbiAgICAgIGFwaTogb3B0aW9ucy51cmxzLmFwaSB8fCBudWxsLFxuICAgICAgYmFzZTogb3B0aW9ucy51cmxzLmJhc2UgPyBvcHRpb25zLnVybHMuYmFzZSArIHVybCA6IHVybFxuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdCByZXF1ZXN0ID0gYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9XG4gICkge1xuICAgIGNvbnN0IGlubmVyT3B0aW9uczogU2VuZE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogZmFsc2UsXG4gICAgICAuLi5vcHRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gYXMgU2VuZE9wdGlvbnM7XG5cbiAgICBpbm5lck9wdGlvbnMuaGVhZGVycyA9IHsgLi4uaW5uZXJPcHRpb25zLmhlYWRlcnMsIC4uLm9wdHMuaGVhZGVycywgLi4ub3B0aW9ucy5oZWFkZXJzIH07XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdCkge1xuICAgICAgaW5uZXJPcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdDtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdIHx8IFwiXCI7XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5hbGxvd2VkTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAke21ldGhvZH0gbm90IGFsbG93ZWQuIEFsbG93ZWQgbWV0aG9kczogJHtpbm5lck9wdGlvbnMuYWxsb3dlZE1ldGhvZHMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cblxuICAgIGxldCBmaW5hbFVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICBmaW5hbFVybCA9IHBhcnNlVXJsKHVybCwgb3B0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTDogJHt1cmx9YCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICBlcnIuY2F1c2UgPSBlcnJvcjtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGlubmVyT3B0aW9ucy5tZXRob2QgPT09IFwiR0VUXCIgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZmluYWxVcmwuc2VhcmNoID0gc2VyaWFsaXplKGRhdGEpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzTmF0aXZlQm9keShkYXRhKSB8fCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpbm5lck9wdGlvbnMuYm9keSA9IGRhdGEgYXMgQm9keUluaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc0pzb24gPSAvanNvbi9naS50ZXN0KGNvbnRlbnRUeXBlKTtcbiAgICAgICAgaWYgKGlzSnNvbikge1xuICAgICAgICAgIGlubmVyT3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5uZXJPcHRpb25zLmJvZHkgPSBzZXJpYWxpemVGb3JtRGF0YShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmluYWxVcmwudG9TdHJpbmcoKSwgaW5uZXJPcHRpb25zKTtcbiAgICBsZXQgYm9keSA9IG51bGw7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKSBhcyBFcnJvciAmIHsgcmVzcG9uc2U/OiBhbnk7IGJvZHk/OiBhbnkgfTtcbiAgICAgIGVyci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgaWYgKC90ZXh0L2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgICAgZXJyLmJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgvanNvbi9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXJyLmJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyLmJvZHkgPSBudWxsO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2U6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlubmVyT3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmICgvdGV4dC9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIH0gZWxzZSBpZiAoL2pzb24vZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlOlwiLCBlcnJvcik7XG4gICAgICAgIGJvZHkgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL2Jsb2IvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9IGVsc2UgaWYgKC9hcnJheWJ1ZmZlci9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICBib2R5ID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keSA9IHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5IHx8IHJlc3BvbnNlO1xuICB9IGFzIHVua25vd24gYXMgUmVxdWVzdEludGVyZmFjZTtcblxuICByZXF1ZXN0Lm5ldyA9IChiYXNlVXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUmVxdWVzdGVyKGJhc2VVcmwsIHsgLi4ub3B0cywgLi4uKG9wdGlvbnMgfHwge30pIH0pO1xuXG4gIHJlcXVlc3Quc2V0T3B0aW9uID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgc2V0KG9wdHMsIGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIHJlcXVlc3QuZ2V0T3B0aW9ucyA9IChrZXk/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0KG9wdHMsIGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihcbiAgICByZXF1ZXN0LFxuICAgIG9wdHMuYWxsb3dlZE1ldGhvZHMucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1ldGhvZCkgPT4ge1xuICAgICAgYWNjW21ldGhvZF0gPSAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XG4gICAgICAgIHJlcXVlc3QobWV0aG9kLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSlcbiAgKTtcblxuICByZXR1cm4gcmVxdWVzdDtcbn1cblxuZXhwb3J0IGNvbnN0IHJlcXVlc3QgPSBSZXF1ZXN0ZXIoKTtcbiJdLCJtYXBwaW5ncyI6ImdKQUFBQSxFQUFBLEcseURBQUFDLENBQUFELEVBQUEsQ0FBQUUsUUFBQSxJQUFBQSxJQUFBLEksRUFBQUMsRyxFQUFBSCxFLDBNQUFBSSxFQUF5QkMsUUFBQSxlQUN6QkMsRUFBeUJELFFBQUEscUJBcUR6QixTQUFTRSxFQUFVQyxFQUFVQyxHQUMzQixHQUFJRCxRQUNGLE9BQU8sSUFBSUUsZ0JBR2IsTUFBTUMsRUFBUyxJQUFJRCxnQkFjbkIsT0FaQUUsT0FBT0MsS0FBS0wsR0FBS00sUUFBU0MsSUFDeEIsTUFBTUMsRUFBTVAsRUFBUyxHQUFHQSxLQUFVTSxLQUFVQSxFQUU1QyxHQUF5QixpQkFBZFAsRUFBSU8sSUFBb0MsT0FBZFAsRUFBSU8sR0FBZ0IsQ0FDbENSLEVBQVVDLEVBQUlPLEdBQU9DLEdBQzdCRixRQUFRLENBQUNHLEVBQU9DLEtBQzNCUCxFQUFPUSxPQUFPRCxFQUFXRCxJQUU3QixNQUNFTixFQUFPUSxPQUFPSCxFQUFLUixFQUFJTyxNQUdwQkosQ0FDVCxDQTJDQSxJQUFNUyxFQUFpQyxDQUFFQyxlQUFnQixDQUFDLE1BQU8sT0FBUSxNQUFPLFFBQVMsU0FBVSxPQUFRLFlBZ0twRyxJQUFNbkIsRUFySmIsU0FBU29CLEVBQVVDLEVBQVUsR0FBSUMsRUFBMEJKLEdBQ3pELE1BQU1LLEVBQU1GLEVBQVFHLFFBQVEs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
@@ -1,12 +1,18 @@
1
1
  // lib/request/index.ts
2
2
  import { isNodeJs } from "valyrian.js";
3
3
  import { get, set } from "valyrian.js/utils";
4
- function serialize(obj, prefix = "") {
4
+ function serialize(obj, prefix) {
5
+ if (obj === null || obj === void 0) {
6
+ return new URLSearchParams();
7
+ }
5
8
  const params = new URLSearchParams();
6
9
  Object.keys(obj).forEach((prop) => {
7
10
  const key = prefix ? `${prefix}[${prop}]` : prop;
8
- if (typeof obj[prop] === "object") {
9
- params.append(key, serialize(obj[prop], key).toString());
11
+ if (typeof obj[prop] === "object" && obj[prop] !== null) {
12
+ const nestedParams = serialize(obj[prop], key);
13
+ nestedParams.forEach((value, nestedKey) => {
14
+ params.append(nestedKey, value);
15
+ });
10
16
  } else {
11
17
  params.append(key, obj[prop]);
12
18
  }
@@ -16,7 +22,9 @@ function serialize(obj, prefix = "") {
16
22
  function serializeFormData(data) {
17
23
  const fd = new FormData();
18
24
  Object.entries(data).forEach(([key, value]) => {
19
- if (value === null || value === void 0) return;
25
+ if (value === null || value === void 0) {
26
+ return;
27
+ }
20
28
  if (Array.isArray(value)) {
21
29
  value.forEach((v) => fd.append(key, v));
22
30
  } else {
@@ -27,7 +35,7 @@ function serializeFormData(data) {
27
35
  }
28
36
  function parseUrl(url, options) {
29
37
  const urlWithoutSlash = url.replace(/\/+$/, "").trim();
30
- const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;
38
+ const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base || ""}${urlWithoutSlash}`;
31
39
  if (isNodeJs && typeof options.urls.node === "string") {
32
40
  if (typeof options.urls.api === "string") {
33
41
  return new URL(u.replace(options.urls.api, options.urls.node));
@@ -39,7 +47,10 @@ function parseUrl(url, options) {
39
47
  if (/^https?/gi.test(u)) {
40
48
  return new URL(u);
41
49
  }
42
- return new URL(u, options.urls.base);
50
+ if (!isNodeJs) {
51
+ return new URL(u, window.location.origin);
52
+ }
53
+ return new URL(u);
43
54
  }
44
55
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
45
56
  var isNativeBody = (data) => data instanceof FormData || data instanceof URLSearchParams || data instanceof Blob || data instanceof ArrayBuffer || typeof DataView !== "undefined" && data instanceof DataView || typeof ReadableStream !== "undefined" && data instanceof ReadableStream;
@@ -84,7 +95,9 @@ function Requester(baseUrl = "", options = defaultOptions) {
84
95
  try {
85
96
  finalUrl = parseUrl(url2, opts);
86
97
  } catch (error) {
87
- throw new Error(`Failed to parse URL: ${url2}`);
98
+ const err = new Error(`Failed to parse URL: ${url2}`, { cause: error });
99
+ err.cause = error;
100
+ throw err;
88
101
  }
89
102
  if (data) {
90
103
  if (innerOptions.method === "GET" && typeof data === "object") {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/request/index.ts"],
4
- "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: Record<string, any>, prefix: string = \"\"): URLSearchParams {\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop: string) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n if (typeof obj[prop] === \"object\") {\n params.append(key, serialize(obj[prop], key).toString());\n } else {\n params.append(key, obj[prop]);\n }\n });\n\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n const fd = new FormData();\n Object.entries(data).forEach(([key, value]) => {\n if (value === null || value === undefined) return; // Ignorar nulos\n\n if (Array.isArray(value)) {\n value.forEach((v) => fd.append(key, v));\n } else {\n fd.append(key, value);\n }\n });\n return fd;\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n return new URL(u, options.urls.base);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\nconst isNativeBody = (data: any) =>\n data instanceof FormData ||\n data instanceof URLSearchParams ||\n data instanceof Blob ||\n data instanceof ArrayBuffer ||\n (typeof DataView !== \"undefined\" && data instanceof DataView) ||\n (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream);\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n throw new Error(`Failed to parse URL: ${url}`);\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (isNativeBody(data) || typeof data === \"string\") {\n innerOptions.body = data as BodyInit;\n } else {\n const isJson = /json/gi.test(contentType);\n if (isJson) {\n innerOptions.body = JSON.stringify(data);\n } else {\n innerOptions.body = serializeFormData(data);\n }\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: any, prefix?: string): URLSearchParams {\n if (obj === null || obj === undefined) {\n return new URLSearchParams();\n }\n\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n\n if (typeof obj[prop] === \"object\" && obj[prop] !== null) {\n const nestedParams = serialize(obj[prop], key);\n nestedParams.forEach((value, nestedKey) => {\n params.append(nestedKey, value);\n });\n } else {\n params.append(key, obj[prop]);\n }\n });\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n const fd = new FormData();\n Object.entries(data).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((v) => fd.append(key, v));\n } else {\n fd.append(key, value);\n }\n });\n return fd;\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base || \"\"}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n if (!isNodeJs) {\n return new URL(u, window.location.origin);\n }\n\n return new URL(u);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\nconst isNativeBody = (data: any) =>\n data instanceof FormData ||\n data instanceof URLSearchParams ||\n data instanceof Blob ||\n data instanceof ArrayBuffer ||\n (typeof DataView !== \"undefined\" && data instanceof DataView) ||\n (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream);\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n const err = new Error(`Failed to parse URL: ${url}`, { cause: error });\n err.cause = error;\n throw err;\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (isNativeBody(data) || typeof data === \"string\") {\n innerOptions.body = data as BodyInit;\n } else {\n const isJson = /json/gi.test(contentType);\n if (isJson) {\n innerOptions.body = JSON.stringify(data);\n } else {\n innerOptions.body = serializeFormData(data);\n }\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
+ "mappings": "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",
6
6
  "names": ["request", "url", "options", "baseUrl"]
7
7
  }
@@ -52,25 +52,34 @@ export interface RequestInterface {
52
52
  }
53
53
 
54
54
  // This method is used to serialize an object into a query string.
55
- function serialize(obj: Record<string, any>, prefix: string = ""): URLSearchParams {
55
+ function serialize(obj: any, prefix?: string): URLSearchParams {
56
+ if (obj === null || obj === undefined) {
57
+ return new URLSearchParams();
58
+ }
59
+
56
60
  const params = new URLSearchParams();
57
61
 
58
- Object.keys(obj).forEach((prop: string) => {
62
+ Object.keys(obj).forEach((prop) => {
59
63
  const key = prefix ? `${prefix}[${prop}]` : prop;
60
- if (typeof obj[prop] === "object") {
61
- params.append(key, serialize(obj[prop], key).toString());
64
+
65
+ if (typeof obj[prop] === "object" && obj[prop] !== null) {
66
+ const nestedParams = serialize(obj[prop], key);
67
+ nestedParams.forEach((value, nestedKey) => {
68
+ params.append(nestedKey, value);
69
+ });
62
70
  } else {
63
71
  params.append(key, obj[prop]);
64
72
  }
65
73
  });
66
-
67
74
  return params;
68
75
  }
69
76
 
70
77
  function serializeFormData(data: Record<string, any>): FormData {
71
78
  const fd = new FormData();
72
79
  Object.entries(data).forEach(([key, value]) => {
73
- if (value === null || value === undefined) return; // Ignorar nulos
80
+ if (value === null || value === undefined) {
81
+ return;
82
+ }
74
83
 
75
84
  if (Array.isArray(value)) {
76
85
  value.forEach((v) => fd.append(key, v));
@@ -83,7 +92,7 @@ function serializeFormData(data: Record<string, any>): FormData {
83
92
 
84
93
  function parseUrl(url: string, options: RequestOptionsWithUrls) {
85
94
  const urlWithoutSlash = url.replace(/\/+$/, "").trim();
86
- const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;
95
+ const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base || ""}${urlWithoutSlash}`;
87
96
 
88
97
  if (isNodeJs && typeof options.urls.node === "string") {
89
98
  if (typeof options.urls.api === "string") {
@@ -99,7 +108,11 @@ function parseUrl(url: string, options: RequestOptionsWithUrls) {
99
108
  return new URL(u);
100
109
  }
101
110
 
102
- return new URL(u, options.urls.base);
111
+ if (!isNodeJs) {
112
+ return new URL(u, window.location.origin);
113
+ }
114
+
115
+ return new URL(u);
103
116
  }
104
117
 
105
118
  const defaultOptions: RequestOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
@@ -168,7 +181,9 @@ function Requester(baseUrl = "", options: RequestOptions = defaultOptions) {
168
181
  try {
169
182
  finalUrl = parseUrl(url, opts);
170
183
  } catch (error) {
171
- throw new Error(`Failed to parse URL: ${url}`);
184
+ const err = new Error(`Failed to parse URL: ${url}`, { cause: error });
185
+ err.cause = error;
186
+ throw err;
172
187
  }
173
188
 
174
189
  if (data) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valyrian.js",
3
- "version": "8.1.2",
3
+ "version": "8.1.4",
4
4
  "description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)",
5
5
  "repository": "git@github.com:Masquerade-Circus/valyrian.js.git",
6
6
  "author": "Masquerade <christian@masquerade-circus.net>",