@nejs/basic-extensions 2.6.0 → 2.8.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 (271) hide show
  1. package/.vscode/settings.json +5 -0
  2. package/README.md +6129 -1574
  3. package/dist/@nejs/basic-extensions.bundle.2.7.0.js +19 -0
  4. package/dist/@nejs/basic-extensions.bundle.2.7.0.js.map +7 -0
  5. package/dist/cjs/array.extensions.d.ts +39 -0
  6. package/dist/cjs/array.extensions.js +303 -0
  7. package/dist/cjs/array.extensions.js.map +1 -0
  8. package/dist/cjs/big.int.extension.d.ts +31 -0
  9. package/dist/cjs/big.int.extension.js +164 -0
  10. package/dist/cjs/big.int.extension.js.map +1 -0
  11. package/dist/cjs/{newClasses → classes}/asyncIterable.js +32 -44
  12. package/dist/cjs/classes/asyncIterable.js.map +1 -0
  13. package/dist/cjs/{newClasses → classes}/deferred.js +66 -138
  14. package/dist/cjs/classes/deferred.js.map +1 -0
  15. package/dist/cjs/{newClasses → classes}/descriptor.js +56 -90
  16. package/dist/cjs/classes/descriptor.js.map +1 -0
  17. package/dist/cjs/classes/index.d.ts +13 -0
  18. package/dist/cjs/classes/index.js +57 -0
  19. package/dist/cjs/classes/index.js.map +1 -0
  20. package/dist/cjs/classes/introspector.d.ts +20 -0
  21. package/dist/cjs/classes/introspector.js +130 -0
  22. package/dist/cjs/classes/introspector.js.map +1 -0
  23. package/dist/cjs/{newClasses → classes}/iterable.js +42 -63
  24. package/dist/cjs/classes/iterable.js.map +1 -0
  25. package/dist/cjs/classes/param.parser.d.ts +227 -0
  26. package/dist/cjs/classes/param.parser.js +242 -0
  27. package/dist/cjs/classes/param.parser.js.map +1 -0
  28. package/dist/cjs/classes/pluggable.proxy.d.ts +152 -0
  29. package/dist/cjs/classes/pluggable.proxy.js +444 -0
  30. package/dist/cjs/classes/pluggable.proxy.js.map +1 -0
  31. package/dist/cjs/{newClasses → classes}/refmap.js +18 -30
  32. package/dist/cjs/classes/refmap.js.map +1 -0
  33. package/dist/cjs/{newClasses → classes}/refset.js +28 -47
  34. package/dist/cjs/classes/refset.js.map +1 -0
  35. package/dist/cjs/classes/symkeys.d.ts +292 -0
  36. package/dist/cjs/classes/symkeys.js +424 -0
  37. package/dist/cjs/classes/symkeys.js.map +1 -0
  38. package/dist/cjs/classes/type.d.ts +56 -0
  39. package/dist/cjs/classes/type.js +405 -0
  40. package/dist/cjs/classes/type.js.map +1 -0
  41. package/dist/cjs/function.extensions.js +757 -0
  42. package/dist/cjs/function.extensions.js.map +1 -0
  43. package/dist/cjs/global.this.js +261 -0
  44. package/dist/cjs/global.this.js.map +1 -0
  45. package/dist/cjs/index.d.ts +4 -3
  46. package/dist/cjs/index.js +62 -32
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/json.extensions.d.ts +2 -0
  49. package/dist/cjs/json.extensions.js +107 -0
  50. package/dist/cjs/json.extensions.js.map +1 -0
  51. package/dist/{mjs/mapextensions.d.ts → cjs/map.extensions.d.ts} +1 -0
  52. package/dist/cjs/map.extensions.js +142 -0
  53. package/dist/cjs/map.extensions.js.map +1 -0
  54. package/dist/cjs/number.extension.d.ts +44 -0
  55. package/dist/cjs/number.extension.js +260 -0
  56. package/dist/cjs/number.extension.js.map +1 -0
  57. package/dist/cjs/object.extensions.d.ts +62 -0
  58. package/dist/cjs/object.extensions.js +1116 -0
  59. package/dist/cjs/object.extensions.js.map +1 -0
  60. package/dist/cjs/proxy.extensions.d.ts +2 -0
  61. package/dist/cjs/proxy.extensions.js +207 -0
  62. package/dist/cjs/proxy.extensions.js.map +1 -0
  63. package/dist/cjs/reflect.extensions.js +316 -0
  64. package/dist/cjs/reflect.extensions.js.map +1 -0
  65. package/dist/cjs/regular.expression.extensions.d.ts +2 -0
  66. package/dist/cjs/regular.expression.extensions.js +423 -0
  67. package/dist/cjs/regular.expression.extensions.js.map +1 -0
  68. package/dist/cjs/set.extensions.d.ts +40 -0
  69. package/dist/cjs/{setextensions.js → set.extensions.js} +150 -2
  70. package/dist/cjs/set.extensions.js.map +1 -0
  71. package/dist/cjs/string.extensions.js +471 -0
  72. package/dist/cjs/string.extensions.js.map +1 -0
  73. package/dist/{mjs/symbolextensions.d.ts → cjs/symbol.extensions.d.ts} +1 -0
  74. package/dist/cjs/symbol.extensions.js +259 -0
  75. package/dist/cjs/symbol.extensions.js.map +1 -0
  76. package/dist/cjs/{weakrefextensions.js → weakref.extensions.js} +1 -1
  77. package/dist/cjs/weakref.extensions.js.map +1 -0
  78. package/dist/mjs/array.extensions.d.ts +39 -0
  79. package/dist/mjs/array.extensions.js +300 -0
  80. package/dist/mjs/array.extensions.js.map +1 -0
  81. package/dist/mjs/big.int.extension.d.ts +31 -0
  82. package/dist/mjs/big.int.extension.js +161 -0
  83. package/dist/mjs/big.int.extension.js.map +1 -0
  84. package/dist/mjs/classes/asyncIterable.js.map +1 -0
  85. package/dist/mjs/classes/deferred.js.map +1 -0
  86. package/dist/mjs/{newClasses → classes}/descriptor.js +7 -4
  87. package/dist/mjs/classes/descriptor.js.map +1 -0
  88. package/dist/mjs/classes/index.d.ts +13 -0
  89. package/dist/mjs/classes/index.js +40 -0
  90. package/dist/mjs/classes/index.js.map +1 -0
  91. package/dist/mjs/classes/introspector.d.ts +20 -0
  92. package/dist/mjs/classes/introspector.js +126 -0
  93. package/dist/mjs/classes/introspector.js.map +1 -0
  94. package/dist/mjs/classes/iterable.js.map +1 -0
  95. package/dist/mjs/classes/param.parser.d.ts +227 -0
  96. package/dist/mjs/classes/param.parser.js +238 -0
  97. package/dist/mjs/classes/param.parser.js.map +1 -0
  98. package/dist/mjs/classes/pluggable.proxy.d.ts +152 -0
  99. package/dist/mjs/classes/pluggable.proxy.js +438 -0
  100. package/dist/mjs/classes/pluggable.proxy.js.map +1 -0
  101. package/dist/mjs/{newClasses → classes}/refmap.js +3 -3
  102. package/dist/mjs/classes/refmap.js.map +1 -0
  103. package/dist/mjs/classes/refset.js.map +1 -0
  104. package/dist/mjs/classes/symkeys.d.ts +292 -0
  105. package/dist/mjs/classes/symkeys.js +420 -0
  106. package/dist/mjs/classes/symkeys.js.map +1 -0
  107. package/dist/mjs/classes/type.d.ts +56 -0
  108. package/dist/mjs/classes/type.js +401 -0
  109. package/dist/mjs/classes/type.js.map +1 -0
  110. package/dist/mjs/function.extensions.js +754 -0
  111. package/dist/mjs/function.extensions.js.map +1 -0
  112. package/dist/mjs/global.this.js +258 -0
  113. package/dist/mjs/global.this.js.map +1 -0
  114. package/dist/mjs/index.d.ts +4 -3
  115. package/dist/mjs/index.js +49 -19
  116. package/dist/mjs/index.js.map +1 -1
  117. package/dist/mjs/json.extensions.d.ts +2 -0
  118. package/dist/mjs/json.extensions.js +104 -0
  119. package/dist/mjs/json.extensions.js.map +1 -0
  120. package/dist/{cjs/mapextensions.d.ts → mjs/map.extensions.d.ts} +1 -0
  121. package/dist/mjs/map.extensions.js +139 -0
  122. package/dist/mjs/map.extensions.js.map +1 -0
  123. package/dist/mjs/number.extension.d.ts +44 -0
  124. package/dist/mjs/number.extension.js +257 -0
  125. package/dist/mjs/number.extension.js.map +1 -0
  126. package/dist/mjs/object.extensions.d.ts +62 -0
  127. package/dist/mjs/object.extensions.js +1112 -0
  128. package/dist/mjs/object.extensions.js.map +1 -0
  129. package/dist/mjs/proxy.extensions.d.ts +2 -0
  130. package/dist/mjs/proxy.extensions.js +204 -0
  131. package/dist/mjs/proxy.extensions.js.map +1 -0
  132. package/dist/mjs/reflect.extensions.js +313 -0
  133. package/dist/mjs/reflect.extensions.js.map +1 -0
  134. package/dist/mjs/regular.expression.extensions.d.ts +2 -0
  135. package/dist/mjs/regular.expression.extensions.js +420 -0
  136. package/dist/mjs/regular.expression.extensions.js.map +1 -0
  137. package/dist/mjs/set.extensions.d.ts +40 -0
  138. package/dist/mjs/{setextensions.js → set.extensions.js} +149 -1
  139. package/dist/mjs/set.extensions.js.map +1 -0
  140. package/dist/mjs/string.extensions.js +468 -0
  141. package/dist/mjs/string.extensions.js.map +1 -0
  142. package/dist/{cjs/symbolextensions.d.ts → mjs/symbol.extensions.d.ts} +1 -0
  143. package/dist/mjs/symbol.extensions.js +256 -0
  144. package/dist/mjs/symbol.extensions.js.map +1 -0
  145. package/dist/mjs/{weakrefextensions.js → weakref.extensions.js} +1 -1
  146. package/dist/mjs/weakref.extensions.js.map +1 -0
  147. package/docs/index.html +24045 -5805
  148. package/package.json +6 -4
  149. package/repl.bootstrap.js +21 -0
  150. package/src/array.extensions.js +322 -0
  151. package/src/big.int.extension.js +163 -0
  152. package/src/{newClasses → classes}/descriptor.js +16 -12
  153. package/src/classes/index.js +51 -0
  154. package/src/classes/introspector.js +167 -0
  155. package/src/classes/param.parser.js +253 -0
  156. package/src/classes/pluggable.proxy.js +485 -0
  157. package/src/{newClasses → classes}/refmap.js +5 -3
  158. package/src/classes/symkeys.js +464 -0
  159. package/src/classes/type.js +427 -0
  160. package/src/function.extensions.js +818 -0
  161. package/src/global.this.js +304 -0
  162. package/src/index.js +56 -23
  163. package/src/json.extensions.js +108 -0
  164. package/src/map.extensions.js +144 -0
  165. package/src/number.extension.js +273 -0
  166. package/src/object.extensions.js +1222 -0
  167. package/src/proxy.extensions.js +229 -0
  168. package/src/reflect.extensions.js +346 -0
  169. package/src/regular.expression.extensions.js +451 -0
  170. package/src/{setextensions.js → set.extensions.js} +151 -2
  171. package/src/string.extensions.js +515 -0
  172. package/src/symbol.extensions.js +268 -0
  173. package/tests/newClasses/refmap.test.js +3 -2
  174. package/tsconfig.base.json +5 -3
  175. package/tsconfig.cjs.json +2 -2
  176. package/tsconfig.esm.json +2 -2
  177. package/dist/@nejs/basic-extensions.bundle.2.5.0.js +0 -8
  178. package/dist/@nejs/basic-extensions.bundle.2.5.0.js.map +0 -7
  179. package/dist/cjs/arrayextensions.d.ts +0 -10
  180. package/dist/cjs/arrayextensions.js +0 -73
  181. package/dist/cjs/arrayextensions.js.map +0 -1
  182. package/dist/cjs/functionextensions.js +0 -202
  183. package/dist/cjs/functionextensions.js.map +0 -1
  184. package/dist/cjs/globals.js +0 -166
  185. package/dist/cjs/globals.js.map +0 -1
  186. package/dist/cjs/mapextensions.js +0 -32
  187. package/dist/cjs/mapextensions.js.map +0 -1
  188. package/dist/cjs/newClasses/asyncIterable.js.map +0 -1
  189. package/dist/cjs/newClasses/deferred.js.map +0 -1
  190. package/dist/cjs/newClasses/descriptor.js.map +0 -1
  191. package/dist/cjs/newClasses/iterable.js.map +0 -1
  192. package/dist/cjs/newClasses/refmap.js.map +0 -1
  193. package/dist/cjs/newClasses/refset.js.map +0 -1
  194. package/dist/cjs/objectextensions.d.ts +0 -11
  195. package/dist/cjs/objectextensions.js +0 -232
  196. package/dist/cjs/objectextensions.js.map +0 -1
  197. package/dist/cjs/reflectextensions.js +0 -111
  198. package/dist/cjs/reflectextensions.js.map +0 -1
  199. package/dist/cjs/setextensions.d.ts +0 -2
  200. package/dist/cjs/setextensions.js.map +0 -1
  201. package/dist/cjs/stringextensions.js +0 -158
  202. package/dist/cjs/stringextensions.js.map +0 -1
  203. package/dist/cjs/symbolextensions.js +0 -69
  204. package/dist/cjs/symbolextensions.js.map +0 -1
  205. package/dist/cjs/weakrefextensions.js.map +0 -1
  206. package/dist/mjs/arrayextensions.d.ts +0 -10
  207. package/dist/mjs/arrayextensions.js +0 -70
  208. package/dist/mjs/arrayextensions.js.map +0 -1
  209. package/dist/mjs/functionextensions.js +0 -199
  210. package/dist/mjs/functionextensions.js.map +0 -1
  211. package/dist/mjs/globals.js +0 -163
  212. package/dist/mjs/globals.js.map +0 -1
  213. package/dist/mjs/mapextensions.js +0 -29
  214. package/dist/mjs/mapextensions.js.map +0 -1
  215. package/dist/mjs/newClasses/asyncIterable.js.map +0 -1
  216. package/dist/mjs/newClasses/deferred.js.map +0 -1
  217. package/dist/mjs/newClasses/descriptor.js.map +0 -1
  218. package/dist/mjs/newClasses/iterable.js.map +0 -1
  219. package/dist/mjs/newClasses/refmap.js.map +0 -1
  220. package/dist/mjs/newClasses/refset.js.map +0 -1
  221. package/dist/mjs/objectextensions.d.ts +0 -11
  222. package/dist/mjs/objectextensions.js +0 -229
  223. package/dist/mjs/objectextensions.js.map +0 -1
  224. package/dist/mjs/reflectextensions.js +0 -108
  225. package/dist/mjs/reflectextensions.js.map +0 -1
  226. package/dist/mjs/setextensions.d.ts +0 -2
  227. package/dist/mjs/setextensions.js.map +0 -1
  228. package/dist/mjs/stringextensions.js +0 -155
  229. package/dist/mjs/stringextensions.js.map +0 -1
  230. package/dist/mjs/symbolextensions.js +0 -66
  231. package/dist/mjs/symbolextensions.js.map +0 -1
  232. package/dist/mjs/weakrefextensions.js.map +0 -1
  233. package/src/arrayextensions.js +0 -75
  234. package/src/functionextensions.js +0 -225
  235. package/src/globals.js +0 -196
  236. package/src/mapextensions.js +0 -32
  237. package/src/objectextensions.js +0 -256
  238. package/src/reflectextensions.js +0 -118
  239. package/src/stringextensions.js +0 -166
  240. package/src/symbolextensions.js +0 -69
  241. /package/dist/cjs/{newClasses → classes}/asyncIterable.d.ts +0 -0
  242. /package/dist/cjs/{newClasses → classes}/deferred.d.ts +0 -0
  243. /package/dist/cjs/{newClasses → classes}/descriptor.d.ts +0 -0
  244. /package/dist/cjs/{newClasses → classes}/iterable.d.ts +0 -0
  245. /package/dist/cjs/{newClasses → classes}/refmap.d.ts +0 -0
  246. /package/dist/cjs/{newClasses → classes}/refset.d.ts +0 -0
  247. /package/dist/cjs/{functionextensions.d.ts → function.extensions.d.ts} +0 -0
  248. /package/dist/cjs/{globals.d.ts → global.this.d.ts} +0 -0
  249. /package/dist/cjs/{reflectextensions.d.ts → reflect.extensions.d.ts} +0 -0
  250. /package/dist/cjs/{stringextensions.d.ts → string.extensions.d.ts} +0 -0
  251. /package/dist/cjs/{weakrefextensions.d.ts → weakref.extensions.d.ts} +0 -0
  252. /package/dist/mjs/{newClasses → classes}/asyncIterable.d.ts +0 -0
  253. /package/dist/mjs/{newClasses → classes}/asyncIterable.js +0 -0
  254. /package/dist/mjs/{newClasses → classes}/deferred.d.ts +0 -0
  255. /package/dist/mjs/{newClasses → classes}/deferred.js +0 -0
  256. /package/dist/mjs/{newClasses → classes}/descriptor.d.ts +0 -0
  257. /package/dist/mjs/{newClasses → classes}/iterable.d.ts +0 -0
  258. /package/dist/mjs/{newClasses → classes}/iterable.js +0 -0
  259. /package/dist/mjs/{newClasses → classes}/refmap.d.ts +0 -0
  260. /package/dist/mjs/{newClasses → classes}/refset.d.ts +0 -0
  261. /package/dist/mjs/{newClasses → classes}/refset.js +0 -0
  262. /package/dist/mjs/{functionextensions.d.ts → function.extensions.d.ts} +0 -0
  263. /package/dist/mjs/{globals.d.ts → global.this.d.ts} +0 -0
  264. /package/dist/mjs/{reflectextensions.d.ts → reflect.extensions.d.ts} +0 -0
  265. /package/dist/mjs/{stringextensions.d.ts → string.extensions.d.ts} +0 -0
  266. /package/dist/mjs/{weakrefextensions.d.ts → weakref.extensions.d.ts} +0 -0
  267. /package/src/{newClasses → classes}/asyncIterable.js +0 -0
  268. /package/src/{newClasses → classes}/deferred.js +0 -0
  269. /package/src/{newClasses → classes}/iterable.js +0 -0
  270. /package/src/{newClasses → classes}/refset.js +0 -0
  271. /package/src/{weakrefextensions.js → weakref.extensions.js} +0 -0
