@nejs/basic-extensions 2.21.0 → 2.22.6

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 (270) hide show
  1. package/.idea/markdown.xml +8 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/ne-basic-extensions.iml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/CODE_STYLE.md +393 -0
  6. package/CODING_PHILOSOPHY.md +36 -0
  7. package/DOCUMENTATION_GUIDELINES.md +221 -0
  8. package/README.md +78 -4
  9. package/dist/@nejs/basic-extensions.bundle.2.22.6.js +25 -0
  10. package/dist/@nejs/basic-extensions.bundle.2.22.6.js.map +7 -0
  11. package/dist/cjs/classes/index.cjs +11129 -0
  12. package/dist/cjs/classes/index.cjs.map +7 -0
  13. package/dist/cjs/index.cjs +15191 -0
  14. package/dist/cjs/index.cjs.map +7 -0
  15. package/dist/cjs/utils/index.cjs +3954 -0
  16. package/dist/cjs/utils/index.cjs.map +7 -0
  17. package/dist/esm/basic-extensions.mjs +25 -0
  18. package/dist/esm/basic-extensions.mjs.map +7 -0
  19. package/package.json +16 -22
  20. package/repl.bootstrap.js +4 -7
  21. package/repl.history +30 -30
  22. package/src/big.int.extension.js +171 -45
  23. package/src/classes/enumeration.js +466 -0
  24. package/src/classes/index.js +5 -1
  25. package/src/index.js +5 -1
  26. package/src/math.extension.js +73 -0
  27. package/src/number.extension.js +18 -0
  28. package/src/regular.expression.extensions.js +0 -35
  29. package/src/utils/toolkit.js +699 -516
  30. package/tests/arrayextensions.test.js +3 -3
  31. package/tests/index.test.js +3 -1
  32. package/tests/newClasses/asyncIterable.test.js +3 -3
  33. package/tests/newClasses/deferred.test.js +3 -3
  34. package/tests/newClasses/descriptor.test.js +3 -3
  35. package/tests/newClasses/iterable.test.js +3 -3
  36. package/tests/newClasses/refmap.test.js +3 -3
  37. package/tests/newClasses/refset.test.js +3 -3
  38. package/tests/objectextensions.test.js +3 -3
  39. package/tests/setextensions.test.js +3 -3
  40. package/tests/stringextensions.test.js +3 -2
  41. package/tests/utils/descriptor.utils.test.js +1 -1
  42. package/tests/utils/toolkit.test.js +429 -163
  43. package/.esdoc.json +0 -9
  44. package/.vscode/settings.json +0 -5
  45. package/bin/build +0 -27
  46. package/bin/clean +0 -14
  47. package/bin/esbuild +0 -91
  48. package/bin/fixup +0 -13
  49. package/bin/repl.basics.js +0 -584
  50. package/bin/repl.signature.js +0 -63
  51. package/bin/version +0 -100
  52. package/dist/@nejs/basic-extensions.bundle.2.21.0.js +0 -25
  53. package/dist/@nejs/basic-extensions.bundle.2.21.0.js.map +0 -7
  54. package/dist/cjs/array.extensions.d.ts +0 -39
  55. package/dist/cjs/array.extensions.js +0 -477
  56. package/dist/cjs/array.extensions.js.map +0 -1
  57. package/dist/cjs/big.int.extension.d.ts +0 -31
  58. package/dist/cjs/big.int.extension.js +0 -165
  59. package/dist/cjs/big.int.extension.js.map +0 -1
  60. package/dist/cjs/classes/asyncIterable.d.ts +0 -126
  61. package/dist/cjs/classes/asyncIterable.js +0 -209
  62. package/dist/cjs/classes/asyncIterable.js.map +0 -1
  63. package/dist/cjs/classes/deferred.d.ts +0 -146
  64. package/dist/cjs/classes/deferred.js +0 -291
  65. package/dist/cjs/classes/deferred.js.map +0 -1
  66. package/dist/cjs/classes/descriptor.d.ts +0 -334
  67. package/dist/cjs/classes/descriptor.js +0 -537
  68. package/dist/cjs/classes/descriptor.js.map +0 -1
  69. package/dist/cjs/classes/enum.d.ts +0 -50
  70. package/dist/cjs/classes/enum.js +0 -405
  71. package/dist/cjs/classes/enum.js.map +0 -1
  72. package/dist/cjs/classes/index.d.ts +0 -15
  73. package/dist/cjs/classes/index.js +0 -63
  74. package/dist/cjs/classes/index.js.map +0 -1
  75. package/dist/cjs/classes/introspector.d.ts +0 -20
  76. package/dist/cjs/classes/introspector.js +0 -130
  77. package/dist/cjs/classes/introspector.js.map +0 -1
  78. package/dist/cjs/classes/iterable.d.ts +0 -169
  79. package/dist/cjs/classes/iterable.js +0 -268
  80. package/dist/cjs/classes/iterable.js.map +0 -1
  81. package/dist/cjs/classes/param.parser.d.ts +0 -221
  82. package/dist/cjs/classes/param.parser.js +0 -242
  83. package/dist/cjs/classes/param.parser.js.map +0 -1
  84. package/dist/cjs/classes/pluggable.proxy.d.ts +0 -153
  85. package/dist/cjs/classes/pluggable.proxy.js +0 -444
  86. package/dist/cjs/classes/pluggable.proxy.js.map +0 -1
  87. package/dist/cjs/classes/property.d.ts +0 -79
  88. package/dist/cjs/classes/property.js +0 -284
  89. package/dist/cjs/classes/property.js.map +0 -1
  90. package/dist/cjs/classes/refmap.d.ts +0 -238
  91. package/dist/cjs/classes/refmap.js +0 -421
  92. package/dist/cjs/classes/refmap.js.map +0 -1
  93. package/dist/cjs/classes/refset.d.ts +0 -186
  94. package/dist/cjs/classes/refset.js +0 -370
  95. package/dist/cjs/classes/refset.js.map +0 -1
  96. package/dist/cjs/classes/symkeys.d.ts +0 -349
  97. package/dist/cjs/classes/symkeys.js +0 -510
  98. package/dist/cjs/classes/symkeys.js.map +0 -1
  99. package/dist/cjs/classes/type.d.ts +0 -56
  100. package/dist/cjs/classes/type.js +0 -405
  101. package/dist/cjs/classes/type.js.map +0 -1
  102. package/dist/cjs/function.extensions.d.ts +0 -12
  103. package/dist/cjs/function.extensions.js +0 -758
  104. package/dist/cjs/function.extensions.js.map +0 -1
  105. package/dist/cjs/global.this.d.ts +0 -2
  106. package/dist/cjs/global.this.js +0 -300
  107. package/dist/cjs/global.this.js.map +0 -1
  108. package/dist/cjs/index.d.ts +0 -31
  109. package/dist/cjs/index.js +0 -226
  110. package/dist/cjs/index.js.map +0 -1
  111. package/dist/cjs/json.extensions.d.ts +0 -2
  112. package/dist/cjs/json.extensions.js +0 -109
  113. package/dist/cjs/json.extensions.js.map +0 -1
  114. package/dist/cjs/map.extensions.d.ts +0 -3
  115. package/dist/cjs/map.extensions.js +0 -143
  116. package/dist/cjs/map.extensions.js.map +0 -1
  117. package/dist/cjs/number.extension.d.ts +0 -44
  118. package/dist/cjs/number.extension.js +0 -261
  119. package/dist/cjs/number.extension.js.map +0 -1
  120. package/dist/cjs/object.extensions.d.ts +0 -33
  121. package/dist/cjs/object.extensions.js +0 -1091
  122. package/dist/cjs/object.extensions.js.map +0 -1
  123. package/dist/cjs/package.json +0 -3
  124. package/dist/cjs/proxy.extensions.d.ts +0 -2
  125. package/dist/cjs/proxy.extensions.js +0 -207
  126. package/dist/cjs/proxy.extensions.js.map +0 -1
  127. package/dist/cjs/reflect.extensions.d.ts +0 -14
  128. package/dist/cjs/reflect.extensions.js +0 -316
  129. package/dist/cjs/reflect.extensions.js.map +0 -1
  130. package/dist/cjs/regular.expression.extensions.d.ts +0 -2
  131. package/dist/cjs/regular.expression.extensions.js +0 -423
  132. package/dist/cjs/regular.expression.extensions.js.map +0 -1
  133. package/dist/cjs/set.extensions.d.ts +0 -40
  134. package/dist/cjs/set.extensions.js +0 -355
  135. package/dist/cjs/set.extensions.js.map +0 -1
  136. package/dist/cjs/string.extensions.d.ts +0 -23
  137. package/dist/cjs/string.extensions.js +0 -704
  138. package/dist/cjs/string.extensions.js.map +0 -1
  139. package/dist/cjs/symbol.extensions.d.ts +0 -11
  140. package/dist/cjs/symbol.extensions.js +0 -735
  141. package/dist/cjs/symbol.extensions.js.map +0 -1
  142. package/dist/cjs/utils/copy.object.d.ts +0 -408
  143. package/dist/cjs/utils/copy.object.js +0 -720
  144. package/dist/cjs/utils/copy.object.js.map +0 -1
  145. package/dist/cjs/utils/descriptor.utils.d.ts +0 -298
  146. package/dist/cjs/utils/descriptor.utils.js +0 -889
  147. package/dist/cjs/utils/descriptor.utils.js.map +0 -1
  148. package/dist/cjs/utils/index.d.ts +0 -75
  149. package/dist/cjs/utils/index.js +0 -61
  150. package/dist/cjs/utils/index.js.map +0 -1
  151. package/dist/cjs/utils/stdout.d.ts +0 -742
  152. package/dist/cjs/utils/stdout.js +0 -1042
  153. package/dist/cjs/utils/stdout.js.map +0 -1
  154. package/dist/cjs/utils/toolkit.d.ts +0 -1898
  155. package/dist/cjs/utils/toolkit.js +0 -1378
  156. package/dist/cjs/utils/toolkit.js.map +0 -1
  157. package/dist/cjs/weakref.extensions.d.ts +0 -2
  158. package/dist/cjs/weakref.extensions.js +0 -19
  159. package/dist/cjs/weakref.extensions.js.map +0 -1
  160. package/dist/mjs/array.extensions.d.ts +0 -39
  161. package/dist/mjs/array.extensions.js +0 -474
  162. package/dist/mjs/array.extensions.js.map +0 -1
  163. package/dist/mjs/big.int.extension.d.ts +0 -31
  164. package/dist/mjs/big.int.extension.js +0 -162
  165. package/dist/mjs/big.int.extension.js.map +0 -1
  166. package/dist/mjs/classes/asyncIterable.d.ts +0 -126
  167. package/dist/mjs/classes/asyncIterable.js +0 -204
  168. package/dist/mjs/classes/asyncIterable.js.map +0 -1
  169. package/dist/mjs/classes/deferred.d.ts +0 -146
  170. package/dist/mjs/classes/deferred.js +0 -287
  171. package/dist/mjs/classes/deferred.js.map +0 -1
  172. package/dist/mjs/classes/descriptor.d.ts +0 -334
  173. package/dist/mjs/classes/descriptor.js +0 -533
  174. package/dist/mjs/classes/descriptor.js.map +0 -1
  175. package/dist/mjs/classes/enum.d.ts +0 -50
  176. package/dist/mjs/classes/enum.js +0 -400
  177. package/dist/mjs/classes/enum.js.map +0 -1
  178. package/dist/mjs/classes/index.d.ts +0 -15
  179. package/dist/mjs/classes/index.js +0 -46
  180. package/dist/mjs/classes/index.js.map +0 -1
  181. package/dist/mjs/classes/introspector.d.ts +0 -20
  182. package/dist/mjs/classes/introspector.js +0 -126
  183. package/dist/mjs/classes/introspector.js.map +0 -1
  184. package/dist/mjs/classes/iterable.d.ts +0 -169
  185. package/dist/mjs/classes/iterable.js +0 -263
  186. package/dist/mjs/classes/iterable.js.map +0 -1
  187. package/dist/mjs/classes/param.parser.d.ts +0 -221
  188. package/dist/mjs/classes/param.parser.js +0 -238
  189. package/dist/mjs/classes/param.parser.js.map +0 -1
  190. package/dist/mjs/classes/pluggable.proxy.d.ts +0 -153
  191. package/dist/mjs/classes/pluggable.proxy.js +0 -438
  192. package/dist/mjs/classes/pluggable.proxy.js.map +0 -1
  193. package/dist/mjs/classes/property.d.ts +0 -79
  194. package/dist/mjs/classes/property.js +0 -280
  195. package/dist/mjs/classes/property.js.map +0 -1
  196. package/dist/mjs/classes/refmap.d.ts +0 -238
  197. package/dist/mjs/classes/refmap.js +0 -417
  198. package/dist/mjs/classes/refmap.js.map +0 -1
  199. package/dist/mjs/classes/refset.d.ts +0 -186
  200. package/dist/mjs/classes/refset.js +0 -366
  201. package/dist/mjs/classes/refset.js.map +0 -1
  202. package/dist/mjs/classes/symkeys.d.ts +0 -349
  203. package/dist/mjs/classes/symkeys.js +0 -506
  204. package/dist/mjs/classes/symkeys.js.map +0 -1
  205. package/dist/mjs/classes/type.d.ts +0 -56
  206. package/dist/mjs/classes/type.js +0 -401
  207. package/dist/mjs/classes/type.js.map +0 -1
  208. package/dist/mjs/function.extensions.d.ts +0 -12
  209. package/dist/mjs/function.extensions.js +0 -755
  210. package/dist/mjs/function.extensions.js.map +0 -1
  211. package/dist/mjs/global.this.d.ts +0 -2
  212. package/dist/mjs/global.this.js +0 -264
  213. package/dist/mjs/global.this.js.map +0 -1
  214. package/dist/mjs/index.d.ts +0 -31
  215. package/dist/mjs/index.js +0 -204
  216. package/dist/mjs/index.js.map +0 -1
  217. package/dist/mjs/json.extensions.d.ts +0 -2
  218. package/dist/mjs/json.extensions.js +0 -106
  219. package/dist/mjs/json.extensions.js.map +0 -1
  220. package/dist/mjs/map.extensions.d.ts +0 -3
  221. package/dist/mjs/map.extensions.js +0 -140
  222. package/dist/mjs/map.extensions.js.map +0 -1
  223. package/dist/mjs/number.extension.d.ts +0 -44
  224. package/dist/mjs/number.extension.js +0 -258
  225. package/dist/mjs/number.extension.js.map +0 -1
  226. package/dist/mjs/object.extensions.d.ts +0 -33
  227. package/dist/mjs/object.extensions.js +0 -1088
  228. package/dist/mjs/object.extensions.js.map +0 -1
  229. package/dist/mjs/package.json +0 -3
  230. package/dist/mjs/proxy.extensions.d.ts +0 -2
  231. package/dist/mjs/proxy.extensions.js +0 -204
  232. package/dist/mjs/proxy.extensions.js.map +0 -1
  233. package/dist/mjs/reflect.extensions.d.ts +0 -14
  234. package/dist/mjs/reflect.extensions.js +0 -313
  235. package/dist/mjs/reflect.extensions.js.map +0 -1
  236. package/dist/mjs/regular.expression.extensions.d.ts +0 -2
  237. package/dist/mjs/regular.expression.extensions.js +0 -420
  238. package/dist/mjs/regular.expression.extensions.js.map +0 -1
  239. package/dist/mjs/set.extensions.d.ts +0 -40
  240. package/dist/mjs/set.extensions.js +0 -352
  241. package/dist/mjs/set.extensions.js.map +0 -1
  242. package/dist/mjs/string.extensions.d.ts +0 -23
  243. package/dist/mjs/string.extensions.js +0 -701
  244. package/dist/mjs/string.extensions.js.map +0 -1
  245. package/dist/mjs/symbol.extensions.d.ts +0 -11
  246. package/dist/mjs/symbol.extensions.js +0 -732
  247. package/dist/mjs/symbol.extensions.js.map +0 -1
  248. package/dist/mjs/utils/copy.object.d.ts +0 -408
  249. package/dist/mjs/utils/copy.object.js +0 -702
  250. package/dist/mjs/utils/copy.object.js.map +0 -1
  251. package/dist/mjs/utils/descriptor.utils.d.ts +0 -298
  252. package/dist/mjs/utils/descriptor.utils.js +0 -875
  253. package/dist/mjs/utils/descriptor.utils.js.map +0 -1
  254. package/dist/mjs/utils/index.d.ts +0 -75
  255. package/dist/mjs/utils/index.js +0 -45
  256. package/dist/mjs/utils/index.js.map +0 -1
  257. package/dist/mjs/utils/stdout.d.ts +0 -742
  258. package/dist/mjs/utils/stdout.js +0 -1037
  259. package/dist/mjs/utils/stdout.js.map +0 -1
  260. package/dist/mjs/utils/toolkit.d.ts +0 -1898
  261. package/dist/mjs/utils/toolkit.js +0 -1373
  262. package/dist/mjs/utils/toolkit.js.map +0 -1
  263. package/dist/mjs/weakref.extensions.d.ts +0 -2
  264. package/dist/mjs/weakref.extensions.js +0 -16
  265. package/dist/mjs/weakref.extensions.js.map +0 -1
  266. package/jsdoc-config.json +0 -31
  267. package/tsconfig.base.json +0 -28
  268. package/tsconfig.cjs.json +0 -8
  269. package/tsconfig.esm.json +0 -8
  270. package/vitest.config.js +0 -7
