@stigg/typescript 0.1.0-alpha.4 → 0.1.0-alpha.8

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 (276) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +9 -0
  3. package/client.d.mts +4 -6
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +4 -6
  6. package/client.d.ts.map +1 -1
  7. package/client.js +23 -21
  8. package/client.js.map +1 -1
  9. package/client.mjs +23 -21
  10. package/client.mjs.map +1 -1
  11. package/internal/parse.d.mts.map +1 -1
  12. package/internal/parse.d.ts.map +1 -1
  13. package/internal/parse.js +5 -0
  14. package/internal/parse.js.map +1 -1
  15. package/internal/parse.mjs +5 -0
  16. package/internal/parse.mjs.map +1 -1
  17. package/internal/qs/formats.d.mts +7 -0
  18. package/internal/qs/formats.d.mts.map +1 -0
  19. package/internal/qs/formats.d.ts +7 -0
  20. package/internal/qs/formats.d.ts.map +1 -0
  21. package/internal/qs/formats.js +13 -0
  22. package/internal/qs/formats.js.map +1 -0
  23. package/internal/qs/formats.mjs +9 -0
  24. package/internal/qs/formats.mjs.map +1 -0
  25. package/internal/qs/index.d.mts +10 -0
  26. package/internal/qs/index.d.mts.map +1 -0
  27. package/internal/qs/index.d.ts +10 -0
  28. package/internal/qs/index.d.ts.map +1 -0
  29. package/internal/qs/index.js +14 -0
  30. package/internal/qs/index.js.map +1 -0
  31. package/internal/qs/index.mjs +10 -0
  32. package/internal/qs/index.mjs.map +1 -0
  33. package/internal/qs/stringify.d.mts +3 -0
  34. package/internal/qs/stringify.d.mts.map +1 -0
  35. package/internal/qs/stringify.d.ts +3 -0
  36. package/internal/qs/stringify.d.ts.map +1 -0
  37. package/internal/qs/stringify.js +277 -0
  38. package/internal/qs/stringify.js.map +1 -0
  39. package/internal/qs/stringify.mjs +274 -0
  40. package/internal/qs/stringify.mjs.map +1 -0
  41. package/internal/qs/types.d.mts +57 -0
  42. package/internal/qs/types.d.mts.map +1 -0
  43. package/internal/qs/types.d.ts +57 -0
  44. package/internal/qs/types.d.ts.map +1 -0
  45. package/internal/qs/types.js +3 -0
  46. package/internal/qs/types.js.map +1 -0
  47. package/internal/qs/types.mjs +2 -0
  48. package/internal/qs/types.mjs.map +1 -0
  49. package/internal/qs/utils.d.mts +15 -0
  50. package/internal/qs/utils.d.mts.map +1 -0
  51. package/internal/qs/utils.d.ts +15 -0
  52. package/internal/qs/utils.d.ts.map +1 -0
  53. package/internal/qs/utils.js +230 -0
  54. package/internal/qs/utils.js.map +1 -0
  55. package/internal/qs/utils.mjs +217 -0
  56. package/internal/qs/utils.mjs.map +1 -0
  57. package/package.json +1 -1
  58. package/resources/v1/coupons.d.mts +74 -8
  59. package/resources/v1/coupons.d.mts.map +1 -1
  60. package/resources/v1/coupons.d.ts +74 -8
  61. package/resources/v1/coupons.d.ts.map +1 -1
  62. package/resources/v1/coupons.js +16 -3
  63. package/resources/v1/coupons.js.map +1 -1
  64. package/resources/v1/coupons.mjs +16 -3
  65. package/resources/v1/coupons.mjs.map +1 -1
  66. package/resources/v1/customers/customers.d.mts +74 -10
  67. package/resources/v1/customers/customers.d.mts.map +1 -1
  68. package/resources/v1/customers/customers.d.ts +74 -10
  69. package/resources/v1/customers/customers.d.ts.map +1 -1
  70. package/resources/v1/customers/customers.js +18 -7
  71. package/resources/v1/customers/customers.js.map +1 -1
  72. package/resources/v1/customers/customers.mjs +18 -7
  73. package/resources/v1/customers/customers.mjs.map +1 -1
  74. package/resources/v1/customers/index.d.mts +2 -2
  75. package/resources/v1/customers/index.d.mts.map +1 -1
  76. package/resources/v1/customers/index.d.ts +2 -2
  77. package/resources/v1/customers/index.d.ts.map +1 -1
  78. package/resources/v1/customers/index.js.map +1 -1
  79. package/resources/v1/customers/index.mjs.map +1 -1
  80. package/resources/v1/customers/payment-method.d.mts +4 -2
  81. package/resources/v1/customers/payment-method.d.mts.map +1 -1
  82. package/resources/v1/customers/payment-method.d.ts +4 -2
  83. package/resources/v1/customers/payment-method.d.ts.map +1 -1
  84. package/resources/v1/customers/payment-method.js +4 -2
  85. package/resources/v1/customers/payment-method.js.map +1 -1
  86. package/resources/v1/customers/payment-method.mjs +4 -2
  87. package/resources/v1/customers/payment-method.mjs.map +1 -1
  88. package/resources/v1/customers/promotional-entitlements.d.mts +159 -11
  89. package/resources/v1/customers/promotional-entitlements.d.mts.map +1 -1
  90. package/resources/v1/customers/promotional-entitlements.d.ts +159 -11
  91. package/resources/v1/customers/promotional-entitlements.d.ts.map +1 -1
  92. package/resources/v1/customers/promotional-entitlements.js +15 -6
  93. package/resources/v1/customers/promotional-entitlements.js.map +1 -1
  94. package/resources/v1/customers/promotional-entitlements.mjs +15 -6
  95. package/resources/v1/customers/promotional-entitlements.mjs.map +1 -1
  96. package/resources/v1/events/addons/addons.d.mts +605 -0
  97. package/resources/v1/events/addons/addons.d.mts.map +1 -0
  98. package/resources/v1/events/addons/addons.d.ts +605 -0
  99. package/resources/v1/events/addons/addons.d.ts.map +1 -0
  100. package/resources/v1/events/addons/addons.js +60 -0
  101. package/resources/v1/events/addons/addons.js.map +1 -0
  102. package/resources/v1/events/addons/addons.mjs +55 -0
  103. package/resources/v1/events/addons/addons.mjs.map +1 -0
  104. package/resources/v1/events/addons/draft.d.mts +121 -0
  105. package/resources/v1/events/addons/draft.d.mts.map +1 -0
  106. package/resources/v1/events/addons/draft.d.ts +121 -0
  107. package/resources/v1/events/addons/draft.d.ts.map +1 -0
  108. package/resources/v1/events/addons/draft.js +22 -0
  109. package/resources/v1/events/addons/draft.js.map +1 -0
  110. package/resources/v1/events/addons/draft.mjs +18 -0
  111. package/resources/v1/events/addons/draft.mjs.map +1 -0
  112. package/resources/v1/events/addons/index.d.mts +3 -0
  113. package/resources/v1/events/addons/index.d.mts.map +1 -0
  114. package/resources/v1/events/addons/index.d.ts +3 -0
  115. package/resources/v1/events/addons/index.d.ts.map +1 -0
  116. package/resources/v1/events/addons/index.js +9 -0
  117. package/resources/v1/events/addons/index.js.map +1 -0
  118. package/resources/v1/events/addons/index.mjs +4 -0
  119. package/resources/v1/events/addons/index.mjs.map +1 -0
  120. package/resources/v1/events/addons.d.mts +2 -0
  121. package/resources/v1/events/addons.d.mts.map +1 -0
  122. package/resources/v1/events/addons.d.ts +2 -0
  123. package/resources/v1/events/addons.d.ts.map +1 -0
  124. package/resources/v1/events/addons.js +6 -0
  125. package/resources/v1/events/addons.js.map +1 -0
  126. package/resources/v1/events/addons.mjs +3 -0
  127. package/resources/v1/events/addons.mjs.map +1 -0
  128. package/resources/v1/events/events.d.mts +75 -0
  129. package/resources/v1/events/events.d.mts.map +1 -0
  130. package/resources/v1/events/events.d.ts +75 -0
  131. package/resources/v1/events/events.d.ts.map +1 -0
  132. package/resources/v1/events/events.js +32 -0
  133. package/resources/v1/events/events.js.map +1 -0
  134. package/resources/v1/events/events.mjs +27 -0
  135. package/resources/v1/events/events.mjs.map +1 -0
  136. package/resources/v1/events/features.d.mts +856 -0
  137. package/resources/v1/events/features.d.mts.map +1 -0
  138. package/resources/v1/events/features.d.ts +856 -0
  139. package/resources/v1/events/features.d.ts.map +1 -0
  140. package/resources/v1/events/features.js +51 -0
  141. package/resources/v1/events/features.js.map +1 -0
  142. package/resources/v1/events/features.mjs +47 -0
  143. package/resources/v1/events/features.mjs.map +1 -0
  144. package/resources/v1/events/index.d.mts +5 -0
  145. package/resources/v1/events/index.d.mts.map +1 -0
  146. package/resources/v1/events/index.d.ts +5 -0
  147. package/resources/v1/events/index.d.ts.map +1 -0
  148. package/resources/v1/events/index.js +13 -0
  149. package/resources/v1/events/index.js.map +1 -0
  150. package/resources/v1/events/index.mjs +6 -0
  151. package/resources/v1/events/index.mjs.map +1 -0
  152. package/resources/v1/events/plans.d.mts +348 -0
  153. package/resources/v1/events/plans.d.mts.map +1 -0
  154. package/resources/v1/events/plans.d.ts +348 -0
  155. package/resources/v1/events/plans.d.ts.map +1 -0
  156. package/resources/v1/events/plans.js +30 -0
  157. package/resources/v1/events/plans.js.map +1 -0
  158. package/resources/v1/events/plans.mjs +26 -0
  159. package/resources/v1/events/plans.mjs.map +1 -0
  160. package/resources/v1/events.d.mts +1 -61
  161. package/resources/v1/events.d.mts.map +1 -1
  162. package/resources/v1/events.d.ts +1 -61
  163. package/resources/v1/events.d.ts.map +1 -1
  164. package/resources/v1/events.js +2 -11
  165. package/resources/v1/events.js.map +1 -1
  166. package/resources/v1/events.mjs +1 -9
  167. package/resources/v1/events.mjs.map +1 -1
  168. package/resources/v1/index.d.mts +4 -3
  169. package/resources/v1/index.d.mts.map +1 -1
  170. package/resources/v1/index.d.ts +4 -3
  171. package/resources/v1/index.d.ts.map +1 -1
  172. package/resources/v1/index.js +7 -5
  173. package/resources/v1/index.js.map +1 -1
  174. package/resources/v1/index.mjs +2 -1
  175. package/resources/v1/index.mjs.map +1 -1
  176. package/resources/v1/products.d.mts +672 -0
  177. package/resources/v1/products.d.mts.map +1 -0
  178. package/resources/v1/products.d.ts +672 -0
  179. package/resources/v1/products.d.ts.map +1 -0
  180. package/resources/v1/products.js +52 -0
  181. package/resources/v1/products.js.map +1 -0
  182. package/resources/v1/products.mjs +48 -0
  183. package/resources/v1/products.mjs.map +1 -0
  184. package/resources/v1/subscriptions/future-update.d.mts +3 -2
  185. package/resources/v1/subscriptions/future-update.d.mts.map +1 -1
  186. package/resources/v1/subscriptions/future-update.d.ts +3 -2
  187. package/resources/v1/subscriptions/future-update.d.ts.map +1 -1
  188. package/resources/v1/subscriptions/future-update.js +3 -2
  189. package/resources/v1/subscriptions/future-update.js.map +1 -1
  190. package/resources/v1/subscriptions/future-update.mjs +3 -2
  191. package/resources/v1/subscriptions/future-update.mjs.map +1 -1
  192. package/resources/v1/subscriptions/index.d.mts +2 -0
  193. package/resources/v1/subscriptions/index.d.mts.map +1 -1
  194. package/resources/v1/subscriptions/index.d.ts +2 -0
  195. package/resources/v1/subscriptions/index.d.ts.map +1 -1
  196. package/resources/v1/subscriptions/index.js +5 -1
  197. package/resources/v1/subscriptions/index.js.map +1 -1
  198. package/resources/v1/subscriptions/index.mjs +2 -0
  199. package/resources/v1/subscriptions/index.mjs.map +1 -1
  200. package/resources/v1/subscriptions/invoice.d.mts +34 -0
  201. package/resources/v1/subscriptions/invoice.d.mts.map +1 -0
  202. package/resources/v1/subscriptions/invoice.d.ts +34 -0
  203. package/resources/v1/subscriptions/invoice.d.ts.map +1 -0
  204. package/resources/v1/subscriptions/invoice.js +17 -0
  205. package/resources/v1/subscriptions/invoice.js.map +1 -0
  206. package/resources/v1/subscriptions/invoice.mjs +13 -0
  207. package/resources/v1/subscriptions/invoice.mjs.map +1 -0
  208. package/resources/v1/subscriptions/subscriptions.d.mts +166 -34
  209. package/resources/v1/subscriptions/subscriptions.d.mts.map +1 -1
  210. package/resources/v1/subscriptions/subscriptions.d.ts +166 -34
  211. package/resources/v1/subscriptions/subscriptions.d.ts.map +1 -1
  212. package/resources/v1/subscriptions/subscriptions.js +28 -10
  213. package/resources/v1/subscriptions/subscriptions.js.map +1 -1
  214. package/resources/v1/subscriptions/subscriptions.mjs +28 -10
  215. package/resources/v1/subscriptions/subscriptions.mjs.map +1 -1
  216. package/resources/v1/subscriptions/usage.d.mts +98 -0
  217. package/resources/v1/subscriptions/usage.d.mts.map +1 -0
  218. package/resources/v1/subscriptions/usage.d.ts +98 -0
  219. package/resources/v1/subscriptions/usage.d.ts.map +1 -0
  220. package/resources/v1/subscriptions/usage.js +24 -0
  221. package/resources/v1/subscriptions/usage.js.map +1 -0
  222. package/resources/v1/subscriptions/usage.mjs +20 -0
  223. package/resources/v1/subscriptions/usage.mjs.map +1 -0
  224. package/resources/v1/usage.d.mts +3 -2
  225. package/resources/v1/usage.d.mts.map +1 -1
  226. package/resources/v1/usage.d.ts +3 -2
  227. package/resources/v1/usage.d.ts.map +1 -1
  228. package/resources/v1/usage.js +3 -2
  229. package/resources/v1/usage.js.map +1 -1
  230. package/resources/v1/usage.mjs +3 -2
  231. package/resources/v1/usage.mjs.map +1 -1
  232. package/resources/v1/v1.d.mts +10 -6
  233. package/resources/v1/v1.d.mts.map +1 -1
  234. package/resources/v1/v1.d.ts +10 -6
  235. package/resources/v1/v1.d.ts.map +1 -1
  236. package/resources/v1/v1.js +6 -2
  237. package/resources/v1/v1.js.map +1 -1
  238. package/resources/v1/v1.mjs +6 -2
  239. package/resources/v1/v1.mjs.map +1 -1
  240. package/src/client.ts +31 -26
  241. package/src/internal/parse.ts +6 -0
  242. package/src/internal/qs/LICENSE.md +13 -0
  243. package/src/internal/qs/README.md +3 -0
  244. package/src/internal/qs/formats.ts +10 -0
  245. package/src/internal/qs/index.ts +13 -0
  246. package/src/internal/qs/stringify.ts +385 -0
  247. package/src/internal/qs/types.ts +71 -0
  248. package/src/internal/qs/utils.ts +265 -0
  249. package/src/resources/v1/coupons.ts +89 -9
  250. package/src/resources/v1/customers/customers.ts +107 -12
  251. package/src/resources/v1/customers/index.ts +8 -2
  252. package/src/resources/v1/customers/payment-method.ts +4 -2
  253. package/src/resources/v1/customers/promotional-entitlements.ts +221 -18
  254. package/src/resources/v1/events/addons/addons.ts +761 -0
  255. package/src/resources/v1/events/addons/draft.ts +151 -0
  256. package/src/resources/v1/events/addons/index.ts +17 -0
  257. package/src/resources/v1/events/addons.ts +3 -0
  258. package/src/resources/v1/events/events.ts +160 -0
  259. package/src/resources/v1/events/features.ts +1066 -0
  260. package/src/resources/v1/events/index.ts +39 -0
  261. package/src/resources/v1/events/plans.ts +429 -0
  262. package/src/resources/v1/events.ts +1 -71
  263. package/src/resources/v1/index.ts +19 -1
  264. package/src/resources/v1/products.ts +829 -0
  265. package/src/resources/v1/subscriptions/future-update.ts +3 -2
  266. package/src/resources/v1/subscriptions/index.ts +7 -0
  267. package/src/resources/v1/subscriptions/invoice.ts +42 -0
  268. package/src/resources/v1/subscriptions/subscriptions.ts +235 -36
  269. package/src/resources/v1/subscriptions/usage.ts +126 -0
  270. package/src/resources/v1/usage.ts +3 -2
  271. package/src/resources/v1/v1.ts +42 -2
  272. package/src/version.ts +1 -1
  273. package/version.d.mts +1 -1
  274. package/version.d.ts +1 -1
  275. package/version.js +1 -1
  276. package/version.mjs +1 -1
