@nejs/basic-extensions 2.7.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 (270) 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/src/array.extensions.js +322 -0
  150. package/src/big.int.extension.js +163 -0
  151. package/src/{newClasses → classes}/descriptor.js +16 -12
  152. package/src/classes/index.js +51 -0
  153. package/src/classes/introspector.js +167 -0
  154. package/src/classes/param.parser.js +253 -0
  155. package/src/classes/pluggable.proxy.js +485 -0
  156. package/src/{newClasses → classes}/refmap.js +5 -3
  157. package/src/classes/symkeys.js +464 -0
  158. package/src/classes/type.js +427 -0
  159. package/src/function.extensions.js +818 -0
  160. package/src/global.this.js +304 -0
  161. package/src/index.js +56 -23
  162. package/src/json.extensions.js +108 -0
  163. package/src/map.extensions.js +144 -0
  164. package/src/number.extension.js +273 -0
  165. package/src/object.extensions.js +1222 -0
  166. package/src/proxy.extensions.js +229 -0
  167. package/src/reflect.extensions.js +346 -0
  168. package/src/regular.expression.extensions.js +451 -0
  169. package/src/{setextensions.js → set.extensions.js} +151 -2
  170. package/src/string.extensions.js +515 -0
  171. package/src/symbol.extensions.js +268 -0
  172. package/tests/newClasses/refmap.test.js +3 -2
  173. package/tsconfig.base.json +5 -3
  174. package/tsconfig.cjs.json +2 -2
  175. package/tsconfig.esm.json +2 -2
  176. package/dist/@nejs/basic-extensions.bundle.2.6.0.js +0 -17
  177. package/dist/@nejs/basic-extensions.bundle.2.6.0.js.map +0 -7
  178. package/dist/cjs/arrayextensions.d.ts +0 -10
  179. package/dist/cjs/arrayextensions.js +0 -73
  180. package/dist/cjs/arrayextensions.js.map +0 -1
  181. package/dist/cjs/functionextensions.js +0 -202
  182. package/dist/cjs/functionextensions.js.map +0 -1
  183. package/dist/cjs/globals.js +0 -166
  184. package/dist/cjs/globals.js.map +0 -1
  185. package/dist/cjs/mapextensions.js +0 -32
  186. package/dist/cjs/mapextensions.js.map +0 -1
  187. package/dist/cjs/newClasses/asyncIterable.js.map +0 -1
  188. package/dist/cjs/newClasses/deferred.js.map +0 -1
  189. package/dist/cjs/newClasses/descriptor.js.map +0 -1
  190. package/dist/cjs/newClasses/iterable.js.map +0 -1
  191. package/dist/cjs/newClasses/refmap.js.map +0 -1
  192. package/dist/cjs/newClasses/refset.js.map +0 -1
  193. package/dist/cjs/objectextensions.d.ts +0 -11
  194. package/dist/cjs/objectextensions.js +0 -232
  195. package/dist/cjs/objectextensions.js.map +0 -1
  196. package/dist/cjs/reflectextensions.js +0 -111
  197. package/dist/cjs/reflectextensions.js.map +0 -1
  198. package/dist/cjs/setextensions.d.ts +0 -2
  199. package/dist/cjs/setextensions.js.map +0 -1
  200. package/dist/cjs/stringextensions.js +0 -158
  201. package/dist/cjs/stringextensions.js.map +0 -1
  202. package/dist/cjs/symbolextensions.js +0 -69
  203. package/dist/cjs/symbolextensions.js.map +0 -1
  204. package/dist/cjs/weakrefextensions.js.map +0 -1
  205. package/dist/mjs/arrayextensions.d.ts +0 -10
  206. package/dist/mjs/arrayextensions.js +0 -70
  207. package/dist/mjs/arrayextensions.js.map +0 -1
  208. package/dist/mjs/functionextensions.js +0 -199
  209. package/dist/mjs/functionextensions.js.map +0 -1
  210. package/dist/mjs/globals.js +0 -163
  211. package/dist/mjs/globals.js.map +0 -1
  212. package/dist/mjs/mapextensions.js +0 -29
  213. package/dist/mjs/mapextensions.js.map +0 -1
  214. package/dist/mjs/newClasses/asyncIterable.js.map +0 -1
  215. package/dist/mjs/newClasses/deferred.js.map +0 -1
  216. package/dist/mjs/newClasses/descriptor.js.map +0 -1
  217. package/dist/mjs/newClasses/iterable.js.map +0 -1
  218. package/dist/mjs/newClasses/refmap.js.map +0 -1
  219. package/dist/mjs/newClasses/refset.js.map +0 -1
  220. package/dist/mjs/objectextensions.d.ts +0 -11
  221. package/dist/mjs/objectextensions.js +0 -229
  222. package/dist/mjs/objectextensions.js.map +0 -1
  223. package/dist/mjs/reflectextensions.js +0 -108
  224. package/dist/mjs/reflectextensions.js.map +0 -1
  225. package/dist/mjs/setextensions.d.ts +0 -2
  226. package/dist/mjs/setextensions.js.map +0 -1
  227. package/dist/mjs/stringextensions.js +0 -155
  228. package/dist/mjs/stringextensions.js.map +0 -1
  229. package/dist/mjs/symbolextensions.js +0 -66
  230. package/dist/mjs/symbolextensions.js.map +0 -1
  231. package/dist/mjs/weakrefextensions.js.map +0 -1
  232. package/src/arrayextensions.js +0 -75
  233. package/src/functionextensions.js +0 -225
  234. package/src/globals.js +0 -196
  235. package/src/mapextensions.js +0 -32
  236. package/src/objectextensions.js +0 -256
  237. package/src/reflectextensions.js +0 -118
  238. package/src/stringextensions.js +0 -166
  239. package/src/symbolextensions.js +0 -69
  240. /package/dist/cjs/{newClasses → classes}/asyncIterable.d.ts +0 -0
  241. /package/dist/cjs/{newClasses → classes}/deferred.d.ts +0 -0
  242. /package/dist/cjs/{newClasses → classes}/descriptor.d.ts +0 -0
  243. /package/dist/cjs/{newClasses → classes}/iterable.d.ts +0 -0
  244. /package/dist/cjs/{newClasses → classes}/refmap.d.ts +0 -0
  245. /package/dist/cjs/{newClasses → classes}/refset.d.ts +0 -0
  246. /package/dist/cjs/{functionextensions.d.ts → function.extensions.d.ts} +0 -0
  247. /package/dist/cjs/{globals.d.ts → global.this.d.ts} +0 -0
  248. /package/dist/cjs/{reflectextensions.d.ts → reflect.extensions.d.ts} +0 -0
  249. /package/dist/cjs/{stringextensions.d.ts → string.extensions.d.ts} +0 -0
  250. /package/dist/cjs/{weakrefextensions.d.ts → weakref.extensions.d.ts} +0 -0
  251. /package/dist/mjs/{newClasses → classes}/asyncIterable.d.ts +0 -0
  252. /package/dist/mjs/{newClasses → classes}/asyncIterable.js +0 -0
  253. /package/dist/mjs/{newClasses → classes}/deferred.d.ts +0 -0
  254. /package/dist/mjs/{newClasses → classes}/deferred.js +0 -0
  255. /package/dist/mjs/{newClasses → classes}/descriptor.d.ts +0 -0
  256. /package/dist/mjs/{newClasses → classes}/iterable.d.ts +0 -0
  257. /package/dist/mjs/{newClasses → classes}/iterable.js +0 -0
  258. /package/dist/mjs/{newClasses → classes}/refmap.d.ts +0 -0
  259. /package/dist/mjs/{newClasses → classes}/refset.d.ts +0 -0
  260. /package/dist/mjs/{newClasses → classes}/refset.js +0 -0
  261. /package/dist/mjs/{functionextensions.d.ts → function.extensions.d.ts} +0 -0
  262. /package/dist/mjs/{globals.d.ts → global.this.d.ts} +0 -0
  263. /package/dist/mjs/{reflectextensions.d.ts → reflect.extensions.d.ts} +0 -0
  264. /package/dist/mjs/{stringextensions.d.ts → string.extensions.d.ts} +0 -0
  265. /package/dist/mjs/{weakrefextensions.d.ts → weakref.extensions.d.ts} +0 -0
  266. /package/src/{newClasses → classes}/asyncIterable.js +0 -0
  267. /package/src/{newClasses → classes}/deferred.js +0 -0
  268. /package/src/{newClasses → classes}/iterable.js +0 -0
  269. /package/src/{newClasses → classes}/refset.js +0 -0
  270. /package/src/{weakrefextensions.js → weakref.extensions.js} +0 -0
