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.
- package/dist/lib/request/index.d.ts.map +1 -1
- package/dist/request/index.js +20 -7
- package/dist/request/index.js.map +2 -2
- package/dist/request/index.min.js +1 -1
- package/dist/request/index.min.js.map +1 -1
- package/dist/request/index.mjs +20 -7
- package/dist/request/index.mjs.map +2 -2
- package/lib/request/index.ts +24 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/request/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/request/index.ts"],"names":[],"mappings":"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"}
|
package/dist/request/index.js
CHANGED
|
@@ -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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB,mBAAyB;AAqDzB,SAAS,UAAU,
|
|
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
|
|
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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
|
package/dist/request/index.mjs
CHANGED
|
@@ -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
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
5
|
-
"mappings": ";AAAA,SAAS,gBAAgB;AACzB,SAAS,KAAK,WAAW;AAqDzB,SAAS,UAAU,
|
|
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
|
}
|
package/lib/request/index.ts
CHANGED
|
@@ -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:
|
|
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
|
|
62
|
+
Object.keys(obj).forEach((prop) => {
|
|
59
63
|
const key = prefix ? `${prefix}[${prop}]` : prop;
|
|
60
|
-
|
|
61
|
-
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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>",
|