@@ -6,12 +6,14 @@ const tslib_1 = require("../../internal/tslib.js");
6
6
  const resource_1 = require("../../core/resource.js");
7
7
  const CouponsAPI = tslib_1.__importStar(require("./coupons.js"));
8
8
  const coupons_1 = require("./coupons.js");
9
- const EventsAPI = tslib_1.__importStar(require("./events.js"));
10
- const events_1 = require("./events.js");
9
+ const ProductsAPI = tslib_1.__importStar(require("./products.js"));
10
+ const products_1 = require("./products.js");
11
11
  const UsageAPI = tslib_1.__importStar(require("./usage.js"));
12
12
  const usage_1 = require("./usage.js");
13
13
  const CustomersAPI = tslib_1.__importStar(require("./customers/customers.js"));
14
14
  const customers_1 = require("./customers/customers.js");
15
+ const EventsAPI = tslib_1.__importStar(require("./events/events.js"));
16
+ const events_1 = require("./events/events.js");
15
17
  const SubscriptionsAPI = tslib_1.__importStar(require("./subscriptions/subscriptions.js"));
16
18
  const subscriptions_1 = require("./subscriptions/subscriptions.js");
17
19
  class V1 extends resource_1.APIResource {
@@ -22,6 +24,7 @@ class V1 extends resource_1.APIResource {
22
24
  this.coupons = new CouponsAPI.Coupons(this._client);
23
25
  this.events = new EventsAPI.Events(this._client);
24
26
  this.usage = new UsageAPI.Usage(this._client);
27
+ this.products = new ProductsAPI.Products(this._client);
25
28
  }
26
29
  }