@@ -1,16 +1,4 @@
1
1
  "use strict";
2
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
- if (kind === "m") throw new TypeError("Private method is not writable");
4
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
- };
8
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
- };
13
- var _Iterable_elements, _Iterator_mapEach, _Iterator_iterable, _Iterator_iterator;
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.IteratorExtensions = exports.IterableExtensions = exports.Iterator = exports.Iterable = void 0;
16
4
  const extension_1 = require("@nejs/extension");
@@ -21,6 +9,11 @@ const extension_1 = require("@nejs/extension");
21
9
  * `for...of` loops and other standard JavaScript iteration mechanisms.
22
10
  */
23
11
  class Iterable {
12
+ /**
13
+ * Private field to store the elements of the iterable.
14
+ * @private
15
+ */
16
+ #elements = [];
24
17
  /**
25
18
  * Constructs an instance of Iterable. It can be initialized with either an
26
19
  * iterable object (such as an array, Set, Map, string, or any object
@@ -36,17 +29,12 @@ class Iterable {
36
29
  * not an iterable.
37
30
  */
38
31
  constructor(elementsOrFirstElement, ...moreElements) {
39
- /**
40
- * Private field to store the elements of the iterable.
41
- * @private
42
- */
43
- _Iterable_elements.set(this, []);
44
32
  if (elementsOrFirstElement != null &&
45
33
  typeof elementsOrFirstElement[Symbol.iterator] === 'function') {
46
- __classPrivateFieldSet(this, _Iterable_elements, [...elementsOrFirstElement, ...moreElements], "f");
34
+ this.#elements = [...elementsOrFirstElement, ...moreElements];
47
35
  }
48
36
  else {
49
- __classPrivateFieldSet(this, _Iterable_elements, [elementsOrFirstElement, ...moreElements], "f");
37
+ this.#elements = [elementsOrFirstElement, ...moreElements];
50
38
  }
51
39
  }
52
40
  /**
@@ -56,8 +44,8 @@ class Iterable {
56
44
  *
57
45
  * @returns {Generator} A generator that yields each element of the iterable.
58
46
  */
59
- *[(_Iterable_elements = new WeakMap(), Symbol.iterator)]() {
60
- for (const element of __classPrivateFieldGet(this, _Iterable_elements, "f")) {
47
+ *[Symbol.iterator]() {
48
+ for (const element of this.#elements) {
61
49
  yield element;
62
50
  }
63
51
  }
@@ -68,7 +56,7 @@ class Iterable {
68
56
  * @returns {Array} An array containing all the elements of the iterable.
69
57
  */
70
58
  get asArray() {
71
- return __classPrivateFieldGet(this, _Iterable_elements, "f");
59
+ return this.#elements;
72
60
  }
73
61
  /**
74
62
  * Ensures that the constructor of this object instance's name
@@ -105,6 +93,13 @@ exports.Iterable = Iterable;
105
93
  * `[Symbol.iterator]` property assigned to a generator function.
106
94
  */
107
95
  class Iterator {
96
+ /**
97
+ * A private function that when provided has the following signature:
98
+ * `function mapEach(entry) -> entry`. This allows any changes to be made
99
+ * to each element, conditionally and programmatically, as needed before
100
+ * they are returned to the called code.
101
+ */
102
+ #mapEach = undefined;
108
103
  /**
109
104
  * Creates a new `Iterator` object instance.
110
105
  *
@@ -114,43 +109,12 @@ class Iterator {
114
109
  * takes an entry as input and receives one as output.
115
110
  */
116
111
  constructor(iterable, mapEach) {
117
- /**
118
- * A private function that when provided has the following signature:
119
- * `function mapEach(entry) -> entry`. This allows any changes to be made
120
- * to each element, conditionally and programmatically, as needed before
121
- * they are returned to the called code.
122
- */
123
- _Iterator_mapEach.set(this, undefined
124
- /**
125
- * Creates a new `Iterator` object instance.
126
- *
127
- * @param {object} iterable any object that has a `[Symbol.iterator]`
128
- * property assigned to a generator function.
129
- * @param {function} mapEach when provided `mapEach` is a callback that
130
- * takes an entry as input and receives one as output.
131
- */
132
- );
133
- /**
134
- * The object from which its iterator functionality is derived.
135
- *
136
- * @type {object}
137
- * @private
138
- */
139
- _Iterator_iterable.set(this, null);
140
- /**
141
- * The results of a call to the iterable's `[Symbol.iterator]`
142
- * generator function.
143
- *
144
- * @type {object}
145
- * @private
146
- */
147
- _Iterator_iterator.set(this, null);
148
112
  if (!iterable || !Reflect.has(iterable, Symbol.iterator)) {
149
113
  throw new TypeError('Value used to instantiate Iterator is not iterable');
150
114
  }
151
- __classPrivateFieldSet(this, _Iterator_iterable, iterable, "f");
152
- __classPrivateFieldSet(this, _Iterator_iterator, iterable[Symbol.iterator](), "f");
153
- __classPrivateFieldSet(this, _Iterator_mapEach, typeof mapEach === 'function' ? mapEach : undefined, "f");
115
+ this.#iterable = iterable;
116
+ this.#iterator = iterable[Symbol.iterator]();
117
+ this.#mapEach = typeof mapEach === 'function' ? mapEach : undefined;
154
118
  }
155
119
  /**
156
120
  * Returns a new `Array` derived from the iterable this object
@@ -160,7 +124,7 @@ class Iterator {
160
124
  * iterable. The method is generated from `Array.from()`
161
125
  */
162
126
  get asArray() {
163
- return Array.from(__classPrivateFieldGet(this, _Iterator_iterable, "f"));
127
+ return Array.from(this.#iterable);
164
128
  }
165
129
  /**
166
130
  * Returns the actual iterable object passed to the constructor that
@@ -169,7 +133,7 @@ class Iterator {
169
133
  * @returns {object} the object containing the `[Symbol.iterator]`
170
134
  */
171
135
  get iterable() {
172
- return __classPrivateFieldGet(this, _Iterator_iterable, "f");
136
+ return this.#iterable;
173
137
  }
174
138
  /**
175
139
  * The function retrieves the next value in the iterator. If the
@@ -179,14 +143,14 @@ class Iterator {
179
143
  * @returns {any} the next value
180
144
  */
181
145
  next() {
182
- const input = __classPrivateFieldGet(this, _Iterator_iterator, "f").next();
146
+ const input = this.#iterator.next();
183
147
  let output = input;
184
148
  if (output.done) {
185
149
  return { value: undefined, done: true };
186
150
  }
187
151
  else {
188
- if (__classPrivateFieldGet(this, _Iterator_mapEach, "f") && typeof __classPrivateFieldGet(this, _Iterator_mapEach, "f") === 'function') {
189
- output.value = __classPrivateFieldGet(this, _Iterator_mapEach, "f").call(this, input.value);
152
+ if (this.#mapEach && typeof this.#mapEach === 'function') {
153
+ output.value = this.#mapEach(input.value);
190
154
  }
191
155
  return { value: output.value, done: false };
192
156
  }
@@ -196,7 +160,7 @@ class Iterator {
196
160
  * iterated over again.
197
161
  */
198
162
  reset() {
199
- __classPrivateFieldSet(this, _Iterator_iterator, __classPrivateFieldGet(this, _Iterator_iterable, "f")[Symbol.iterator](), "f");
163
+ this.#iterator = this.#iterable[Symbol.iterator]();
200
164
  }
201
165
  /**
202
166
  * The existence of this symbol on the object instances, indicates that
@@ -206,7 +170,7 @@ class Iterator {
206
170
  * @returns {Iterator} this is returned since this object is already
207
171
  * conforming to the expected JavaScript Iterator interface
208
172
  */
209
- [(_Iterator_mapEach = new WeakMap(), _Iterator_iterable = new WeakMap(), _Iterator_iterator = new WeakMap(), Symbol.iterator)]() {
173
+ [Symbol.iterator]() {
210
174
  return this;
211
175
  }
212
176
  /**
@@ -218,6 +182,21 @@ class Iterator {
218
182
  get [Symbol.toStringTag]() {
219
183
  return this.constructor.name;
220
184
  }
185
+ /**
186
+ * The object from which its iterator functionality is derived.
187
+ *
188
+ * @type {object}
189
+ * @private
190
+ */
191
+ #iterable = null;
192
+ /**
193
+ * The results of a call to the iterable's `[Symbol.iterator]`
194
+ * generator function.
195
+ *
196
+ * @type {object}
197
+ * @private
198
+ */
199
+ #iterator = null;
221
200
  }
222
201
  exports.Iterator = Iterator;
223
202
  exports.IterableExtensions = new extension_1.Extension(Iterable);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterable.js","sourceRoot":"","sources":["../../../src/classes/iterable.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ export class ParamParser {
2
+ /**
3
+ * Attempts to parse the given parameters using the provided parsers, throwing an
4
+ * error if no valid parser is found. This method serves as a convenience wrapper
5
+ * around `safeTryParsers`, enforcing strict parsing by automatically enabling
6
+ * error throwing on failure.
7
+ *
8
+ * @param {any[]} parameters - The parameters to be parsed.
9
+ * @param {Function[]} parsers - An array of `ParamParser` subclasses to attempt
10
+ * parsing with.
11
+ * @returns {Object} An object containing the parsing result, with a `success`
12
+ * property indicating if parsing was successful, and a `data` property containing
13
+ * the parsed data if successful.
14
+ * @example
15
+ * const parameters = ['param1', 'param2'];
16
+ * const parsers = [Parser1, Parser2];
17
+ * const result = ParamParser.tryParsers(parameters, parsers);
18
+ * if (result.success) {
19
+ * console.log('Parsing successful:', result.data);
20
+ * } else {
21
+ * console.error('Parsing failed.');
22
+ * }
23
+ */
24
+ static tryParsers(parameters: any[], parsers: Function[]): Object;
25
+ /**
26
+ * Tries parsing `parameters` with each parser in `parsers`. If
27
+ * `throwOnFail` is true, throws an error when validation fails or
28
+ * no valid parser is found.
29
+ *
30
+ * This method attempts to parse the given parameters using the
31
+ * provided list of parsers. It validates the input to ensure both
32
+ * `parameters` and `parsers` are arrays and that `parsers`
33
+ * contains at least one valid `ParamParser` subclass. If
34
+ * `throwOnFail` is set to true, it will throw specific errors for
35
+ * invalid inputs or when no parser succeeds. Otherwise, it returns
36
+ * an object indicating the success status and the result of
37
+ * parsing, if successful.
38
+ *
39
+ * @param {any[]} parameters - The parameters to be parsed.
40
+ * @param {Function[]} parsers - An array of `ParamParser`
41
+ * subclasses to attempt parsing with.
42
+ * @param {boolean} [throwOnFail=false] - Whether to throw an
43
+ * error on failure.
44
+ * @returns {{success: boolean, data: any}} An object with a
45
+ * `success` flag and `data` containing the parsing result, if
46
+ * successful.
47
+ * @throws {ParametersMustBeArrayError} If `parameters` or
48
+ * `parsers` are not arrays when `throwOnFail` is true.
49
+ * @throws {ParsersArrayMustContainParsersError} If `parsers`
50
+ * does not contain at least one valid `ParamParser` subclass
51
+ * when `throwOnFail` is true.
52
+ * @throws {NoValidParsersFound} If no valid parser is found
53
+ * and `throwOnFail` is true.
54
+ * @example
55
+ * const parameters = ['param1', 'param2'];
56
+ * const parsers = [Parser1, Parser2];
57
+ * const result = ParamParser.safeTryParsers(
58
+ * parameters, parsers, true
59
+ * );
60
+ *
61
+ * if (result.success) {
62
+ * console.log('Parsing successful:', result.data);
63
+ * } else {
64
+ * console.error('Parsing failed.');
65
+ * }
66
+ */
67
+ static safeTryParsers(parameters: any[], parsers: Function[], throwOnFail?: boolean | undefined): {
68
+ success: boolean;
69
+ data: any;
70
+ };
71
+ /**
72
+ * A custom error class that signifies no valid parsers were found
73
+ * during the parsing process. This error is thrown when all
74
+ * parsers fail to parse the given parameters and the `throwOnFail`
75
+ * flag is set to true in the `safeTryParsers` method.
76
+ *
77
+ * @returns {Function} A class extending Error, representing a
78
+ * specific error when no valid parsers are found.ound.
79
+ *
80
+ * @example
81
+ * try {
82
+ * const result = ParamParser.safeTryParsers(
83
+ * parameters, parsers, true
84
+ * );
85
+ * } catch (error) {
86
+ * if (error instanceof ParamParser.NoValidParsersFound) {
87
+ * console.error(
88
+ * 'No valid parsers could process the parameters.'
89
+ * );
90
+ * }
91
+ * }
92
+ */
93
+ static get NoValidParsersFound(): Function;
94
+ /**
95
+ * Represents an error thrown when the parameters provided to a method
96
+ * are not in an array format as expected. This class extends the
97
+ * native JavaScript `Error` class, allowing for instances of this
98
+ * error to be thrown and caught using standard error handling
99
+ * mechanisms in JavaScript.
100
+ *
101
+ * This error is specifically used in scenarios where a method
102
+ * expects its arguments to be provided as an array, and the
103
+ * validation of those arguments fails because they were not
104
+ * provided in an array format. It serves as a clear indicator
105
+ * of the nature of the error to developers, enabling them to
106
+ * quickly identify and rectify the issue in their code.
107
+ *
108
+ * @example
109
+ * try {
110
+ * ParamParser.safeTryParsers(nonArrayParameters, parsers, true);
111
+ * } catch (error) {
112
+ * if (error instanceof ParamParser.ParametersMustBeArrayError) {
113
+ * console.error('Parameters must be provided as an array.');
114
+ * }
115
+ * }
116
+ */
117
+ static get ParametersMustBeArrayError(): {
118
+ new (message?: string | undefined): {
119
+ name: string;
120
+ message: string;
121
+ stack?: string | undefined;
122
+ cause?: unknown;
123
+ };
124
+ new (message?: string | undefined, options?: ErrorOptions | undefined): {
125
+ name: string;
126
+ message: string;
127
+ stack?: string | undefined;
128
+ cause?: unknown;
129
+ };
130
+ captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void;
131
+ prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
132
+ stackTraceLimit: number;
133
+ };
134
+ /**
135
+ * A custom error class indicating that the parsers array does not
136
+ * contain valid parser functions. This error is thrown when the
137
+ * validation of parsers within `ParamParser.safeTryParsers` fails
138
+ * to find any instance that is a subclass of `ParamParser`. It
139
+ * extends the native JavaScript `Error` class, allowing it to be
140
+ * thrown and caught using standard error handling mechanisms.
141
+ *
142
+ * This error serves as a clear indicator to developers that the
143
+ * provided array of parsers does not meet the expected criteria,
144
+ * specifically that it must contain at least one valid parser
145
+ * that extends `ParamParser`. This ensures that the parsing
146
+ * process can be executed with at least one valid parser function.
147
+ *
148
+ * @example
149
+ * try {
150
+ * ParamParser.safeTryParsers(parameters, [], true);
151
+ * } catch (error) {
152
+ * const { ParsersArrayMustContainParsersError } = ParamParser
153
+ * if (error instanceof ParsersArrayMustContainParsersError) {
154
+ * console.error(
155
+ * 'The parsers array must contain at least one valid parser.'
156
+ * );
157
+ * }
158
+ * }
159
+ */
160
+ static get ParsersArrayMustContainParsersError(): {
161
+ new (message?: string | undefined): {
162
+ name: string;
163
+ message: string;
164
+ stack?: string | undefined;
165
+ cause?: unknown;
166
+ };
167
+ new (message?: string | undefined, options?: ErrorOptions | undefined): {
168
+ name: string;
169
+ message: string;
170
+ stack?: string | undefined;
171
+ cause?: unknown;
172
+ };
173
+ captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void;
174
+ prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
175
+ stackTraceLimit: number;
176
+ };
177
+ /**
178
+ * Constructs an instance of ParamParser. It takes in parameters, an optional
179
+ * validator function, and an optional parser function. The parameters are
180
+ * validated and if successful, parsed.
181
+ *
182
+ * @param {any[]} parameters - Arguments passed in by the process.
183
+ * @param {((any[]) => boolean)?} [validator=() => {}] - An optional function
184
+ * to specify a validator without subclassing ParamParser. It should return
185
+ * a boolean indicating the validity of the parameters.
186
+ * @param {((any[]) => object)?} [parser=() => {}] - An optional function to
187
+ * specify a parser without subclassing ParamParser. It should return an
188
+ * object after parsing the input parameters.
189
+ *
190
+ * @example
191
+ * const parameters = ['param1', 'param2']
192
+ * const validator = params => params.every(param => typeof param === 'string')
193
+ * const parser = params => ({ params })
194
+ * const paramParser = new ParamParser(parameters, validator, parser)
195
+ * if (paramParser.success) {
196
+ * console.log('Parsing successful:', paramParser.results)
197
+ * } else {
198
+ * console.error('Parsing failed.')
199
+ * }
200
+ */
201
+ constructor(parameters: any[], validator?: () => void, parser?: () => void);
202
+ args: any[];
203
+ parser: () => void;
204
+ validator: () => void;
205
+ result: any;
206
+ success: boolean;
207
+ results: object | undefined;
208
+ /**
209
+ * @param {object} args arguments that were previously validated
210
+ * by either the overloaded validate() method or the supplied
211
+ * validator closure.
212
+ * @returns {object} returns the output object, or an empty
213
+ * object, after parsing the input arguments or parameters.
214
+ */
215
+ parse(args: object): object;
216
+ /**
217
+ * Walk the arguments and determine if the supplied input is
218
+ * a valid parsing.
219
+ *
220
+ * @param {any[]} args arguments supplied by the process.
221
+ * @returns {boolean} `true` if the validation is successful,
222
+ * `false` otherwise.
223
+ */
224
+ validate(args: any[]): boolean;
225
+ }
226
+ export const ParamParserExtensions: Extension;
227
+ import { Extension } from '@nejs/extension';
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParamParserExtensions = exports.ParamParser = void 0;
4
+ const extension_1 = require("@nejs/extension");
5
+ class ParamParser {
6
+ /**
7
+ * Constructs an instance of ParamParser. It takes in parameters, an optional
8
+ * validator function, and an optional parser function. The parameters are
9
+ * validated and if successful, parsed.
10
+ *
11
+ * @param {any[]} parameters - Arguments passed in by the process.
12
+ * @param {((any[]) => boolean)?} [validator=() => {}] - An optional function
13
+ * to specify a validator without subclassing ParamParser. It should return
14
+ * a boolean indicating the validity of the parameters.
15
+ * @param {((any[]) => object)?} [parser=() => {}] - An optional function to
16
+ * specify a parser without subclassing ParamParser. It should return an
17
+ * object after parsing the input parameters.
18
+ *
19
+ * @example
20
+ * const parameters = ['param1', 'param2']
21
+ * const validator = params => params.every(param => typeof param === 'string')
22
+ * const parser = params => ({ params })
23
+ * const paramParser = new ParamParser(parameters, validator, parser)
24
+ * if (paramParser.success) {
25
+ * console.log('Parsing successful:', paramParser.results)
26
+ * } else {
27
+ * console.error('Parsing failed.')
28
+ * }
29
+ */
30
+ constructor(parameters, validator = () => { }, parser = () => { }) {
31
+ this.args = parameters;
32
+ this.parser = parser;
33
+ this.validator = validator;
34
+ this.result = undefined;
35
+ this.success = this.validate(this.args);
36
+ if (this.success) {
37
+ this.results = this.parse(this.args);
38
+ }
39
+ }
40
+ /**
41
+ * @param {object} args arguments that were previously validated
42
+ * by either the overloaded validate() method or the supplied
43
+ * validator closure.
44
+ * @returns {object} returns the output object, or an empty
45
+ * object, after parsing the input arguments or parameters.
46
+ */
47
+ parse(args) {
48
+ return this.parser?.(args);
49
+ }
50
+ /**
51
+ * Walk the arguments and determine if the supplied input is
52
+ * a valid parsing.
53
+ *
54
+ * @param {any[]} args arguments supplied by the process.
55
+ * @returns {boolean} `true` if the validation is successful,
56
+ * `false` otherwise.
57
+ */
58
+ validate(args) {
59
+ return this.validator?.(args);
60
+ }
61
+ /**
62
+ * Attempts to parse the given parameters using the provided parsers, throwing an
63
+ * error if no valid parser is found. This method serves as a convenience wrapper
64
+ * around `safeTryParsers`, enforcing strict parsing by automatically enabling
65
+ * error throwing on failure.
66
+ *
67
+ * @param {any[]} parameters - The parameters to be parsed.
68
+ * @param {Function[]} parsers - An array of `ParamParser` subclasses to attempt
69
+ * parsing with.
70
+ * @returns {Object} An object containing the parsing result, with a `success`
71
+ * property indicating if parsing was successful, and a `data` property containing
72
+ * the parsed data if successful.
73
+ * @example
74
+ * const parameters = ['param1', 'param2'];
75
+ * const parsers = [Parser1, Parser2];
76
+ * const result = ParamParser.tryParsers(parameters, parsers);
77
+ * if (result.success) {
78
+ * console.log('Parsing successful:', result.data);
79
+ * } else {
80
+ * console.error('Parsing failed.');
81
+ * }
82
+ */
83
+ static tryParsers(parameters, parsers) {
84
+ return this.safeTryParsers(parameters, parsers, true);
85
+ }
86
+ /**
87
+ * Tries parsing `parameters` with each parser in `parsers`. If
88
+ * `throwOnFail` is true, throws an error when validation fails or
89
+ * no valid parser is found.
90
+ *
91
+ * This method attempts to parse the given parameters using the
92
+ * provided list of parsers. It validates the input to ensure both
93
+ * `parameters` and `parsers` are arrays and that `parsers`
94
+ * contains at least one valid `ParamParser` subclass. If
95
+ * `throwOnFail` is set to true, it will throw specific errors for
96
+ * invalid inputs or when no parser succeeds. Otherwise, it returns
97
+ * an object indicating the success status and the result of
98
+ * parsing, if successful.
99
+ *
100
+ * @param {any[]} parameters - The parameters to be parsed.
101
+ * @param {Function[]} parsers - An array of `ParamParser`
102
+ * subclasses to attempt parsing with.
103
+ * @param {boolean} [throwOnFail=false] - Whether to throw an
104
+ * error on failure.
105
+ * @returns {{success: boolean, data: any}} An object with a
106
+ * `success` flag and `data` containing the parsing result, if
107
+ * successful.
108
+ * @throws {ParametersMustBeArrayError} If `parameters` or
109
+ * `parsers` are not arrays when `throwOnFail` is true.
110
+ * @throws {ParsersArrayMustContainParsersError} If `parsers`
111
+ * does not contain at least one valid `ParamParser` subclass
112
+ * when `throwOnFail` is true.
113
+ * @throws {NoValidParsersFound} If no valid parser is found
114
+ * and `throwOnFail` is true.
115
+ * @example
116
+ * const parameters = ['param1', 'param2'];
117
+ * const parsers = [Parser1, Parser2];
118
+ * const result = ParamParser.safeTryParsers(
119
+ * parameters, parsers, true
120
+ * );
121
+ *
122
+ * if (result.success) {
123
+ * console.log('Parsing successful:', result.data);
124
+ * } else {
125
+ * console.error('Parsing failed.');
126
+ * }
127
+ */
128
+ static safeTryParsers(parameters, parsers, throwOnFail = false) {
129
+ if (!Array.isArray(parameters) || !Array.isArray(parsers)) {
130
+ if (throwOnFail) {
131
+ throw new this.ParametersMustBeArrayError(`${this.name}.tryParsers must receive two arrays as args`);
132
+ }
133
+ }
134
+ if (!parsers.some(parser => parser?.prototype instanceof ParamParser &&
135
+ typeof parser === 'function')) {
136
+ if (throwOnFail) {
137
+ throw new this.ParsersArrayMustContainParsersError(`${this.name}.tryParsers parsers argument must contain at least one ` +
138
+ `ParamParser derived class`);
139
+ }
140
+ }
141
+ let success = false;
142
+ let result = undefined;
143
+ for (let Parser of parsers) {
144
+ const parser = new Parser(parameters);
145
+ if (parser.success) {
146
+ success = true;
147
+ result = parser.result;
148
+ break;
149
+ }
150
+ }
151
+ if (!success && throwOnFail) {
152
+ throw new this.NoValidParsersFound('No valid parsers found');
153
+ }
154
+ return { success, data: result };
155
+ }
156
+ /**
157
+ * A custom error class that signifies no valid parsers were found
158
+ * during the parsing process. This error is thrown when all
159
+ * parsers fail to parse the given parameters and the `throwOnFail`
160
+ * flag is set to true in the `safeTryParsers` method.
161
+ *
162
+ * @returns {Function} A class extending Error, representing a
163
+ * specific error when no valid parsers are found.ound.
164
+ *
165
+ * @example
166
+ * try {
167
+ * const result = ParamParser.safeTryParsers(
168
+ * parameters, parsers, true
169
+ * );
170
+ * } catch (error) {
171
+ * if (error instanceof ParamParser.NoValidParsersFound) {
172
+ * console.error(
173
+ * 'No valid parsers could process the parameters.'
174
+ * );
175
+ * }
176
+ * }
177
+ */
178
+ static get NoValidParsersFound() {
179
+ return class NoValidParsersFound extends Error {
180
+ };
181
+ }
182
+ /**
183
+ * Represents an error thrown when the parameters provided to a method
184
+ * are not in an array format as expected. This class extends the
185
+ * native JavaScript `Error` class, allowing for instances of this
186
+ * error to be thrown and caught using standard error handling
187
+ * mechanisms in JavaScript.
188
+ *
189
+ * This error is specifically used in scenarios where a method
190
+ * expects its arguments to be provided as an array, and the
191
+ * validation of those arguments fails because they were not
192
+ * provided in an array format. It serves as a clear indicator
193
+ * of the nature of the error to developers, enabling them to
194
+ * quickly identify and rectify the issue in their code.
195
+ *
196
+ * @example
197
+ * try {
198
+ * ParamParser.safeTryParsers(nonArrayParameters, parsers, true);
199
+ * } catch (error) {
200
+ * if (error instanceof ParamParser.ParametersMustBeArrayError) {
201
+ * console.error('Parameters must be provided as an array.');
202
+ * }
203
+ * }
204
+ */
205
+ static get ParametersMustBeArrayError() {
206
+ return class ParametersMustBeArrayError extends Error {
207
+ };
208
+ }
209
+ /**
210
+ * A custom error class indicating that the parsers array does not
211
+ * contain valid parser functions. This error is thrown when the
212
+ * validation of parsers within `ParamParser.safeTryParsers` fails
213
+ * to find any instance that is a subclass of `ParamParser`. It
214
+ * extends the native JavaScript `Error` class, allowing it to be
215
+ * thrown and caught using standard error handling mechanisms.
216
+ *
217
+ * This error serves as a clear indicator to developers that the
218
+ * provided array of parsers does not meet the expected criteria,
219
+ * specifically that it must contain at least one valid parser
220
+ * that extends `ParamParser`. This ensures that the parsing
221
+ * process can be executed with at least one valid parser function.
222
+ *
223
+ * @example
224
+ * try {
225
+ * ParamParser.safeTryParsers(parameters, [], true);
226
+ * } catch (error) {
227
+ * const { ParsersArrayMustContainParsersError } = ParamParser
228
+ * if (error instanceof ParsersArrayMustContainParsersError) {
229
+ * console.error(
230
+ * 'The parsers array must contain at least one valid parser.'
231
+ * );
232
+ * }
233
+ * }
234
+ */
235
+ static get ParsersArrayMustContainParsersError() {
236
+ return class ParsersArrayMustContainParsersError extends Error {
237
+ };
238
+ }
239
+ }
240
+ exports.ParamParser = ParamParser;
241
+ exports.ParamParserExtensions = new extension_1.Extension(ParamParser);
242
+ //# sourceMappingURL=param.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param.parser.js","sourceRoot":"","sources":["../../../src/classes/param.parser.js"],"names":[],"mappings":"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"}