@@ -1,370 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RefSetExtensions = exports.RefSet = void 0;
4
- const extension_1 = require("@nejs/extension");
5
- /**
6
- * RefSet class extends the standard Set object to manage a collection of
7
- * WeakRef objects. It provides additional functionality such as objectification
8
- * of values and various utility methods.
9
- *
10
- * Unlike standard Sets or Arrays, RefSet stores weak references to objects,
11
- * allowing them to be garbage-collected if there are no other references to
12
- * them. This behavior is different from Arrays and standard Sets, which
13
- * maintain strong references to their elements.
14
- *
15
- * @extends Set
16
- */
17
- class RefSet extends Set {
18
- /**
19
- * Private field to track whether the RefSet should objectify primitive
20
- * values.
21
- *
22
- * @private
23
- */
24
- #objectifyValues = false;
25
- /**
26
- * Method to control whether the RefSet should objectify its values. When
27
- * objectifying, primitive values (number, string, boolean, bigint) are
28
- * converted to their respective object types, which allows them to be used as
29
- * WeakRef targets.
30
- *
31
- * @param {boolean} setObjectification - Flag to enable or disable
32
- * objectification.
33
- * @returns {RefSet} - The current RefSet instance to allow method chaining.
34
- */
35
- objectifying(setObjectification = true) {
36
- this.objectifyValues = setObjectification;
37
- return this;
38
- }
39
- /**
40
- * Returns the state indicating whether or not `RefSet` will attempt to
41
- * convert non-valid primitives into targets that are valid input for
42
- * new `WeakRef` object instances. If this value is `false` then no
43
- * *objectification* will occur.
44
- *
45
- * @returns {boolean} The current state of objectifyValues.
46
- */
47
- get objectifyValues() {
48
- return this.#objectifyValues;
49
- }
50
- /**
51
- * Setting this value to true, will cause all added values to the Set to
52
- * be analyzed for validity as a candidate to be wrapped in a `WeakRef`
53
- * object. If true, and if possible, the object will be turned into an
54
- * `Object` variant first. This will also enable less rigid variable
55
- * comparison in the `.has()` method (i.e. `==` instead of `===`).
56
- *
57
- * @param {boolean} value - The new state to set for objectifyValues.
58
- */
59
- set objectifyValues(value) {
60
- this.#objectifyValues = !!value;
61
- }
62
- /**
63
- * Overrides the add method of Set. Adds a value to the RefSet, converting it
64
- * to a WeakRef. Throws an error if the value is not a valid WeakRef target
65
- * (e.g., null, undefined, or a registered symbol). If `objectifyValues` is
66
- * enabled, an attempt to convert primitives to their object variants will be
67
- * made. These are numbers, strings, boolean values and big integers.
68
- *
69
- * @param {*} value - The value to be added to the RefSet.
70
- * @throws {TypeError} If the value is not a valid WeakRef target.
71
- */
72
- add(value) {
73
- // Objectify the value if needed
74
- if (this.#objectifyValues && (typeof value === 'number' ||
75
- typeof value === 'string' ||
76
- typeof value === 'boolean' ||
77
- typeof value === 'bigint')) {
78
- value = Object(value);
79
- }
80
- // Check if the value is an object, and if it's a symbol, ensure it's not registered
81
- if (typeof value === 'symbol' && Symbol.keyFor(value) !== undefined) {
82
- throw new TypeError('RefSet cannot accept registered symbols as values');
83
- }
84
- if (typeof value !== 'object' && typeof value !== 'symbol') {
85
- throw new TypeError('RefSet values must be objects, non-registered symbols, or objectified primitives');
86
- }
87
- // If the value is null or undefined, throw an error
88
- if (value === null || value === undefined) {
89
- throw new TypeError('RefSet values cannot be null or undefined');
90
- }
91
- super.add(new WeakRef(value));
92
- }
93
- /**
94
- * Adds multiple values to the RefSet. The supplied `values` should be
95
- * iterable and truthy. This function defers to `.add()` for its logic so
96
- * each value from the supplied collection of values will also be subject
97
- * to the criteria of that function.
98
- *
99
- * @param {Iterable} values - An iterable of values to add to the RefSet.
100
- * @throws {TypeError} If the supplied values are falsey or non-iterable.
101
- */
102
- addAll(values) {
103
- if (!values ||
104
- (typeof values !== 'object') ||
105
- !Reflect.has(values, Symbol.iterator)) {
106
- throw new TypeError('The supplied values are either falsey or non-iterable');
107
- }
108
- for (const value of values) {
109
- this.add(value);
110
- }
111
- }
112
- /**
113
- * Removes all elements from the RefSet that have been garbage collected
114
- * (i.e., their WeakRef no longer points to an object).
115
- *
116
- * @returns {RefSet} - The current RefSet instance to allow method chaining.
117
- */
118
- clean() {
119
- for (const ref of this) {
120
- if (!ref.deref()) {
121
- this.delete(ref);
122
- }
123
- }
124
- return this;
125
- }
126
- /**
127
- * Executes a provided function once for each value in the RefSet. The callback
128
- * function receives the dereferenced value, the value again (as RefSet doesn't
129
- * use keys), and the RefSet itself. This method provides a way to iterate over
130
- * and apply operations to the values stored in the RefSet, taking into account
131
- * that they are weak references and may have been garbage-collected.
132
- *
133
- * @param {Function} forEachFn - Function to execute for each element. It
134
- * takes three arguments: element, element (again, as RefSet has no key), and
135
- * the RefSet itself.
136
- * @param {*} thisArg - Value to use as `this` when executing `forEachFn`.
137
- */
138
- entries() {
139
- const refEntries = Array.from(super.entries());
140
- return refEntries
141
- .map(([_, ref]) => [ref.deref(), ref.deref()])
142
- .filter(([_, value]) => !!value);
143
- }
144
- /**
145
- * Iterate over the items in the set and pass them to the supplied
146
- * function ala `Array.prototype.forEach`. Note however, there are no
147
- * indexes on Sets and as such, the index parameter of the callback
148
- * will always be `NaN`. Subsequently the `array` or third parameter
149
- * will receive the set instance rather than an array.
150
- *
151
- * @param {function} forEachFn the function to use for each element in
152
- * the set.
153
- * @param {object} thisArg the `this` argument to be applied to each
154
- * invocation of the `forEachFn` callback. Note, this value is unable
155
- * to be applied if the `forEachFn` is a big arrow function
156
- */
157
- forEach(forEachFn, thisArg) {
158
- const set = this;
159
- super.forEach(function (ref) {
160
- const value = ref.deref();
161
- if (!value) {
162
- return;
163
- }
164
- forEachFn.call(thisArg, value, value, set);
165
- });
166
- }
167
- /**
168
- * Returns an iterator for the values in the RefSet. Each value is
169
- * dereferenced from its WeakRef before being returned. This method allows
170
- * iterating over he set's values, similar to how one would iterate over
171
- * values in a standard Set or Array, but with the understanding that the
172
- * values are weakly referenced and may no longer exist (in which case
173
- * they are skipped).
174
- *
175
- * @returns {Iterator} An iterator for the values.
176
- */
177
- values() {
178
- const values = [];
179
- for (const value of this) {
180
- const dereferenced = value.deref();
181
- if (dereferenced) {
182
- values.push(dereferenced);
183
- }
184
- }
185
- return values;
186
- }
187
- /**
188
- * Returns an iterator for the keys of the RefSet. In RefSet, keys and
189
- * values are identical, so this method behaves the same as `values()`. It
190
- * provides compatibility with the standard Set interface and allows use in
191
- * contexts where keys are expected, despite RefSet not differentiating
192
- * between keys and values.
193
- *
194
- * @returns {Iterator} An iterator for the keys.
195
- */
196
- keys() {
197
- return this.values();
198
- }
199
- /**
200
- * Determines whether an element with the specified value exists in the
201
- * `RefSet`. For non-objectified sets, this method checks if the dereferenced
202
- * values of the set include the specified value.
203
- *
204
- * For objectified sets, it uses the `contains` method which accounts for
205
- * the objectification. This method differs from standard Set `has` in that
206
- * it works with weak references and considers objectification settings.
207
- *
208
- * @param {*} value - The value to check for presence in the RefSet.
209
- * @returns {boolean} - True if an element with the specified value exists
210
- * in the RefSet, false otherwise.
211
- */
212
- has(value) {
213
- if (this.#objectifyValues) {
214
- return this.contains(value);
215
- }
216
- for (const item of this.values()) {
217
- if (item === value) {
218
- return true;
219
- }
220
- }
221
- return false;
222
- }
223
- /**
224
- * Checks if the RefSet contains a value that is equal to the specified
225
- * value. This method is used primarily in objectified RefSets to determine
226
- * the presence of a value, taking into account objectification. It differs
227
- * from the `has` method in that it's tailored for sets that have
228
- * transformed their primitive values into objects, whereas `has` is more
229
- * general-purpose.
230
- *
231
- * @param {*} value - The value to search for in the RefSet.
232
- * @returns {boolean} - True if the RefSet contains the value, false otherwise.
233
- */
234
- contains(value) {
235
- return !!(Array.from(this.values())
236
- .filter(dereferencedValue => {
237
- return value == dereferencedValue;
238
- })
239
- .length);
240
- }
241
- /**
242
- * Creates a new array with all elements that pass the test implemented by
243
- * the provided function. This method iterates over each element,
244
- * dereferences it, and applies the filter function. Unlike Array `filter`,
245
- * the callback receives the dereferenced value and not an index or array,
246
- * reflecting the non-indexed nature of RefSet. Useful for selectively
247
- * creating arrays from the set based on certain conditions, especially when
248
- * dealing with weak references.
249
- *
250
- * @param {Function} filterFn - Function to test each element of the RefSet.
251
- * The function receives the dereferenced value.
252
- * @param {*} thisArg - Value to use as `this` when executing `filterFn`.
253
- * @returns {Array} - A new array with the elements that pass the test.
254
- */
255
- filter(filterFn, thisArg) {
256
- const results = [];
257
- for (const value of this) {
258
- const dereferenced = value?.deref();
259
- if (dereferenced) {
260
- const include = filterFn.call(thisArg, dereferenced, NaN, this);
261
- if (include) {
262
- results.push(dereferenced);
263
- }
264
- }
265
- }
266
- return results;
267
- }
268
- /**
269
- * Returns the value of the first element in the RefSet that satisfies the
270
- * provided testing function. Similar to Array `find`, this method iterates
271
- * over the RefSet, dereferencing each value and applying the testing
272
- * function. The non-indexed nature of RefSet is considered, as the
273
- * callback does not receive an index. This method is useful for finding a
274
- * specific element based on a condition.
275
- *
276
- * @param {*} thisArg - Value to use as this when executing findFn.
277
- * @returns {*} - The value of the first element in the RefSet that satisfies
278
- * the testing function, or undefined if none found.
279
- * @returns {any} the dereferenced value if found, or undefined otherwise
280
- */
281
- find(findFn, thisArg) {
282
- for (const value of this) {
283
- const dereferenced = value?.deref();
284
- if (dereferenced) {
285
- const found = findFn.call(thisArg, dereferenced, NaN, this);
286
- if (found) {
287
- return dereferenced;
288
- }
289
- }
290
- }
291
- return undefined;
292
- }
293
- /**
294
- * Creates a new array or `RefSet` with the results of calling a provided
295
- * function on every element in the calling `RefSet`. This method dereferences
296
- * each value, applies the `mapFn`, and collects the results. If `toRefSet` is
297
- * `true`, a new `RefSet` is returned; otherwise, an array. This method
298
- * differs from `Array.map` in handling weak references and the potential to
299
- * return a new `RefSet` instead of an array.
300
- *
301
- * @param {Function} mapFn - Function that produces an element of the new
302
- * array or `RefSet`, taking three arguments.
303
- * @param {*} thisArg - Value to use as this when executing mapFn.
304
- * @param {boolean} toRefSet - Determines if the output should be a new
305
- * `RefSet` (`true`) or an array (`false`).
306
- * @param {boolean} mirrorObjectification - If `true` and `toRefSet` is
307
- * `true`, the new `RefSet` mirrors the objectification setting of the
308
- * original.
309
- * @returns {Array|RefSet} - A new array or `RefSet` with each element being
310
- * the result of the `mapFn`.
311
- */
312
- map(mapFn, thisArg, toRefSet, mirrorObjectification) {
313
- const mapped = [];
314
- let validRefSetOutput = true;
315
- let validRefSetOutputIfObjectified = true;
316
- for (const value of this) {
317
- const dereferenced = value?.deref();
318
- if (dereferenced) {
319
- const mappedItem = mapFn.call(thisArg, dereferenced, NaN, this);
320
- if (validRefSetOutput || validRefSetOutputIfObjectified) {
321
- const weakReferenceable = this.#validWeakRefTarget(mappedItem);
322
- if (!weakReferenceable) {
323
- validRefSetOutput = false;
324
- if (validRefSetOutputIfObjectified) {
325
- validRefSetOutputIfObjectified =
326
- this.#validWeakRefTarget(Object(mappedItem));
327
- }
328
- }
329
- }
330
- mapped.push(mappedItem);
331
- }
332
- }
333
- if (toRefSet) {
334
- if (validRefSetOutput) {
335
- return new RefSet(mapped).objectifying(mirrorObjectification ? this.objectifyValues : false);
336
- }
337
- if (validRefSetOutputIfObjectified) {
338
- return new RefSet(mapped.map(value => {
339
- return this.#validWeakRefTarget(value) ? value : Object(value);
340
- })).objectifying();
341
- }
342
- }
343
- return mapped;
344
- }
345
- /**
346
- * Ensures that the constructor of this object instance's name
347
- * is returned if the string tag for this instance is queried
348
- *
349
- * @returns {string} the name of the class
350
- */
351
- get [Symbol.toStringTag]() {
352
- return this.constructor.name;
353
- }
354
- /**
355
- * Private method to check if a given value is a valid target for a WeakRef.
356
- *
357
- * @param {*} value - The value to check for validity as a WeakRef target.
358
- * @returns {boolean} - True if the value is a valid WeakRef target,
359
- * false otherwise.
360
- * @private
361
- */
362
- #validWeakRefTarget(value) {
363
- return !((typeof value === 'symbol' && Symbol.keyFor(value) === undefined) ||
364
- (typeof value !== 'object' && typeof value !== 'symbol') ||
365
- (value === null || value === undefined));
366
- }
367
- }
368
- exports.RefSet = RefSet;
369
- exports.RefSetExtensions = new extension_1.Extension(RefSet);
370
- //# sourceMappingURL=refset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refset.js","sourceRoot":"","sources":["../../../src/classes/refset.js"],"names":[],"mappings":"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"}