@@ -0,0 +1,256 @@
1
+ import { Patch } from '@nejs/extension';
2
+ import { Symkeys } from './classes/symkeys.js';
3
+ import { JSONExtensions } from './json.extensions.js';
4
+ const { extractFrom, mightContain } = JSONExtensions.patches;
5
+ /**
6
+ * `SymbolExtensions` is a patch for the JavaScript built-in `Symbol` class. It
7
+ * adds utility methods to the `Symbol` class without modifying the global namespace
8
+ * directly. This patch includes methods for key validation, object type checking,
9
+ * and retrieving the string tag of an object. These methods are useful for
10
+ * enhancing the capabilities of the standard `Symbol` class with additional
11
+ * utility functions.
12
+ */
13
+ export const SymbolExtensions = new Patch(Symbol, {
14
+ /**
15
+ * Creates a new Symbol with the given name and optional data. If data
16
+ * is provided, it will be stringified and appended to the symbol's
17
+ * name. This method is useful for creating unique symbols that carry
18
+ * additional metadata.
19
+ *
20
+ * @param {string} name The name of the symbol.
21
+ * @param {*} [data] Optional data to be associated with the symbol.
22
+ * @returns {symbol} A new symbol created with Symbol.for(), using the
23
+ * provided name and stringified data (if provided).
24
+ *
25
+ * @example
26
+ * const symbolWithData = Symbol.withData('mySymbol', { foo: 'bar' })
27
+ * console.log(symbolWithData.toString())
28
+ * // Output: "Symbol(mySymbol {"foo":"bar"})"
29
+ *
30
+ * @example
31
+ * const symbolWithoutData = Symbol.withData('mySymbol')
32
+ * console.log(symbolWithoutData.toString())
33
+ * // Output: "Symbol(mySymbol)"
34
+ */
35
+ withData(name, data) {
36
+ return data !== undefined
37
+ ? Symbol.for(`${name} ${JSON.stringify(data)}`)
38
+ : Symbol.for(name);
39
+ },
40
+ /**
41
+ * The `isSymbol` method does exactly what one would it expect. It returns
42
+ * true if the string matches typeof or instanceof as a symbol.
43
+ *
44
+ * @param {*} value checks to see if the `value` is a string
45
+ * @returns {boolean} `true` if it is a `Symbol`, `false` otherwise
46
+ */
47
+ isSymbol(value) {
48
+ return value && (typeof value === 'symbol');
49
+ },
50
+ /**
51
+ * Returns true if the supplied value is a Symbol created using
52
+ * `Symbol.for()`.
53
+ *
54
+ * @param {any} value assumption is that the supplied value is of type
55
+ * 'symbol' however, unless `allowOnlySymbols` is set to `true`, `false`
56
+ * will be returned for any non-symbol values.
57
+ * @param {boolean} allowOnlySymbols true if an error should be thrown
58
+ * if the supplied value is not of type 'symbol'
59
+ * @returns true if the symbol is registered, meaning, none of the spec
60
+ * static symbols (`toStringTag`, `iterator`, etc...), and no symbols
61
+ * created by passing a value directly to the Symbol function, such as
62
+ * `Symbol('name')`
63
+ */
64
+ isRegistered(value, allowOnlySymbols = false) {
65
+ if (!Symbol.isSymbol(value)) {
66
+ if (allowOnlySymbols) {
67
+ throw new TypeError('allowOnlySymbols specified; value is not a symbol');
68
+ }
69
+ return false;
70
+ }
71
+ return Symbol.keyFor(value) !== undefined;
72
+ },
73
+ /**
74
+ * A function that returns true if the symbol is not registered, meaning,
75
+ * any of the spec static symbols (`toStringTag`, `iterator`, etc...), and
76
+ * any symbols created by passing a value directly to the `Symbol` function,
77
+ * such as `Symbol('name')`.
78
+ *
79
+ * @param {any} value assumption is that the supplied value is of type
80
+ * 'symbol' however, unless allowOnlySymbols is set to true, false will
81
+ * be returned for any non-symbol values.
82
+ * @param {boolean} allowOnlySymbols true if an error should be thrown
83
+ * if the supplied value is not of type 'symbol'
84
+ * @returns true if the symbol is not registered, meaning, any of the
85
+ * spec static symbols (`toStringTag`, `iterator`, etc...), and any symbols
86
+ * created by passing a value directly to the `Symbol` function, such as
87
+ * `Symbol('name')`
88
+ * @returns true if the `value` in question is both a `symbol` and has
89
+ * returns `undefined` if passed to `Symbol.keyFor`
90
+ */
91
+ isNonRegistered(value, allowOnlySymbols = false) {
92
+ return !Symbol.isRegistered(value, allowOnlySymbols);
93
+ },
94
+ /**
95
+ * `keys` is an instance of the `Symkeys` class, initialized with the
96
+ * domain 'nejs'. The `Symkeys` class provides a way to easily generate
97
+ * Symbol.for elements that follow particular pattern. Symkeys also
98
+ * allows associated data storage with each generated key.
99
+ *
100
+ * @type {Symkeys}
101
+ * @see {@link SymKeys}
102
+ * @example
103
+ * // Returns something like Symbol.for('@nejs.prototype #rwiy2o905d')
104
+ * const kOriginal = Symbol.keys.add('prototypes')
105
+ *
106
+ * // Which can be used to retrieve and fetch data associated with that key
107
+ * // The value stored is an array by default, but can be anything. It can
108
+ * // be accessed one property at a time
109
+ * Symbol.keys[kOriginal].original = Object.prototype
110
+ * Symbol.keys[kOriginal].modified = Object.create(Object.prototype, ...)
111
+ *
112
+ * // Or wholesale replaced
113
+ * Symbol.keys[kOriginal] = [Object.prototype, Array.prototype]
114
+ *
115
+ * // But if all Symbol Extensions are in place, including prototype add-ons
116
+ * kOriginal.data.original = Object.prototype // ...and...
117
+ * kOriginal.data = [Object.prototype, Array.prototype] // ...both work
118
+ */
119
+ keys: new Symkeys('nejs'),
120
+ });
121
+ export const SymbolPrototypeExtensions = new Patch(Symbol.prototype, {
122
+ [Patch.kMutablyHidden]: {
123
+ /**
124
+ * Returns an object representation of the symbol instance.
125
+ *
126
+ * This getter method creates and returns an object that wraps the
127
+ * symbol instance, allowing it to be treated as an object. The
128
+ * returned object is created using the `Object()` constructor,
129
+ * which takes the symbol instance as its argument.
130
+ *
131
+ * @type {Object}
132
+ * @readonly
133
+ *
134
+ * @example
135
+ * const sym = Symbol('example')
136
+ * console.log(typeof sym) // 'symbol'
137
+ * console.log(typeof sym.instance) // 'object'
138
+ */
139
+ get instance() {
140
+ return Object(this);
141
+ },
142
+ /**
143
+ * Getter method for retrieving the data associated with a symbol.
144
+ *
145
+ * This method first checks if the symbol is a Symkey created symbol
146
+ * by checking the existence of Symbol.keys and if the symbol's
147
+ * description matches the Symkey pattern. If it is a Symkey symbol,
148
+ * it attempts to fetch its associated data.
149
+ *
150
+ * NOTE: Symkey data is returned as its value directly, this is because
151
+ * it is stored in a {@link Map}. Embedded JSON data might be expensive
152
+ * to parse and as such a function is returned when data is accessed that
153
+ * needs to be invoked in order to decode its contents. See
154
+ * `{@link mightHaveEmbeddedJSON}` for more information.
155
+ *
156
+ * If the symbol is not a Symkey symbol or if no data is associated
157
+ * with it, the method attempts to parse the symbol's description as
158
+ * JSON and returns the first valid JSON object found.
159
+ *
160
+ * If no valid JSON object is found in the description, the method
161
+ * returns undefined.
162
+ *
163
+ * @type {Object|Function}
164
+ * @readonly
165
+ *
166
+ * @example
167
+ * const keys = new Symkeys
168
+ * const key = keys.add('example', {count: 0})
169
+ * const data = key.data // note this isn't function!!
170
+ * const count = data.count
171
+ *
172
+ * @example
173
+ * const sym = Symbol.for('fun {"name":"Brie"}')
174
+ * let json = sym.data() // {name: 'Brie'} JS object
175
+ *
176
+ * @example
177
+ * const sym = Symbol('mySymbol')
178
+ * let data = sym.data() // undefined
179
+ */
180
+ get data() {
181
+ if (Symbol?.keys && Symkeys.isSymkey(this)) {
182
+ const possibleData = Symbol.keys[this];
183
+ if (possibleData) {
184
+ return possibleData;
185
+ }
186
+ }
187
+ return extractFrom(string);
188
+ },
189
+ /**
190
+ * Sets the data associated with a symbol.
191
+ *
192
+ * This setter method checks if the symbol is a Symkey and if it has
193
+ * associated data. If both conditions are met, it sets the data of the
194
+ * symbol to the provided value and returns true. If the conditions are
195
+ * not met, it simply returns false.
196
+ *
197
+ * While Symbols have been upgraded to also support embedded JSON data
198
+ * with this extension, symbol descriptions are static. Non Symkey symbols
199
+ * do not associated their data outside of a symbol, and cannot be changed,
200
+ * there new data cannot be set on them.
201
+ *
202
+ * @param {any} value - The value to be set as the symbol's data.
203
+ * @returns {boolean} - Returns true if the data was successfully set,
204
+ * false otherwise.
205
+ *
206
+ * @example
207
+ * const sym = Symbol.for('fun {"name":"Brie"}')
208
+ * Symkeys.isSymkey(sym) // false; not in Symkey format
209
+ * let json = sym.data() // {name: 'Brie'} JS object
210
+ * sym.data = JSON.stringify({name: 'Jane'}) // fails silently
211
+ * json = sym.data() // {name: 'Brie'} is hard-coded in description
212
+ *
213
+ * @example
214
+ * const sym = Symbol('mySymbol')
215
+ * Symkeys.isSymkey(sym) // false; not in Symkey format
216
+ * Symkeys.hasData(sym) // false
217
+ * sym.data = { name: 'John', age: 30 } // will fail silently
218
+ * Symkeys.hasData(sym) // still false
219
+ *
220
+ * // Now let's create a Symkey with data
221
+ * const symWithData = Symkeys.create('mySymbolWithData',
222
+ * { name: 'Jane', age: 25 })
223
+ * Symkeys.isSymkey(symWithData) // true
224
+ * Symkeys.hasData(symWithData) // true
225
+ * symWithData.data = { name: 'Jane', age: 26 } // will succeed
226
+ * Symkeys.getData(symWithData) // returns { name: 'Jane', age: 26 }
227
+ */
228
+ set data(value) {
229
+ if (Symkeys.isSymkey(this) && Symkeys.hasData(this)) {
230
+ Symbol.keys.setData(this, value);
231
+ }
232
+ },
233
+ /**
234
+ * Checks if the symbol might have embedded JSON data.
235
+ *
236
+ * This getter method checks if the symbol's description might contain
237
+ * JSON data and if the data property of the symbol is a function. If both
238
+ * conditions are met, it returns true, otherwise it returns false.
239
+ *
240
+ * @returns {boolean} - Returns true if the symbol might have embedded
241
+ * JSON, false otherwise.
242
+ *
243
+ * @example
244
+ * const sym = Symbol.for('fun {"name":"Brie"}')
245
+ * console.log(sym.mightHaveEmbeddedJSON) // Output: true
246
+ *
247
+ * @example
248
+ * const sym = Symbol('mySymbol')
249
+ * console.log(sym.mightHaveEmbeddedJSON) // Output: false
250
+ */
251
+ get mightHaveEmbeddedJSON() {
252
+ return mightContain(this.description) && typeof this.data === 'function';
253
+ },
254
+ }
255
+ });
256
+ //# sourceMappingURL=symbol.extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol.extensions.js","sourceRoot":"","sources":["../../src/symbol.extensions.js"],"names":[],"mappings":"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"}
@@ -13,4 +13,4 @@ export const WeakRefExtensions = new Patch(WeakRef, {
13
13
  (value === null || value === undefined));
14
14
  },
15
15
  });
16
- //# sourceMappingURL=weakrefextensions.js.map
16
+ //# sourceMappingURL=weakref.extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weakref.extensions.js","sourceRoot":"","sources":["../../src/weakref.extensions.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;IAClD;;;;;;OAMG;IACH,gBAAgB,CAAC,KAAK;QACpB,OAAO,CAAC,CACN,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;YACjE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;YACxD,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CACxC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}