valyrian.js 7.2.11 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +6 -6
  2. package/dist/flux-store/index.d.ts +32 -0
  3. package/dist/flux-store/index.d.ts.map +1 -0
  4. package/dist/flux-store/index.js +258 -0
  5. package/dist/flux-store/index.js.map +7 -0
  6. package/dist/flux-store/index.min.js +1 -0
  7. package/dist/flux-store/index.min.js.map +1 -0
  8. package/dist/flux-store/index.mjs +237 -0
  9. package/dist/flux-store/index.mjs.map +7 -0
  10. package/dist/hooks/index.d.ts.map +1 -1
  11. package/dist/hooks/index.js +42 -75
  12. package/dist/hooks/index.js.map +2 -2
  13. package/dist/hooks/index.min.js +1 -0
  14. package/dist/hooks/index.min.js.map +1 -0
  15. package/dist/hooks/index.mjs +43 -76
  16. package/dist/hooks/index.mjs.map +2 -2
  17. package/dist/index.d.ts +52 -54
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +397 -328
  20. package/dist/index.js.map +3 -3
  21. package/dist/index.min.js +1 -1
  22. package/dist/index.min.js.map +1 -1
  23. package/dist/index.mjs +397 -328
  24. package/dist/index.mjs.map +3 -3
  25. package/dist/native-store/index.d.ts +14 -0
  26. package/dist/native-store/index.d.ts.map +1 -0
  27. package/dist/native-store/index.js +103 -0
  28. package/dist/native-store/index.js.map +7 -0
  29. package/dist/native-store/index.min.js +1 -0
  30. package/dist/native-store/index.min.js.map +1 -0
  31. package/dist/native-store/index.mjs +82 -0
  32. package/dist/native-store/index.mjs.map +7 -0
  33. package/dist/node/index.d.ts.map +1 -1
  34. package/dist/node/index.js +223 -86
  35. package/dist/node/index.js.map +4 -4
  36. package/dist/node/index.mjs +223 -86
  37. package/dist/node/index.mjs.map +4 -4
  38. package/dist/node/node.sw.js +152 -0
  39. package/dist/node/utils/inline.d.ts.map +1 -1
  40. package/dist/node/utils/node.sw.js +152 -0
  41. package/dist/node/utils/session-storage.d.ts +22 -0
  42. package/dist/node/utils/session-storage.d.ts.map +1 -0
  43. package/dist/node/utils/sw.d.ts.map +1 -1
  44. package/dist/node/utils/tree-adapter.d.ts +9 -0
  45. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  46. package/dist/pulse-store/index.d.ts +13 -0
  47. package/dist/pulse-store/index.d.ts.map +1 -0
  48. package/dist/pulse-store/index.js +143 -0
  49. package/dist/pulse-store/index.js.map +7 -0
  50. package/dist/pulse-store/index.min.js +1 -0
  51. package/dist/pulse-store/index.min.js.map +1 -0
  52. package/dist/pulse-store/index.mjs +122 -0
  53. package/dist/pulse-store/index.mjs.map +7 -0
  54. package/dist/request/index.d.ts.map +1 -1
  55. package/dist/request/index.js +68 -89
  56. package/dist/request/index.js.map +2 -2
  57. package/dist/request/index.min.js +1 -0
  58. package/dist/request/index.min.js.map +1 -0
  59. package/dist/request/index.mjs +68 -89
  60. package/dist/request/index.mjs.map +2 -2
  61. package/dist/router/index.d.ts +32 -31
  62. package/dist/router/index.d.ts.map +1 -1
  63. package/dist/router/index.js +256 -104
  64. package/dist/router/index.js.map +3 -3
  65. package/dist/router/index.min.js +1 -0
  66. package/dist/router/index.min.js.map +1 -0
  67. package/dist/router/index.mjs +256 -104
  68. package/dist/router/index.mjs.map +3 -3
  69. package/dist/signals/index.d.ts +6 -0
  70. package/dist/signals/index.d.ts.map +1 -0
  71. package/dist/signals/index.js +92 -0
  72. package/dist/signals/index.js.map +7 -0
  73. package/dist/signals/index.min.js +1 -0
  74. package/dist/signals/index.min.js.map +1 -0
  75. package/dist/signals/index.mjs +71 -0
  76. package/dist/signals/index.mjs.map +7 -0
  77. package/dist/suspense/index.d.ts +6 -0
  78. package/dist/suspense/index.d.ts.map +1 -0
  79. package/dist/suspense/index.js +67 -0
  80. package/dist/suspense/index.js.map +7 -0
  81. package/dist/suspense/index.min.js +1 -0
  82. package/dist/suspense/index.min.js.map +1 -0
  83. package/dist/suspense/index.mjs +46 -0
  84. package/dist/suspense/index.mjs.map +7 -0
  85. package/dist/sw/index.min.js +1 -0
  86. package/dist/sw/index.min.js.map +1 -0
  87. package/dist/translate/index.d.ts +19 -0
  88. package/dist/translate/index.d.ts.map +1 -0
  89. package/dist/translate/index.js +150 -0
  90. package/dist/translate/index.js.map +7 -0
  91. package/dist/translate/index.min.js +1 -0
  92. package/dist/translate/index.min.js.map +1 -0
  93. package/dist/translate/index.mjs +129 -0
  94. package/dist/translate/index.mjs.map +7 -0
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/dist/utils/deep-freeze.d.ts +3 -0
  97. package/dist/utils/deep-freeze.d.ts.map +1 -0
  98. package/dist/utils/getter-setter.d.ts +3 -0
  99. package/dist/utils/getter-setter.d.ts.map +1 -0
  100. package/dist/utils/has-changed.d.ts +2 -0
  101. package/dist/utils/has-changed.d.ts.map +1 -0
  102. package/dist/utils/index.d.ts +4 -0
  103. package/dist/utils/index.d.ts.map +1 -0
  104. package/dist/utils/index.js +138 -0
  105. package/dist/utils/index.js.map +7 -0
  106. package/dist/utils/index.min.js +1 -0
  107. package/dist/utils/index.min.js.map +1 -0
  108. package/dist/utils/index.mjs +115 -0
  109. package/dist/utils/index.mjs.map +7 -0
  110. package/lib/flux-store/index.ts +301 -0
  111. package/lib/hooks/index.ts +52 -101
  112. package/lib/index.ts +479 -719
  113. package/lib/native-store/index.ts +106 -0
  114. package/lib/node/index.ts +5 -3
  115. package/lib/node/utils/icons.ts +5 -5
  116. package/lib/node/utils/inline.ts +17 -17
  117. package/lib/node/utils/node.sw.js +152 -0
  118. package/lib/node/utils/session-storage.ts +117 -0
  119. package/lib/node/utils/sw.ts +35 -11
  120. package/lib/node/utils/tree-adapter.ts +99 -52
  121. package/lib/pulse-store/index.ts +181 -0
  122. package/lib/request/index.ts +86 -116
  123. package/lib/router/index.ts +358 -170
  124. package/lib/signals/index.ts +98 -0
  125. package/lib/suspense/index.ts +57 -0
  126. package/lib/translate/index.ts +156 -0
  127. package/lib/utils/deep-freeze.ts +54 -0
  128. package/lib/utils/getter-setter.ts +40 -0
  129. package/lib/utils/has-changed.ts +43 -0
  130. package/lib/utils/index.ts +3 -0
  131. package/package.json +38 -50
  132. package/tsconfig.json +1 -1
  133. package/dist/dataset/index.d.ts +0 -24
  134. package/dist/dataset/index.d.ts.map +0 -1
  135. package/dist/dataset/index.js +0 -178
  136. package/dist/dataset/index.js.map +0 -7
  137. package/dist/dataset/index.mjs +0 -157
  138. package/dist/dataset/index.mjs.map +0 -7
  139. package/dist/node/node.sw.tpl +0 -133
  140. package/dist/node/utils/node.sw.tpl +0 -133
  141. package/dist/proxy-signal/index.d.ts +0 -23
  142. package/dist/proxy-signal/index.d.ts.map +0 -1
  143. package/dist/proxy-signal/index.js +0 -138
  144. package/dist/proxy-signal/index.js.map +0 -7
  145. package/dist/proxy-signal/index.mjs +0 -117
  146. package/dist/proxy-signal/index.mjs.map +0 -7
  147. package/dist/signal/index.d.ts +0 -20
  148. package/dist/signal/index.d.ts.map +0 -1
  149. package/dist/signal/index.js +0 -95
  150. package/dist/signal/index.js.map +0 -7
  151. package/dist/signal/index.mjs +0 -74
  152. package/dist/signal/index.mjs.map +0 -7
  153. package/dist/store/index.d.ts +0 -16
  154. package/dist/store/index.d.ts.map +0 -1
  155. package/dist/store/index.js +0 -93
  156. package/dist/store/index.js.map +0 -7
  157. package/dist/store/index.mjs +0 -72
  158. package/dist/store/index.mjs.map +0 -7
  159. package/lib/dataset/index.ts +0 -193
  160. package/lib/index.d.ts +0 -0
  161. package/lib/interfaces.ts.bak +0 -141
  162. package/lib/node/utils/node.sw.tpl +0 -133
  163. package/lib/proxy-signal/index.ts +0 -187
  164. package/lib/signal/index.ts +0 -161
  165. package/lib/store/index.ts +0 -101