27
30
  exports.V1 = V1;
@@ -30,4 +33,5 @@ V1.Subscriptions = subscriptions_1.Subscriptions;
30
33
  V1.Coupons = coupons_1.Coupons;
31
34
  V1.Events = events_1.Events;
32
35
  V1.Usage = usage_1.Usage;
36
+ V1.Products = products_1.Products;
33
37
  //# sourceMappingURL=v1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../src/resources/v1/v1.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,qDAAkD;AAClD,iEAAwC;AACxC,0CAOmB;AACnB,+DAAsC;AACtC,wCAA0E;AAC1E,6DAAoC;AACpC,sCAMiB;AACjB,+EAAsD;AACtD,wDAU+B;AAC/B,2FAAkE;AAClE,oEAiBuC;AAEvC,MAAa,EAAG,SAAQ,sBAAW;IAAnC;;QACE,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,kBAAa,GAAmC,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;CAAA;AAND,gBAMC;AAED,EAAE,CAAC,SAAS,GAAG,qBAAS,CAAC;AACzB,EAAE,CAAC,aAAa,GAAG,6BAAa,CAAC;AACjC,EAAE,CAAC,OAAO,GAAG,iBAAO,CAAC;AACrB,EAAE,CAAC,MAAM,GAAG,eAAM,CAAC;AACnB,EAAE,CAAC,KAAK,GAAG,aAAK,CAAC"}