@@ -24,34 +24,44 @@ __export(request_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(request_exports);
26
26
  var import_valyrian = require("valyrian.js");
27
+ var import_utils = require("valyrian.js/utils");
27
28
  function serialize(obj, prefix = "") {
28
- return Object.keys(obj).map((prop) => {
29
- let k = prefix ? `${prefix}[${prop}]` : prop;
30
- return typeof obj[prop] === "object" ? serialize(obj[prop], k) : `${encodeURIComponent(k)}=${encodeURIComponent(obj[prop])}`;
31
- }).join("&");
29
+ const params = new URLSearchParams();
30
+ Object.keys(obj).forEach((prop) => {
31
+ const key = prefix ? `${prefix}[${prop}]` : prop;
32
+ if (typeof obj[prop] === "object") {
33
+ params.append(key, serialize(obj[prop], key).toString());
34
+ } else {
35
+ params.append(key, obj[prop]);
36
+ }
37
+ });
38
+ return params;
39
+ }
40
+ function serializeFormData(data) {
41
+ return Object.entries(data).reduce((fd, [key, value]) => {
42
+ fd.append(key, value);
43
+ return fd;
44
+ }, new FormData());
32
45
  }
33
46
  function parseUrl(url, options) {
34
- let u = /^https?/gi.test(url) ? url : options.urls.base + url;
35
- let parts = u.split("?");
36
- u = parts[0].trim().replace(/^\/\//, "/").replace(/\/$/, "").trim();
37
- if (parts[1]) {
38
- u += `?${parts[1]}`;
39
- }
47
+ const urlWithoutSlash = url.replace(/\/+$/, "").trim();
48
+ const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;
40
49
  if (import_valyrian.isNodeJs && typeof options.urls.node === "string") {
41
- options.urls.node = options.urls.node;
42
50
  if (typeof options.urls.api === "string") {
43
- options.urls.api = options.urls.api.replace(/\/$/gi, "").trim();
44
- u = u.replace(options.urls.api, options.urls.node);
51
+ return new URL(u.replace(options.urls.api, options.urls.node));
45
52
  }
46
53
  if (!/^https?/gi.test(u)) {
47
- u = options.urls.node + u;
54
+ return new URL(u, options.urls.node);
48
55
  }
49
56
  }
50
- return u;
57
+ if (/^https?/gi.test(u)) {
58
+ return new URL(u);
59
+ }
60
+ return new URL(u, options.urls.base);
51
61
  }
52
62
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
53
63
  function Requester(baseUrl = "", options = defaultOptions) {
54
- let url = baseUrl.replace(/\/$/gi, "").trim();
64
+ const url = baseUrl.replace(/\/$/gi, "").trim();
55
65
  if (!options.urls) {
56
66
  options.urls = {
57
67
  base: "",
@@ -62,7 +72,7 @@ function Requester(baseUrl = "", options = defaultOptions) {
62
72
  if (!options.allowedMethods) {
63
73
  options.allowedMethods = defaultOptions.allowedMethods;
64
74
  }
65
- let opts = {
75
+ const opts = {
66
76
  ...options,
67
77
  urls: {
68
78
  node: options.urls.node || null,
@@ -71,46 +81,40 @@ function Requester(baseUrl = "", options = defaultOptions) {
71
81
  }
72
82
  };
73
83
  const request2 = async function request3(method, url2, data, options2 = {}) {
74
- let innerOptions = {
84
+ const innerOptions = {
75
85
  method: method.toUpperCase(),
76
86
  headers: {},
77
87
  resolveWithFullResponse: false,
78
88
  ...opts,
79
89
  ...options2
80
90
  };
91
+ innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options2.headers };
81
92
  if (!innerOptions.headers.Accept) {
82
93
  innerOptions.headers.Accept = "application/json";
83
94
  }
84
- let acceptType = innerOptions.headers.Accept;
85
- let contentType = innerOptions.headers["Content-Type"] || innerOptions.headers["content-type"] || "";
86
- if (innerOptions.allowedMethods.indexOf(method) === -1) {
87
- throw new Error("Method not allowed");
95
+ const acceptType = innerOptions.headers.Accept;
96
+ const contentType = innerOptions.headers["Content-Type"] || innerOptions.headers["content-type"] || "";
97
+ if (!innerOptions.allowedMethods.includes(method)) {
98
+ throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(", ")}`);
99
+ }
100
+ let finalUrl;
101
+ try {
102
+ finalUrl = parseUrl(url2, opts);
103
+ } catch (error) {
104
+ throw new Error(`Failed to parse URL: ${url2}`);
88
105
  }
89
106
  if (data) {
107
+ const isJson = /json/gi.test(contentType);
90
108
  if (innerOptions.method === "GET" && typeof data === "object") {
91
- url2 += `?${serialize(data)}`;
92
- }
93
- if (innerOptions.method !== "GET") {
94
- if (/json/gi.test(contentType)) {
95
- innerOptions.body = JSON.stringify(data);
96
- } else {
97
- let formData;
98
- if (data instanceof FormData) {
99
- formData = data;
100
- } else {
101
- formData = new FormData();
102
- for (let i in data) {
103
- formData.append(i, data[i]);
104
- }
105
- }
106
- innerOptions.body = formData;
107
- }
109
+ finalUrl.search = serialize(data).toString();
110
+ } else if (innerOptions.method !== "GET") {
111
+ innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);
108
112
  }
109
113
  }
110
- let response = await fetch(parseUrl(url2, opts), innerOptions);
114
+ const response = await fetch(finalUrl.toString(), innerOptions);
111
115
  let body = null;
112
116
  if (!response.ok) {
113
- let err = new Error(response.statusText);
117
+ const err = new Error(`${response.status}: ${response.statusText}`);
114
118
  err.response = response;
115
119
  if (/text/gi.test(acceptType)) {
116
120
  err.body = await response.text();
@@ -119,6 +123,8 @@ function Requester(baseUrl = "", options = defaultOptions) {
119
123
  try {
120
124
  err.body = await response.json();
121
125
  } catch (error) {
126
+ err.body = null;
127
+ console.warn("Failed to parse JSON response:", error);
122
128
  }
123
129
  }
124
130
  throw err;
@@ -128,66 +134,39 @@ function Requester(baseUrl = "", options = defaultOptions) {
128
134
  }
129
135
  if (/text/gi.test(acceptType)) {
130
136
  body = await response.text();
131
- return body;
132
- }
133
- if (/json/gi.test(acceptType)) {
137
+ } else if (/json/gi.test(acceptType)) {
134
138
  try {
135
139
  body = await response.json();
136
- return body;
137
140
  } catch (error) {
141
+ console.warn("Failed to parse JSON response:", error);
142
+ body = null;
138
143
  }
144
+ } else if (/blob/gi.test(acceptType)) {
145
+ body = await response.blob();
146
+ } else if (/arraybuffer/gi.test(acceptType)) {
147
+ body = await response.arrayBuffer();
148
+ } else {
149
+ body = response;
139
150
  }
140
- return response;
151
+ return body || response;
141
152
  };
142
153
  request2.new = (baseUrl2, options2) => Requester(baseUrl2, { ...opts, ...options2 || {} });
143
154
  request2.setOption = (key, value) => {
144
- let result = opts;
145
- let parsed = key.split(".");
146
- let next;
147
- while (parsed.length) {
148
- next = parsed.shift();
149
- let nextIsArray = next.indexOf("[") > -1;
150
- if (nextIsArray) {
151
- let idx = next.replace(/\D/gi, "");
152
- next = next.split("[")[0];
153
- parsed.unshift(idx);
154
- }
155
- if (parsed.length > 0 && typeof result[next] !== "object") {
156
- result[next] = nextIsArray ? [] : {};
157
- }
158
- if (parsed.length === 0 && typeof value !== "undefined") {
159
- result[next] = value;
160
- }
161
- result = result[next];
162
- }
163
- return result;
155
+ (0, import_utils.set)(opts, key, value);
156
+ return opts;
164
157
  };
165
158
  request2.getOptions = (key) => {
166
- if (!key) {
167
- return opts;
168
- }
169
- let result = opts;
170
- let parsed = key.split(".");
171
- let next;
172
- while (parsed.length) {
173
- next = parsed.shift();
174
- let nextIsArray = next.indexOf("[") > -1;
175
- if (nextIsArray) {
176
- let idx = next.replace(/\D/gi, "");
177
- next = next.split("[")[0];
178
- parsed.unshift(idx);
179
- }
180
- if (parsed.length > 0 && typeof result[next] !== "object") {
181
- return null;
182
- }
183
- if (parsed.length === 0) {
184
- return result[next];
185
- }
186
- result = result[next];
159
+ if (key) {
160
+ return (0, import_utils.get)(opts, key);
187
161
  }
162
+ return opts;
188
163
  };
189
- opts.allowedMethods.forEach(
190
- (method) => request2[method] = (url2, data, options2) => request2(method, url2, data, options2)
164
+ Object.assign(
165
+ request2,
166
+ opts.allowedMethods.reduce((acc, method) => {
167
+ acc[method] = (url2, data, options2) => request2(method, url2, data, options2);
168
+ return acc;
169
+ }, {})
191
170
  );
192
171
  return request2;
193
172
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/request/index.ts"],
4
- "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\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>, 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>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any>, 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 = \"\"): string {\n return Object.keys(obj)\n .map((prop: string) => {\n let k = prefix ? `${prefix}[${prop}]` : prop;\n return typeof obj[prop] === \"object\"\n ? serialize(obj[prop], k)\n : `${encodeURIComponent(k)}=${encodeURIComponent(obj[prop])}`;\n })\n .join(\"&\");\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n let u = /^https?/gi.test(url) ? url : options.urls.base + url;\n\n let parts = u.split(\"?\");\n u = parts[0].trim().replace(/^\\/\\//, \"/\").replace(/\\/$/, \"\").trim();\n\n if (parts[1]) {\n u += `?${parts[1]}`;\n }\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n options.urls.node = options.urls.node;\n\n if (typeof options.urls.api === \"string\") {\n options.urls.api = options.urls.api.replace(/\\/$/gi, \"\").trim();\n u = u.replace(options.urls.api, options.urls.node);\n }\n\n if (!/^https?/gi.test(u)) {\n u = options.urls.node + u;\n }\n }\n\n return u;\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n let 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 let 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 const request = async function request(method: string, url: string, data?: Record<string, any>, options = {}) {\n let innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n let acceptType = innerOptions.headers.Accept;\n let contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (innerOptions.allowedMethods.indexOf(method) === -1) {\n throw new Error(\"Method not allowed\");\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n url += `?${serialize(data)}`;\n }\n\n if (innerOptions.method !== \"GET\") {\n if (/json/gi.test(contentType)) {\n innerOptions.body = JSON.stringify(data);\n } else {\n let formData;\n if (data instanceof FormData) {\n formData = data;\n } else {\n formData = new FormData();\n for (let i in data) {\n formData.append(i, data[i]);\n }\n }\n innerOptions.body = formData;\n }\n }\n }\n\n let response = await fetch(parseUrl(url, opts), innerOptions);\n let body = null;\n if (!response.ok) {\n let err = new Error(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 // ignore\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 return body;\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n return body;\n } catch (error) {\n // ignore\n }\n }\n\n return 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 let result = opts;\n\n let parsed = key.split(\".\");\n let next;\n\n while (parsed.length) {\n next = parsed.shift() as string;\n\n let nextIsArray = next.indexOf(\"[\") > -1;\n if (nextIsArray) {\n let idx = next.replace(/\\D/gi, \"\");\n next = next.split(\"[\")[0];\n parsed.unshift(idx);\n }\n\n if (parsed.length > 0 && typeof result[next] !== \"object\") {\n result[next] = nextIsArray ? [] : {};\n }\n\n if (parsed.length === 0 && typeof value !== \"undefined\") {\n result[next] = value;\n }\n\n result = result[next];\n }\n\n return result;\n };\n\n request.getOptions = (key?: string) => {\n if (!key) {\n return opts;\n }\n\n let result = opts;\n let parsed = key.split(\".\");\n let next;\n\n while (parsed.length) {\n next = parsed.shift() as string;\n\n let nextIsArray = next.indexOf(\"[\") > -1;\n if (nextIsArray) {\n let idx = next.replace(/\\D/gi, \"\");\n next = next.split(\"[\")[0];\n parsed.unshift(idx);\n }\n\n if (parsed.length > 0 && typeof result[next] !== \"object\") {\n return null;\n }\n\n if (parsed.length === 0) {\n return result[next];\n }\n\n result = result[next];\n }\n };\n\n opts.allowedMethods.forEach(\n (method) =>\n (request[method] = (url: string, data?: Record<string, any>, options?: Record<string, any>) =>\n request(method, url, data, options))\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AAqDzB,SAAS,UAAU,KAA0B,SAAiB,IAAY;AACxE,SAAO,OAAO,KAAK,GAAG,EACnB,IAAI,CAAC,SAAiB;AACrB,QAAI,IAAI,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM;AACxC,WAAO,OAAO,IAAI,IAAI,MAAM,WACxB,UAAU,IAAI,IAAI,GAAG,CAAC,IACtB,GAAG,mBAAmB,CAAC,CAAC,IAAI,mBAAmB,IAAI,IAAI,CAAC,CAAC;AAAA,EAC/D,CAAC,EACA,KAAK,GAAG;AACb;AAEA,SAAS,SAAS,KAAa,SAAiC;AAC9D,MAAI,IAAI,YAAY,KAAK,GAAG,IAAI,MAAM,QAAQ,KAAK,OAAO;AAE1D,MAAI,QAAQ,EAAE,MAAM,GAAG;AACvB,MAAI,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,OAAO,EAAE,EAAE,KAAK;AAElE,MAAI,MAAM,CAAC,GAAG;AACZ,SAAK,IAAI,MAAM,CAAC,CAAC;AAAA,EACnB;AAEA,MAAI,4BAAY,OAAO,QAAQ,KAAK,SAAS,UAAU;AACrD,YAAQ,KAAK,OAAO,QAAQ,KAAK;AAEjC,QAAI,OAAO,QAAQ,KAAK,QAAQ,UAAU;AACxC,cAAQ,KAAK,MAAM,QAAQ,KAAK,IAAI,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC9D,UAAI,EAAE,QAAQ,QAAQ,KAAK,KAAK,QAAQ,KAAK,IAAI;AAAA,IACnD;AAEA,QAAI,CAAC,YAAY,KAAK,CAAC,GAAG;AACxB,UAAI,QAAQ,KAAK,OAAO;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,iBAAiC,EAAE,gBAAgB,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS,EAAE;AAGtH,SAAS,UAAU,UAAU,IAAI,UAA0B,gBAAgB;AACzE,MAAI,MAAM,QAAQ,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC5C,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,OAAO;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,gBAAgB;AAC3B,YAAQ,iBAAiB,eAAe;AAAA,EAC1C;AAEA,MAAI,OAA+B;AAAA,IACjC,GAAI;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM,QAAQ,KAAK,QAAQ;AAAA,MAC3B,KAAK,QAAQ,KAAK,OAAO;AAAA,MACzB,MAAM,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,MAAM;AAAA,IACtD;AAAA,EACF;AAEA,QAAMA,WAAU,eAAeA,SAAQ,QAAgBC,MAAa,MAA4BC,WAAU,CAAC,GAAG;AAC5G,QAAI,eAA4B;AAAA,MAC9B,QAAQ,OAAO,YAAY;AAAA,MAC3B,SAAS,CAAC;AAAA,MACV,yBAAyB;AAAA,MACzB,GAAG;AAAA,MACH,GAAGA;AAAA,IACL;AAEA,QAAI,CAAC,aAAa,QAAQ,QAAQ;AAChC,mBAAa,QAAQ,SAAS;AAAA,IAChC;AAEA,QAAI,aAAa,aAAa,QAAQ;AACtC,QAAI,cAAc,aAAa,QAAQ,cAAc,KAAK,aAAa,QAAQ,cAAc,KAAK;AAElG,QAAI,aAAa,eAAe,QAAQ,MAAM,MAAM,IAAI;AACtD,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,QAAI,MAAM;AACR,UAAI,aAAa,WAAW,SAAS,OAAO,SAAS,UAAU;AAC7D,QAAAD,QAAO,IAAI,UAAU,IAAI,CAAC;AAAA,MAC5B;AAEA,UAAI,aAAa,WAAW,OAAO;AACjC,YAAI,SAAS,KAAK,WAAW,GAAG;AAC9B,uBAAa,OAAO,KAAK,UAAU,IAAI;AAAA,QACzC,OAAO;AACL,cAAI;AACJ,cAAI,gBAAgB,UAAU;AAC5B,uBAAW;AAAA,UACb,OAAO;AACL,uBAAW,IAAI,SAAS;AACxB,qBAAS,KAAK,MAAM;AAClB,uBAAS,OAAO,GAAG,KAAK,CAAC,CAAC;AAAA,YAC5B;AAAA,UACF;AACA,uBAAa,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,MAAM,MAAM,SAASA,MAAK,IAAI,GAAG,YAAY;AAC5D,QAAI,OAAO;AACX,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,MAAM,IAAI,MAAM,SAAS,UAAU;AACvC,UAAI,WAAW;AACf,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,YAAI,OAAO,MAAM,SAAS,KAAK;AAAA,MACjC;AAEA,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,YAAI;AACF,cAAI,OAAO,MAAM,SAAS,KAAK;AAAA,QACjC,SAAS,OAAO;AAAA,QAEhB;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAEA,QAAI,aAAa,yBAAyB;AACxC,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,aAAO,MAAM,SAAS,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,UAAI;AACF,eAAO,MAAM,SAAS,KAAK;AAC3B,eAAO;AAAA,MACT,SAAS,OAAO;AAAA,MAEhB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,EAAAD,SAAQ,MAAM,CAACG,UAAiBD,aAA6B,UAAUC,UAAS,EAAE,GAAG,MAAM,GAAID,YAAW,CAAC,EAAG,CAAC;AAE/G,EAAAF,SAAQ,YAAY,CAAC,KAAa,UAAe;AAC/C,QAAI,SAAS;AAEb,QAAI,SAAS,IAAI,MAAM,GAAG;AAC1B,QAAI;AAEJ,WAAO,OAAO,QAAQ;AACpB,aAAO,OAAO,MAAM;AAEpB,UAAI,cAAc,KAAK,QAAQ,GAAG,IAAI;AACtC,UAAI,aAAa;AACf,YAAI,MAAM,KAAK,QAAQ,QAAQ,EAAE;AACjC,eAAO,KAAK,MAAM,GAAG,EAAE,CAAC;AACxB,eAAO,QAAQ,GAAG;AAAA,MACpB;AAEA,UAAI,OAAO,SAAS,KAAK,OAAO,OAAO,IAAI,MAAM,UAAU;AACzD,eAAO,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC;AAAA,MACrC;AAEA,UAAI,OAAO,WAAW,KAAK,OAAO,UAAU,aAAa;AACvD,eAAO,IAAI,IAAI;AAAA,MACjB;AAEA,eAAS,OAAO,IAAI;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAEA,EAAAA,SAAQ,aAAa,CAAC,QAAiB;AACrC,QAAI,CAAC,KAAK;AACR,aAAO;AAAA,IACT;AAEA,QAAI,SAAS;AACb,QAAI,SAAS,IAAI,MAAM,GAAG;AAC1B,QAAI;AAEJ,WAAO,OAAO,QAAQ;AACpB,aAAO,OAAO,MAAM;AAEpB,UAAI,cAAc,KAAK,QAAQ,GAAG,IAAI;AACtC,UAAI,aAAa;AACf,YAAI,MAAM,KAAK,QAAQ,QAAQ,EAAE;AACjC,eAAO,KAAK,MAAM,GAAG,EAAE,CAAC;AACxB,eAAO,QAAQ,GAAG;AAAA,MACpB;AAEA,UAAI,OAAO,SAAS,KAAK,OAAO,OAAO,IAAI,MAAM,UAAU;AACzD,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,WAAW,GAAG;AACvB,eAAO,OAAO,IAAI;AAAA,MACpB;AAEA,eAAS,OAAO,IAAI;AAAA,IACtB;AAAA,EACF;AAEA,OAAK,eAAe;AAAA,IAClB,CAAC,WACEA,SAAQ,MAAM,IAAI,CAACC,MAAa,MAA4BC,aAC3DF,SAAQ,QAAQC,MAAK,MAAMC,QAAO;AAAA,EACxC;AAEA,SAAOF;AACT;AAEO,IAAM,UAAU,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>, 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>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any>, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any>, 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 return Object.entries(data).reduce((fd, [key, value]) => {\n fd.append(key, value);\n return fd;\n }, new FormData());\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\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>,\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 const isJson = /json/gi.test(contentType);\n\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (innerOptions.method !== \"GET\") {\n innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);\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>, 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
  }
@@ -0,0 +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:()=>c});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 u(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,u(e[s],o).toString()):r.append(o,e[s])}),r}var d={allowedMethods:["get","post","put","patch","delete","head","options"]};var c=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)?new URL(s):new URL(s,t.urls.base)}(t,o)}catch(e){throw new Error(`Failed to parse URL: ${t}`)}if(r){const e=/json/gi.test(i);"GET"===n.method&&"object"==typeof r?d.search=u(r).toString():"GET"!==n.method&&(n.body=e?JSON.stringify(r):function(e){return Object.entries(e).reduce((e,[t,r])=>(e.append(t,r),e),new FormData)}(r))}const c=await fetch(d.toString(),n);let p=null;if(!c.ok){const e=new Error(`${c.status}: ${c.statusText}`);if(e.response=c,/text/gi.test(a)&&(e.body=await c.text()),/json/gi.test(a))try{e.body=await c.json()}catch(t){e.body=null,console.warn("Failed to parse JSON response:",t)}throw e}if(n.resolveWithFullResponse)return c;if(/text/gi.test(a))p=await c.text();else if(/json/gi.test(a))try{p=await c.json()}catch(e){console.warn("Failed to parse JSON response:",e),p=null}else p=/blob/gi.test(a)?await c.blob():/arraybuffer/gi.test(a)?await c.arrayBuffer():c;return p||c};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
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1ZXN0X2V4cG9ydHMiLCJfX2V4cG9ydCIsInJlcXVlc3QiLCJfX0VYUE9SVFNfXyIsImltcG9ydF92YWx5cmlhbiIsInJlcXVpcmUiLCJpbXBvcnRfdXRpbHMiLCJzZXJpYWxpemUiLCJvYmoiLCJwcmVmaXgiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3AiLCJrZXkiLCJhcHBlbmQiLCJ0b1N0cmluZyIsImRlZmF1bHRPcHRpb25zIiwiYWxsb3dlZE1ldGhvZHMiLCJSZXF1ZXN0ZXIiLCJiYXNlVXJsIiwib3B0aW9ucyIsInVybCIsInJlcGxhY2UiLCJ0cmltIiwidXJscyIsImJhc2UiLCJub2RlIiwiYXBpIiwib3B0cyIsImFzeW5jIiwibWV0aG9kIiwiZGF0YSIsImlubmVyT3B0aW9ucyIsInRvVXBwZXJDYXNlIiwiaGVhZGVycyIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwiQWNjZXB0IiwiYWNjZXB0VHlwZSIsImNvbnRlbnRUeXBlIiwiaW5jbHVkZXMiLCJFcnJvciIsImpvaW4iLCJmaW5hbFVybCIsInVybFdpdGhvdXRTbGFzaCIsInUiLCJ0ZXN0IiwiaXNOb2RlSnMiLCJVUkwiLCJwYXJzZVVybCIsImVycm9yIiwiaXNKc29uIiwic2VhcmNoIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbnRyaWVzIiwicmVkdWNlIiwiZmQiLCJ2YWx1ZSIsIkZvcm1EYXRhIiwic2VyaWFsaXplRm9ybURhdGEiLCJyZXNwb25zZSIsImZldGNoIiwib2siLCJlcnIiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidGV4dCIsImpzb24iLCJjb25zb2xlIiwid2FybiIsImJsb2IiLCJhcnJheUJ1ZmZlciIsIm5ldyIsInNldE9wdGlvbiIsInNldCIsImdldE9wdGlvbnMiLCJnZXQiLCJhc3NpZ24iLCJhY2MiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcmVxdWVzdC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGVKcyB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZ2V0LCBzZXQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxuaW50ZXJmYWNlIFVybE9wdGlvbnMge1xuICBiYXNlOiBzdHJpbmc7IC8vIFVzZWQgdG8gcHJlZml4IHRoZSB1cmwgZm9yIHNjb3BlZCByZXF1ZXN0cy5cbiAgbm9kZTogc3RyaW5nIHwgbnVsbDsgLy8gVXNlZCB0byByZWRpcmVjdCBsb2NhbCByZXF1ZXN0cyB0byBub2RlIHNlcnZlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nLlxuICBhcGk6IHN0cmluZyB8IG51bGw7IC8vIFVzZWQgdG8gcmVkaXJlY3QgYXBpIHJlcXVlc3RzIHRvIG5vZGUgc2VydmVyIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuXG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIGFsbG93ZWRNZXRob2RzPzogc3RyaW5nW107XG4gIHVybHM/OiBVcmxPcHRpb25zO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMge1xuICB1cmxzOiBVcmxPcHRpb25zO1xuICBhbGxvd2VkTWV0aG9kczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBTZW5kT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zV2l0aFVybHMsIFJlcXVlc3RJbml0IHtcbiAgYWxsb3dlZE1ldGhvZHM6IHN0cmluZ1tdO1xuICBtZXRob2Q6IHN0cmluZztcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmZhY2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBQYXJ0aWFsPFNlbmRPcHRpb25zPik6IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgbmV3OiAoYmFzZVVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFJlcXVlc3RJbnRlcmZhY2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBzZXRPcHRpb25zOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBnZXRPcHRpb25zOiAoa2V5Pzogc3RyaW5nKSA9PiBSZXF1ZXN0T3B0aW9ucyB8IHZvaWQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBnZXQ6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHB1dDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcGF0Y2g6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGRlbGV0ZTogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaGVhZDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgb3B0aW9uczogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbi8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuIG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLlxuZnVuY3Rpb24gc2VyaWFsaXplKG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZml4OiBzdHJpbmcgPSBcIlwiKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fVske3Byb3B9XWAgOiBwcm9wO1xuICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBwYXJhbXMuYXBwZW5kKGtleSwgc2VyaWFsaXplKG9ialtwcm9wXSwga2V5KS50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXksIG9ialtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVGb3JtRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogRm9ybURhdGEge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChmZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgZmQuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBmZDtcbiAgfSwgbmV3IEZvcm1EYXRhKCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdE9wdGlvbnNXaXRoVXJscykge1xuICBjb25zdCB1cmxXaXRob3V0U2xhc2ggPSB1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS50cmltKCk7XG4gIGNvbnN0IHUgPSAvXmh0dHBzPy9naS50ZXN0KHVybFdpdGhvdXRTbGFzaCkgPyB1cmxXaXRob3V0U2xhc2ggOiBgJHtvcHRpb25zLnVybHMuYmFzZX0ke3VybFdpdGhvdXRTbGFzaH1gO1xuXG4gIGlmIChpc05vZGVKcyAmJiB0eXBlb2Ygb3B0aW9ucy51cmxzLm5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJscy5hcGkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHUucmVwbGFjZShvcHRpb25zLnVybHMuYXBpLCBvcHRpb25zLnVybHMubm9kZSkpO1xuICAgIH1cblxuICAgIGlmICghL15odHRwcz8vZ2kudGVzdCh1KSkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodSwgb3B0aW9ucy51cmxzLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICgvXmh0dHBzPy9naS50ZXN0KHUpKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTCh1LCBvcHRpb25zLnVybHMuYmFzZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgYWxsb3dlZE1ldGhvZHM6IFtcImdldFwiLCBcInBvc3RcIiwgXCJwdXRcIiwgXCJwYXRjaFwiLCBcImRlbGV0ZVwiLCBcImhlYWRcIiwgXCJvcHRpb25zXCJdIH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG5mdW5jdGlvbiBSZXF1ZXN0ZXIoYmFzZVVybCA9IFwiXCIsIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpIHtcbiAgY29uc3QgdXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXC8kL2dpLCBcIlwiKS50cmltKCk7XG4gIGlmICghb3B0aW9ucy51cmxzKSB7XG4gICAgb3B0aW9ucy51cmxzID0ge1xuICAgICAgYmFzZTogXCJcIixcbiAgICAgIG5vZGU6IG51bGwsXG4gICAgICBhcGk6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmFsbG93ZWRNZXRob2RzKSB7XG4gICAgb3B0aW9ucy5hbGxvd2VkTWV0aG9kcyA9IGRlZmF1bHRPcHRpb25zLmFsbG93ZWRNZXRob2RzO1xuICB9XG5cbiAgY29uc3Qgb3B0czogUmVxdWVzdE9wdGlvbnNXaXRoVXJscyA9IHtcbiAgICAuLi4ob3B0aW9ucyBhcyBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzKSxcbiAgICB1cmxzOiB7XG4gICAgICBub2RlOiBvcHRpb25zLnVybHMubm9kZSB8fCBudWxsLFxuICAgICAgYXBpOiBvcHRpb25zLnVybHMuYXBpIHx8IG51bGwsXG4gICAgICBiYXNlOiBvcHRpb25zLnVybHMuYmFzZSA/IG9wdGlvbnMudXJscy5iYXNlICsgdXJsIDogdXJsXG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0IHJlcXVlc3QgPSBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuICApIHtcbiAgICBjb25zdCBpbm5lck9wdGlvbnM6IFNlbmRPcHRpb25zID0ge1xuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IGZhbHNlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9IGFzIFNlbmRPcHRpb25zO1xuXG4gICAgaW5uZXJPcHRpb25zLmhlYWRlcnMgPSB7IC4uLmlubmVyT3B0aW9ucy5oZWFkZXJzLCAuLi5vcHRzLmhlYWRlcnMsIC4uLm9wdGlvbnMuaGVhZGVycyB9O1xuXG4gICAgaWYgKCFpbm5lck9wdGlvbnMuaGVhZGVycy5BY2NlcHQpIHtcbiAgICAgIGlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY2VwdFR5cGUgPSBpbm5lck9wdGlvbnMuaGVhZGVycy5BY2NlcHQ7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBpbm5lck9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSB8fCBpbm5lck9wdGlvbnMuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBcIlwiO1xuXG4gICAgaWYgKCFpbm5lck9wdGlvbnMuYWxsb3dlZE1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJHttZXRob2R9IG5vdCBhbGxvd2VkLiBBbGxvd2VkIG1ldGhvZHM6ICR7aW5uZXJPcHRpb25zLmFsbG93ZWRNZXRob2RzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZmluYWxVcmw6IFVSTDtcbiAgICB0cnkge1xuICAgICAgZmluYWxVcmwgPSBwYXJzZVVybCh1cmwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBVUkw6ICR7dXJsfWApO1xuICAgIH1cblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBjb25zdCBpc0pzb24gPSAvanNvbi9naS50ZXN0KGNvbnRlbnRUeXBlKTtcblxuICAgICAgaWYgKGlubmVyT3B0aW9ucy5tZXRob2QgPT09IFwiR0VUXCIgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZmluYWxVcmwuc2VhcmNoID0gc2VyaWFsaXplKGRhdGEpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGlubmVyT3B0aW9ucy5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaW5uZXJPcHRpb25zLmJvZHkgPSBpc0pzb24gPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IHNlcmlhbGl6ZUZvcm1EYXRhKGRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmluYWxVcmwudG9TdHJpbmcoKSwgaW5uZXJPcHRpb25zKTtcbiAgICBsZXQgYm9keSA9IG51bGw7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGAke3Jlc3BvbnNlLnN0YXR1c306ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKSBhcyBFcnJvciAmIHsgcmVzcG9uc2U/OiBhbnk7IGJvZHk/OiBhbnkgfTtcbiAgICAgIGVyci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgaWYgKC90ZXh0L2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgICAgZXJyLmJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgvanNvbi9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXJyLmJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyLmJvZHkgPSBudWxsO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2U6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgaWYgKGlubmVyT3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmICgvdGV4dC9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIH0gZWxzZSBpZiAoL2pzb24vZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlOlwiLCBlcnJvcik7XG4gICAgICAgIGJvZHkgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL2Jsb2IvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9IGVsc2UgaWYgKC9hcnJheWJ1ZmZlci9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICBib2R5ID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keSA9IHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5IHx8IHJlc3BvbnNlO1xuICB9IGFzIHVua25vd24gYXMgUmVxdWVzdEludGVyZmFjZTtcblxuICByZXF1ZXN0Lm5ldyA9IChiYXNlVXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUmVxdWVzdGVyKGJhc2VVcmwsIHsgLi4ub3B0cywgLi4uKG9wdGlvbnMgfHwge30pIH0pO1xuXG4gIHJlcXVlc3Quc2V0T3B0aW9uID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgc2V0KG9wdHMsIGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIHJlcXVlc3QuZ2V0T3B0aW9ucyA9IChrZXk/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoa2V5KSB7XG4gICAgICByZXR1cm4gZ2V0KG9wdHMsIGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihcbiAgICByZXF1ZXN0LFxuICAgIG9wdHMuYWxsb3dlZE1ldGhvZHMucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIGFueT4sIG1ldGhvZCkgPT4ge1xuICAgICAgYWNjW21ldGhvZF0gPSAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT5cbiAgICAgICAgcmVxdWVzdChtZXRob2QsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KVxuICApO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufVxu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
@@ -1,33 +1,43 @@
1
1
  // lib/request/index.ts
2
2
  import { isNodeJs } from "valyrian.js";
3
+ import { get, set } from "valyrian.js/utils";
3
4
  function serialize(obj, prefix = "") {
4
- return Object.keys(obj).map((prop) => {
5
- let k = prefix ? `${prefix}[${prop}]` : prop;
6
- return typeof obj[prop] === "object" ? serialize(obj[prop], k) : `${encodeURIComponent(k)}=${encodeURIComponent(obj[prop])}`;
7
- }).join("&");
5
+ const params = new URLSearchParams();
6
+ Object.keys(obj).forEach((prop) => {
7
+ const key = prefix ? `${prefix}[${prop}]` : prop;
8
+ if (typeof obj[prop] === "object") {
9
+ params.append(key, serialize(obj[prop], key).toString());
10
+ } else {
11
+ params.append(key, obj[prop]);
12
+ }
13
+ });
14
+ return params;
15
+ }
16
+ function serializeFormData(data) {
17
+ return Object.entries(data).reduce((fd, [key, value]) => {
18
+ fd.append(key, value);
19
+ return fd;
20
+ }, new FormData());
8
21
  }
9
22
  function parseUrl(url, options) {
10
- let u = /^https?/gi.test(url) ? url : options.urls.base + url;
11
- let parts = u.split("?");
12
- u = parts[0].trim().replace(/^\/\//, "/").replace(/\/$/, "").trim();
13
- if (parts[1]) {
14
- u += `?${parts[1]}`;
15
- }
23
+ const urlWithoutSlash = url.replace(/\/+$/, "").trim();
24
+ const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;
16
25
  if (isNodeJs && typeof options.urls.node === "string") {
17
- options.urls.node = options.urls.node;
18
26
  if (typeof options.urls.api === "string") {
19
- options.urls.api = options.urls.api.replace(/\/$/gi, "").trim();
20
- u = u.replace(options.urls.api, options.urls.node);
27
+ return new URL(u.replace(options.urls.api, options.urls.node));
21
28
  }
22
29
  if (!/^https?/gi.test(u)) {
23
- u = options.urls.node + u;
30
+ return new URL(u, options.urls.node);
24
31
  }
25
32
  }
26
- return u;
33
+ if (/^https?/gi.test(u)) {
34
+ return new URL(u);
35
+ }
36
+ return new URL(u, options.urls.base);
27
37
  }
28
38
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
29
39
  function Requester(baseUrl = "", options = defaultOptions) {
30
- let url = baseUrl.replace(/\/$/gi, "").trim();
40
+ const url = baseUrl.replace(/\/$/gi, "").trim();
31
41
  if (!options.urls) {
32
42
  options.urls = {
33
43
  base: "",
@@ -38,7 +48,7 @@ function Requester(baseUrl = "", options = defaultOptions) {
38
48
  if (!options.allowedMethods) {
39
49
  options.allowedMethods = defaultOptions.allowedMethods;
40
50
  }
41
- let opts = {
51
+ const opts = {
42
52
  ...options,
43
53
  urls: {
44
54
  node: options.urls.node || null,
@@ -47,46 +57,40 @@ function Requester(baseUrl = "", options = defaultOptions) {
47
57
  }
48
58
  };
49
59
  const request2 = async function request3(method, url2, data, options2 = {}) {
50
- let innerOptions = {
60
+ const innerOptions = {
51
61
  method: method.toUpperCase(),
52
62
  headers: {},
53
63
  resolveWithFullResponse: false,
54
64
  ...opts,
55
65
  ...options2
56
66
  };
67
+ innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options2.headers };
57
68
  if (!innerOptions.headers.Accept) {
58
69
  innerOptions.headers.Accept = "application/json";
59
70
  }
60
- let acceptType = innerOptions.headers.Accept;
61
- let contentType = innerOptions.headers["Content-Type"] || innerOptions.headers["content-type"] || "";
62
- if (innerOptions.allowedMethods.indexOf(method) === -1) {
63
- throw new Error("Method not allowed");
71
+ const acceptType = innerOptions.headers.Accept;
72
+ const contentType = innerOptions.headers["Content-Type"] || innerOptions.headers["content-type"] || "";
73
+ if (!innerOptions.allowedMethods.includes(method)) {
74
+ throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(", ")}`);
75
+ }
76
+ let finalUrl;
77
+ try {
78
+ finalUrl = parseUrl(url2, opts);
79
+ } catch (error) {
80
+ throw new Error(`Failed to parse URL: ${url2}`);
64
81
  }
65
82
  if (data) {
83
+ const isJson = /json/gi.test(contentType);
66
84
  if (innerOptions.method === "GET" && typeof data === "object") {
67
- url2 += `?${serialize(data)}`;
68
- }
69
- if (innerOptions.method !== "GET") {
70
- if (/json/gi.test(contentType)) {
71
- innerOptions.body = JSON.stringify(data);
72
- } else {
73
- let formData;
74
- if (data instanceof FormData) {
75
- formData = data;
76
- } else {
77
- formData = new FormData();
78
- for (let i in data) {
79
- formData.append(i, data[i]);
80
- }
81
- }
82
- innerOptions.body = formData;
83
- }
85
+ finalUrl.search = serialize(data).toString();
86
+ } else if (innerOptions.method !== "GET") {
87
+ innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);
84
88
  }
85
89
  }
86
- let response = await fetch(parseUrl(url2, opts), innerOptions);
90
+ const response = await fetch(finalUrl.toString(), innerOptions);
87
91
  let body = null;
88
92
  if (!response.ok) {
89
- let err = new Error(response.statusText);
93
+ const err = new Error(`${response.status}: ${response.statusText}`);
90
94
  err.response = response;
91
95
  if (/text/gi.test(acceptType)) {
92
96
  err.body = await response.text();
@@ -95,6 +99,8 @@ function Requester(baseUrl = "", options = defaultOptions) {
95
99
  try {
96
100
  err.body = await response.json();
97
101
  } catch (error) {
102
+ err.body = null;
103
+ console.warn("Failed to parse JSON response:", error);
98
104
  }
99
105
  }
100
106
  throw err;
@@ -104,66 +110,39 @@ function Requester(baseUrl = "", options = defaultOptions) {
104
110
  }
105
111
  if (/text/gi.test(acceptType)) {
106
112
  body = await response.text();
107
- return body;
108
- }
109
- if (/json/gi.test(acceptType)) {
113
+ } else if (/json/gi.test(acceptType)) {
110
114
  try {
111
115
  body = await response.json();
112
- return body;
113
116
  } catch (error) {
117
+ console.warn("Failed to parse JSON response:", error);
118
+ body = null;
114
119
  }
120
+ } else if (/blob/gi.test(acceptType)) {
121
+ body = await response.blob();
122
+ } else if (/arraybuffer/gi.test(acceptType)) {
123
+ body = await response.arrayBuffer();
124
+ } else {
125
+ body = response;
115
126
  }
116
- return response;
127
+ return body || response;
117
128
  };
118
129
  request2.new = (baseUrl2, options2) => Requester(baseUrl2, { ...opts, ...options2 || {} });
119
130
  request2.setOption = (key, value) => {
120
- let result = opts;
121
- let parsed = key.split(".");
122
- let next;
123
- while (parsed.length) {
124
- next = parsed.shift();
125
- let nextIsArray = next.indexOf("[") > -1;
126
- if (nextIsArray) {
127
- let idx = next.replace(/\D/gi, "");
128
- next = next.split("[")[0];
129
- parsed.unshift(idx);
130
- }
131
- if (parsed.length > 0 && typeof result[next] !== "object") {
132
- result[next] = nextIsArray ? [] : {};
133
- }
134
- if (parsed.length === 0 && typeof value !== "undefined") {
135
- result[next] = value;
136
- }
137
- result = result[next];
138
- }
139
- return result;
131
+ set(opts, key, value);
132
+ return opts;
140
133
  };
141
134
  request2.getOptions = (key) => {
142
- if (!key) {
143
- return opts;
144
- }
145
- let result = opts;
146
- let parsed = key.split(".");
147
- let next;
148
- while (parsed.length) {
149
- next = parsed.shift();
150
- let nextIsArray = next.indexOf("[") > -1;
151
- if (nextIsArray) {
152
- let idx = next.replace(/\D/gi, "");
153
- next = next.split("[")[0];
154
- parsed.unshift(idx);
155
- }
156
- if (parsed.length > 0 && typeof result[next] !== "object") {
157
- return null;
158
- }
159
- if (parsed.length === 0) {
160
- return result[next];
161
- }
162
- result = result[next];
135
+ if (key) {
136
+ return get(opts, key);
163
137
  }
138
+ return opts;
164
139
  };
165
- opts.allowedMethods.forEach(
166
- (method) => request2[method] = (url2, data, options2) => request2(method, url2, data, options2)
140
+ Object.assign(
141
+ request2,
142
+ opts.allowedMethods.reduce((acc, method) => {
143
+ acc[method] = (url2, data, options2) => request2(method, url2, data, options2);
144
+ return acc;
145
+ }, {})
167
146
  );
168
147
  return request2;
169
148
  }