1
+ {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../src/resources/v1/v1.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;;AAEtF,qDAAkD;AAClD,iEAAwC;AACxC,0CAQmB;AACnB,mEAA0C;AAC1C,4CAaoB;AACpB,6DAAoC;AACpC,sCAMiB;AACjB,+EAAsD;AACtD,wDAa+B;AAC/B,sEAA6C;AAC7C,+CAAiF;AACjF,2FAAkE;AAClE,oEAiBuC;AAEvC,MAAa,EAAG,SAAQ,sBAAW;IAAnC;;QACE,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,kBAAa,GAAmC,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CAAA;AAPD,gBAOC;AAED,EAAE,CAAC,SAAS,GAAG,qBAAS,CAAC;AACzB,EAAE,CAAC,aAAa,GAAG,6BAAa,CAAC;AACjC,EAAE,CAAC,OAAO,GAAG,iBAAO,CAAC;AACrB,EAAE,CAAC,MAAM,GAAG,eAAM,CAAC;AACnB,EAAE,CAAC,KAAK,GAAG,aAAK,CAAC;AACjB,EAAE,CAAC,QAAQ,GAAG,mBAAQ,CAAC"}
@@ -2,12 +2,14 @@
2
2
  import { APIResource } from "../../core/resource.mjs";
3
3
  import * as CouponsAPI from "./coupons.mjs";
4
4
  import { Coupons, } from "./coupons.mjs";
5
- import * as EventsAPI from "./events.mjs";
6
- import { Events } from "./events.mjs";
5
+ import * as ProductsAPI from "./products.mjs";
6
+ import { Products, } from "./products.mjs";
7
7
  import * as UsageAPI from "./usage.mjs";
8
8
  import { Usage, } from "./usage.mjs";
9
9
  import * as CustomersAPI from "./customers/customers.mjs";
10
10
  import { Customers, } from "./customers/customers.mjs";
11
+ import * as EventsAPI from "./events/events.mjs";
12
+ import { Events } from "./events/events.mjs";
11
13
  import * as SubscriptionsAPI from "./subscriptions/subscriptions.mjs";
12
14
  import { Subscriptions, } from "./subscriptions/subscriptions.mjs";
13
15
  export class V1 extends APIResource {
@@ -18,6 +20,7 @@ export class V1 extends APIResource {
18
20
  this.coupons = new CouponsAPI.Coupons(this._client);
19
21
  this.events = new EventsAPI.Events(this._client);
20
22
  this.usage = new UsageAPI.Usage(this._client);
23
+ this.products = new ProductsAPI.Products(this._client);
21
24
  }
22
25
  }
23
26
  V1.Customers = Customers;
@@ -25,4 +28,5 @@ V1.Subscriptions = Subscriptions;
25
28
  V1.Coupons = Coupons;
26
29
  V1.Events = Events;
27
30
  V1.Usage = Usage;
31
+ V1.Products = Products;
28
32
  //# sourceMappingURL=v1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"v1.mjs","sourceRoot":"","sources":["../../src/resources/v1/v1.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,KAAK,UAAU;OACf,EAML,OAAO,GACR;OACM,KAAK,SAAS;OACd,EAA0C,MAAM,EAAE;OAClD,KAAK,QAAQ;OACb,EACL,KAAK,GAKN;OACM,KAAK,YAAY;OACjB,EASL,SAAS,GACV;OACM,KAAK,gBAAgB;OACrB,EAgBL,aAAa,GACd;AAED,MAAM,OAAO,EAAG,SAAQ,WAAW;IAAnC;;QACE,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,kBAAa,GAAmC,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;CAAA;AAED,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;AACzB,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC;AACjC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AACrB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;AACnB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"v1.mjs","sourceRoot":"","sources":["../../src/resources/v1/v1.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,WAAW,EAAE;OACf,KAAK,UAAU;OACf,EAOL,OAAO,GACR;OACM,KAAK,WAAW;OAChB,EAYL,QAAQ,GACT;OACM,KAAK,QAAQ;OACb,EACL,KAAK,GAKN;OACM,KAAK,YAAY;OACjB,EAYL,SAAS,GACV;OACM,KAAK,SAAS;OACd,EAA0C,MAAM,EAAE;OAClD,KAAK,gBAAgB;OACrB,EAgBL,aAAa,GACd;AAED,MAAM,OAAO,EAAG,SAAQ,WAAW;IAAnC;;QACE,cAAS,GAA2B,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,kBAAa,GAAmC,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjG,YAAO,GAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnE,WAAM,GAAqB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,UAAK,GAAmB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,aAAQ,GAAyB,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CAAA;AAED,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC;AACzB,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC;AACjC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC;AACrB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC;AACnB,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;AACjB,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC"}
package/src/client.ts CHANGED
@@ -11,6 +11,7 @@ import type { APIResponseProps } from './internal/parse';
11
11
  import { getPlatformHeaders } from './internal/detect-platform';
12
12
  import * as Shims from './internal/shims';
13
13
  import * as Opts from './internal/request-options';
14
+ import * as qs from './internal/qs';
14
15
  import { VERSION } from './version';
15
16
  import * as Errors from './core/error';
16
17
  import * as Pagination from './core/pagination';
@@ -129,7 +130,7 @@ export class Stigg {
129
130
  * API Client for interfacing with the Stigg API.
130
131
  *
131
132
  * @param {string | undefined} [opts.apiKey=process.env['STIGG_API_KEY'] ?? undefined]
132
- * @param {string} [opts.baseURL=process.env['STIGG_BASE_URL'] ?? https://api.example.com] - Override the default base URL for the API.
133
+ * @param {string} [opts.baseURL=process.env['STIGG_BASE_URL'] ?? https://api.stigg.io] - Override the default base URL for the API.
133
134
  * @param {number} [opts.timeout=1 minute] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.
134
135
  * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.
135
136
  * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.
@@ -151,7 +152,7 @@ export class Stigg {
151
152
  const options: ClientOptions = {
152
153
  apiKey,
153
154
  ...opts,
154
- baseURL: baseURL || `https://api.example.com`,
155
+ baseURL: baseURL || `https://api.stigg.io`,
155
156
  };
156
157
 
157
158
  this.baseURL = options.baseURL!;
@@ -197,7 +198,7 @@ export class Stigg {
197
198
  * Check whether the base URL is set to its default.
198
199
  */
199
200
  #baseURLOverridden(): boolean {
200
- return this.baseURL !== 'https://api.example.com';
201
+ return this.baseURL !== 'https://api.stigg.io';
201
202
  }
202
203
 
203
204
  protected defaultQuery(): Record<string, string | undefined> | undefined {
@@ -212,24 +213,8 @@ export class Stigg {
212
213
  return buildHeaders([{ 'X-API-KEY': this.apiKey }]);
213
214
  }
214
215
 
215
- /**
216
- * Basic re-implementation of `qs.stringify` for primitive types.
217
- */
218
216
  protected stringifyQuery(query: Record<string, unknown>): string {
219
- return Object.entries(query)
220
- .filter(([_, value]) => typeof value !== 'undefined')
221
- .map(([key, value]) => {
222
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
223
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
224
- }
225
- if (value === null) {
226
- return `${encodeURIComponent(key)}=`;
227
- }
228
- throw new Errors.StiggError(
229
- `Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`,
230
- );
231
- })
232
- .join('&');
217
+ return qs.stringify(query, { arrayFormat: 'comma' });
233
218
  }
234
219
 
235
220
  private getUserAgent(): string {
@@ -450,7 +435,7 @@ export class Stigg {
450
435
  loggerFor(this).info(`${responseInfo} - ${retryMessage}`);
451
436
 
452
437
  const errText = await response.text().catch((err: any) => castToError(err).message);
453
- const errJSON = safeJSON(errText);
438
+ const errJSON = safeJSON(errText) as any;
454
439
  const errMessage = errJSON ? undefined : errText;
455
440
 
456
441
  loggerFor(this).debug(
@@ -487,9 +472,14 @@ export class Stigg {
487
472
  getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(
488
473
  path: string,
489
474
  Page: new (...args: any[]) => PageClass,
490
- opts?: RequestOptions,
475
+ opts?: PromiseOrValue<RequestOptions>,
491
476
  ): Pagination.PagePromise<PageClass, Item> {
492
- return this.requestAPIList(Page, { method: 'get', path, ...opts });
477
+ return this.requestAPIList(
478
+ Page,
479
+ opts && 'then' in opts ?
480
+ opts.then((opts) => ({ method: 'get', path, ...opts }))
481
+ : { method: 'get', path, ...opts },
482
+ );
493
483
  }
494
484
 
495
485
  requestAPIList<
@@ -497,7 +487,7 @@ export class Stigg {
497
487
  PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>,
498
488
  >(
499
489
  Page: new (...args: ConstructorParameters<typeof Pagination.AbstractPage>) => PageClass,
500
- options: FinalRequestOptions,
490
+ options: PromiseOrValue<FinalRequestOptions>,
501
491
  ): Pagination.PagePromise<PageClass, Item> {
502
492
  const request = this.makeRequest(options, null, undefined);
503
493
  return new Pagination.PagePromise<PageClass, Item>(this as any as Stigg, request, Page);
@@ -510,9 +500,10 @@ export class Stigg {
510
500
  controller: AbortController,
511
501
  ): Promise<Response> {
512
502
  const { signal, method, ...options } = init || {};
513
- if (signal) signal.addEventListener('abort', () => controller.abort());
503
+ const abort = this._makeAbort(controller);
504
+ if (signal) signal.addEventListener('abort', abort, { once: true });
514
505
 
515
- const timeout = setTimeout(() => controller.abort(), ms);
506
+ const timeout = setTimeout(abort, ms);
516
507
 
517
508
  const isReadableBody =
518
509
  ((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) ||
@@ -679,6 +670,12 @@ export class Stigg {
679
670
  return headers.values;
680
671
  }
681
672
 
673
+ private _makeAbort(controller: AbortController) {
674
+ // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure
675
+ // would capture all request options, and cause a memory leak.
676
+ return () => controller.abort();
677
+ }
678
+
682
679
  private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {
683
680
  bodyHeaders: HeadersLike;
684
681
  body: BodyInit | undefined;
@@ -711,6 +708,14 @@ export class Stigg {
711
708
  (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))
712
709
  ) {
713
710
  return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>) };
711
+ } else if (
712
+ typeof body === 'object' &&
713
+ headers.values.get('content-type') === 'application/x-www-form-urlencoded'
714
+ ) {
715
+ return {
716
+ bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },
717
+ body: this.stringifyQuery(body as Record<string, unknown>),
718
+ };
714
719
  } else {
715
720
  return this.#encoder({ body, headers });
716
721
  }
@@ -29,6 +29,12 @@ export async function defaultParseResponse<T>(client: Stigg, props: APIResponseP
29
29
  const mediaType = contentType?.split(';')[0]?.trim();
30
30
  const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
31
31
  if (isJSON) {
32
+ const contentLength = response.headers.get('content-length');
33
+ if (contentLength === '0') {
34
+ // if there is no content we can't do anything
35
+ return undefined as T;
36
+ }
37
+
32
38
  const json = await response.json();
33
39
  return json as T;
34
40
  }
@@ -0,0 +1,13 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/puruvj/neoqs/graphs/contributors) All rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
10
+
11
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,3 @@
1
+ # qs
2
+
3
+ This is a vendored version of [neoqs](https://github.com/PuruVJ/neoqs) which is a TypeScript rewrite of [qs](https://github.com/ljharb/qs), a query string library.
@@ -0,0 +1,10 @@
1
+ import type { Format } from './types';
2
+
3
+ export const default_format: Format = 'RFC3986';
4
+ export const default_formatter = (v: PropertyKey) => String(v);
5
+ export const formatters: Record<Format, (str: PropertyKey) => string> = {
6
+ RFC1738: (v: PropertyKey) => String(v).replace(/%20/g, '+'),
7
+ RFC3986: default_formatter,
8
+ };
9
+ export const RFC1738 = 'RFC1738';
10
+ export const RFC3986 = 'RFC3986';
@@ -0,0 +1,13 @@
1
+ import { default_format, formatters, RFC1738, RFC3986 } from './formats';
2
+
3
+ const formats = {
4
+ formatters,
5
+ RFC1738,
6
+ RFC3986,
7
+ default: default_format,
8
+ };
9
+
10
+ export { stringify } from './stringify';
11
+ export { formats };
12
+
13
+ export type { DefaultDecoder, DefaultEncoder, Format, ParseOptions, StringifyOptions } from './types';
@@ -0,0 +1,385 @@
1
+ import { encode, is_buffer, maybe_map, has } from './utils';
2
+ import { default_format, default_formatter, formatters } from './formats';
3
+ import type { NonNullableProperties, StringifyOptions } from './types';
4
+ import { isArray } from '../utils/values';
5
+
6
+ const array_prefix_generators = {
7
+ brackets(prefix: PropertyKey) {
8
+ return String(prefix) + '[]';
9
+ },
10
+ comma: 'comma',
11
+ indices(prefix: PropertyKey, key: string) {
12
+ return String(prefix) + '[' + key + ']';
13
+ },
14
+ repeat(prefix: PropertyKey) {
15
+ return String(prefix);
16
+ },
17
+ };
18
+
19
+ const push_to_array = function (arr: any[], value_or_array: any) {
20
+ Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);
21
+ };
22
+
23
+ let toISOString;
24
+
25
+ const defaults = {
26
+ addQueryPrefix: false,
27
+ allowDots: false,
28
+ allowEmptyArrays: false,
29
+ arrayFormat: 'indices',
30
+ charset: 'utf-8',
31
+ charsetSentinel: false,
32
+ delimiter: '&',
33
+ encode: true,
34
+ encodeDotInKeys: false,
35
+ encoder: encode,
36
+ encodeValuesOnly: false,
37
+ format: default_format,
38
+ formatter: default_formatter,
39
+ /** @deprecated */
40
+ indices: false,
41
+ serializeDate(date) {
42
+ return (toISOString ??= Function.prototype.call.bind(Date.prototype.toISOString))(date);
43
+ },
44
+ skipNulls: false,
45
+ strictNullHandling: false,
46
+ } as NonNullableProperties<StringifyOptions & { formatter: (typeof formatters)['RFC1738'] }>;
47
+
48
+ function is_non_nullish_primitive(v: unknown): v is string | number | boolean | symbol | bigint {
49
+ return (
50
+ typeof v === 'string' ||
51
+ typeof v === 'number' ||
52
+ typeof v === 'boolean' ||
53
+ typeof v === 'symbol' ||
54
+ typeof v === 'bigint'
55
+ );
56
+ }
57
+
58
+ const sentinel = {};
59
+
60
+ function inner_stringify(
61
+ object: any,
62
+ prefix: PropertyKey,
63
+ generateArrayPrefix: StringifyOptions['arrayFormat'] | ((prefix: string, key: string) => string),
64
+ commaRoundTrip: boolean,
65
+ allowEmptyArrays: boolean,
66
+ strictNullHandling: boolean,
67
+ skipNulls: boolean,
68
+ encodeDotInKeys: boolean,
69
+ encoder: StringifyOptions['encoder'],
70
+ filter: StringifyOptions['filter'],
71
+ sort: StringifyOptions['sort'],
72
+ allowDots: StringifyOptions['allowDots'],
73
+ serializeDate: StringifyOptions['serializeDate'],
74
+ format: StringifyOptions['format'],
75
+ formatter: StringifyOptions['formatter'],
76
+ encodeValuesOnly: boolean,
77
+ charset: StringifyOptions['charset'],
78
+ sideChannel: WeakMap<any, any>,
79
+ ) {
80
+ let obj = object;
81
+
82
+ let tmp_sc = sideChannel;
83
+ let step = 0;
84
+ let find_flag = false;
85
+ while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {
86
+ // Where object last appeared in the ref tree
87
+ const pos = tmp_sc.get(object);
88
+ step += 1;
89
+ if (typeof pos !== 'undefined') {
90
+ if (pos === step) {
91
+ throw new RangeError('Cyclic object value');
92
+ } else {
93
+ find_flag = true; // Break while
94
+ }
95
+ }
96
+ if (typeof tmp_sc.get(sentinel) === 'undefined') {
97
+ step = 0;
98
+ }
99
+ }
100
+
101
+ if (typeof filter === 'function') {
102
+ obj = filter(prefix, obj);
103
+ } else if (obj instanceof Date) {
104
+ obj = serializeDate?.(obj);
105
+ } else if (generateArrayPrefix === 'comma' && isArray(obj)) {
106
+ obj = maybe_map(obj, function (value) {
107
+ if (value instanceof Date) {
108
+ return serializeDate?.(value);
109
+ }
110
+ return value;
111
+ });
112
+ }
113
+
114
+ if (obj === null) {
115
+ if (strictNullHandling) {
116
+ return encoder && !encodeValuesOnly ?
117
+ // @ts-expect-error
118
+ encoder(prefix, defaults.encoder, charset, 'key', format)
119
+ : prefix;
120
+ }
121
+
122
+ obj = '';
123
+ }
124
+
125
+ if (is_non_nullish_primitive(obj) || is_buffer(obj)) {
126
+ if (encoder) {
127
+ const key_value =
128
+ encodeValuesOnly ? prefix
129
+ // @ts-expect-error
130
+ : encoder(prefix, defaults.encoder, charset, 'key', format);
131
+ return [
132
+ formatter?.(key_value) +
133
+ '=' +
134
+ // @ts-expect-error
135
+ formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),
136
+ ];
137
+ }
138
+ return [formatter?.(prefix) + '=' + formatter?.(String(obj))];
139
+ }
140
+
141
+ const values: string[] = [];
142
+
143
+ if (typeof obj === 'undefined') {
144
+ return values;
145
+ }
146
+
147
+ let obj_keys;
148
+ if (generateArrayPrefix === 'comma' && isArray(obj)) {
149
+ // we need to join elements in
150
+ if (encodeValuesOnly && encoder) {
151
+ // @ts-expect-error values only
152
+ obj = maybe_map(obj, encoder);
153
+ }
154
+ obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];
155
+ } else if (isArray(filter)) {
156
+ obj_keys = filter;
157
+ } else {
158
+ const keys = Object.keys(obj);
159
+ obj_keys = sort ? keys.sort(sort) : keys;
160
+ }
161
+
162
+ const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\./g, '%2E') : String(prefix);
163
+
164
+ const adjusted_prefix =
165
+ commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;
166
+
167
+ if (allowEmptyArrays && isArray(obj) && obj.length === 0) {
168
+ return adjusted_prefix + '[]';
169
+ }
170
+
171
+ for (let j = 0; j < obj_keys.length; ++j) {
172
+ const key = obj_keys[j];
173
+ const value =
174
+ // @ts-ignore
175
+ typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key as any];
176
+
177
+ if (skipNulls && value === null) {
178
+ continue;
179
+ }
180
+
181
+ // @ts-ignore
182
+ const encoded_key = allowDots && encodeDotInKeys ? (key as any).replace(/\./g, '%2E') : key;
183
+ const key_prefix =
184
+ isArray(obj) ?
185
+ typeof generateArrayPrefix === 'function' ?
186
+ generateArrayPrefix(adjusted_prefix, encoded_key)
187
+ : adjusted_prefix
188
+ : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');
189
+
190
+ sideChannel.set(object, step);
191
+ const valueSideChannel = new WeakMap();
192
+ valueSideChannel.set(sentinel, sideChannel);
193
+ push_to_array(
194
+ values,
195
+ inner_stringify(
196
+ value,
197
+ key_prefix,
198
+ generateArrayPrefix,
199
+ commaRoundTrip,
200
+ allowEmptyArrays,
201
+ strictNullHandling,
202
+ skipNulls,
203
+ encodeDotInKeys,
204
+ // @ts-ignore
205
+ generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,
206
+ filter,
207
+ sort,
208
+ allowDots,
209
+ serializeDate,
210
+ format,
211
+ formatter,
212
+ encodeValuesOnly,
213
+ charset,
214
+ valueSideChannel,
215
+ ),
216
+ );
217
+ }
218
+
219
+ return values;
220
+ }
221
+
222
+ function normalize_stringify_options(
223
+ opts: StringifyOptions = defaults,
224
+ ): NonNullableProperties<Omit<StringifyOptions, 'indices'>> & { indices?: boolean } {
225
+ if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {
226
+ throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');
227
+ }
228
+
229
+ if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {
230
+ throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');
231
+ }
232
+
233
+ if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {
234
+ throw new TypeError('Encoder has to be a function.');
235
+ }
236
+
237
+ const charset = opts.charset || defaults.charset;
238
+ if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {
239
+ throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');
240
+ }
241
+
242
+ let format = default_format;
243
+ if (typeof opts.format !== 'undefined') {
244
+ if (!has(formatters, opts.format)) {
245
+ throw new TypeError('Unknown format option provided.');
246
+ }
247
+ format = opts.format;
248
+ }
249
+ const formatter = formatters[format];
250
+
251
+ let filter = defaults.filter;
252
+ if (typeof opts.filter === 'function' || isArray(opts.filter)) {
253
+ filter = opts.filter;
254
+ }
255
+
256
+ let arrayFormat: StringifyOptions['arrayFormat'];
257
+ if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {
258
+ arrayFormat = opts.arrayFormat;
259
+ } else if ('indices' in opts) {
260
+ arrayFormat = opts.indices ? 'indices' : 'repeat';
261
+ } else {
262
+ arrayFormat = defaults.arrayFormat;
263
+ }
264
+
265
+ if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {
266
+ throw new TypeError('`commaRoundTrip` must be a boolean, or absent');
267
+ }
268
+
269
+ const allowDots =
270
+ typeof opts.allowDots === 'undefined' ?
271
+ !!opts.encodeDotInKeys === true ?
272
+ true
273
+ : defaults.allowDots
274
+ : !!opts.allowDots;
275
+
276
+ return {
277
+ addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,
278
+ // @ts-ignore
279
+ allowDots: allowDots,
280
+ allowEmptyArrays:
281
+ typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,
282
+ arrayFormat: arrayFormat,
283
+ charset: charset,
284
+ charsetSentinel:
285
+ typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,
286
+ commaRoundTrip: !!opts.commaRoundTrip,
287
+ delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,
288
+ encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,
289
+ encodeDotInKeys:
290
+ typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,
291
+ encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,
292
+ encodeValuesOnly:
293
+ typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,
294
+ filter: filter,
295
+ format: format,
296
+ formatter: formatter,
297
+ serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,
298
+ skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,
299
+ // @ts-ignore
300
+ sort: typeof opts.sort === 'function' ? opts.sort : null,
301
+ strictNullHandling:
302
+ typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,
303
+ };
304
+ }
305
+
306
+ export function stringify(object: any, opts: StringifyOptions = {}) {
307
+ let obj = object;
308
+ const options = normalize_stringify_options(opts);
309
+
310
+ let obj_keys: PropertyKey[] | undefined;
311
+ let filter;
312
+
313
+ if (typeof options.filter === 'function') {
314
+ filter = options.filter;
315
+ obj = filter('', obj);
316
+ } else if (isArray(options.filter)) {
317
+ filter = options.filter;
318
+ obj_keys = filter;
319
+ }
320
+
321
+ const keys: string[] = [];
322
+
323
+ if (typeof obj !== 'object' || obj === null) {
324
+ return '';
325
+ }
326
+
327
+ const generateArrayPrefix = array_prefix_generators[options.arrayFormat];
328
+ const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;
329
+
330
+ if (!obj_keys) {
331
+ obj_keys = Object.keys(obj);
332
+ }
333
+
334
+ if (options.sort) {
335
+ obj_keys.sort(options.sort);
336
+ }
337
+
338
+ const sideChannel = new WeakMap();
339
+ for (let i = 0; i < obj_keys.length; ++i) {
340
+ const key = obj_keys[i]!;
341
+
342
+ if (options.skipNulls && obj[key] === null) {
343
+ continue;
344
+ }
345
+ push_to_array(
346
+ keys,
347
+ inner_stringify(
348
+ obj[key],
349
+ key,
350
+ // @ts-expect-error
351
+ generateArrayPrefix,
352
+ commaRoundTrip,
353
+ options.allowEmptyArrays,
354
+ options.strictNullHandling,
355
+ options.skipNulls,
356
+ options.encodeDotInKeys,
357
+ options.encode ? options.encoder : null,
358
+ options.filter,
359
+ options.sort,
360
+ options.allowDots,
361
+ options.serializeDate,
362
+ options.format,
363
+ options.formatter,
364
+ options.encodeValuesOnly,
365
+ options.charset,
366
+ sideChannel,
367
+ ),
368
+ );
369
+ }
370
+
371
+ const joined = keys.join(options.delimiter);
372
+ let prefix = options.addQueryPrefix === true ? '?' : '';
373
+
374
+ if (options.charsetSentinel) {
375
+ if (options.charset === 'iso-8859-1') {
376
+ // encodeURIComponent('&#10003;'), the "numeric entity" representation of a checkmark
377
+ prefix += 'utf8=%26%2310003%3B&';
378
+ } else {
379
+ // encodeURIComponent('✓')
380
+ prefix += 'utf8=%E2%9C%93&';
381
+ }
382
+ }
383
+
384
+ return joined.length > 0 ? prefix + joined : '';
385
+ }