@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,400 +0,0 @@
1
- import { Extension } from '@nejs/extension';
2
- import { accessor, as, data, isDescriptor, redescribe } from '../utils/index.js';
3
- /**
4
- * Creates an enumeration object with specified values and properties.
5
- *
6
- * @param {string} name - The name of the enumeration.
7
- * @param {Array|any} values - The values to be included in the enumeration.
8
- * If not an array, it will be converted into a single-element array.
9
- * @param {Object|Map} [properties] - Additional properties to be added to
10
- * the enumeration. Can be an object or a Map.
11
- * @returns {Object} The constructed enumeration object.
12
- *
13
- * @example
14
- * const colors = Enum('Colors', ['red', 'green', 'blue'])
15
- * console.log(colors.red) // EnumValue object for 'red'
16
- *
17
- * @description
18
- * The `Enum` function constructs an enumeration object with a given name,
19
- * values, and optional properties. It supports primitive types, arrays,
20
- * and objects as values. The function uses a combination of `Object.create`
21
- * and `Proxy` to define and manage the properties of the enumeration.
22
- *
23
- * The enumeration object includes:
24
- * - A `toString` method that returns the enumeration name.
25
- * - A `Symbol.toStringTag` for identifying the object as an 'Enum'.
26
- * - A `Symbol.for('Enum.name')` for storing the enumeration name.
27
- *
28
- * For array values, it creates a maker function that returns an
29
- * `EnumValue` object with properties like `real`, `value`, `type`,
30
- * `name`, and `compare`.
31
- */
32
- export function Enum(name, values, properties) {
33
- const enumeration = makeBaseEnum(name);
34
- if (!Array.isArray(values)) {
35
- values = [values];
36
- }
37
- /**
38
- * A new base `EnumValue` type object. It contains enough custom symbols and
39
- * identifiers to allow things like a `compare(to)` function to also work on
40
- * each of the elements. Thing of this as the shared base functionality for
41
- * each `Enum` element.
42
- *
43
- * @param {any} enumValue the value around which an `EnumValue` type is
44
- * created.
45
- * @returns an object defined by {@link Symbol.toStringTag} as well as some
46
- * custom {@link Symbol} keys. The `node.js` custom inspect symbol is also
47
- * defined for better REPL representation.
48
- */
49
- const makeEnumValue = (property, enumValue) => ({
50
- toString: data(() => enumValue, false, true, false),
51
- [Symbol.for('Enum.name')]: data(name, false, true, false),
52
- [Symbol.for('Enum.is')]: data(true, false, false, false),
53
- [Symbol.for('nodejs.util.inspect.custom')]: data(function (depth, options, inspect) {
54
- const _options = { ...(options || {}), colors: true };
55
- const _skip = this.value === Symbol.for('Enum.NonAssociatedValue');
56
- const _value = _skip
57
- ? ''
58
- : ` { value: ${inspect(this.value, _options)} }`;
59
- return `${property}${_value}`;
60
- }, false, true, false),
61
- [Symbol.toStringTag]: accessor('EnumValue', false, true, false),
62
- [Symbol.for('compare')]: data(function compareValue(to) {
63
- const toObj = (to && typeof to === 'object') ? to : { real: to };
64
- const kName = Symbol.for('Enum.name');
65
- const hasAndIs = o => (Reflect.has(o, Symbol.for('Enum.is')) && o[Symbol.for('Enum.is')]);
66
- const isLEnum = hasAndIs(this);
67
- const isREnum = hasAndIs(toObj);
68
- if (!isLEnum || !isREnum)
69
- return false;
70
- const { real: lReal, value: lValue, name: lName, type: lType } = this;
71
- const { real: rReal, value: rValue, name: rName, type: rType } = toObj;
72
- return (lName === rName && lType === rType &&
73
- lReal === rReal && lValue === rValue);
74
- }, false, true, false),
75
- [Symbol.toPrimitive]: data(function EnumValueToPrimitive(hint) {
76
- const original = this.real;
77
- const type = typeof original;
78
- switch (hint) {
79
- case 'string':
80
- if ('string' === type)
81
- return original;
82
- else
83
- return String(original);
84
- case 'number':
85
- if ('number' === type)
86
- return original;
87
- else
88
- return NaN;
89
- case 'bigint':
90
- if ('bigint' === type)
91
- return original;
92
- else
93
- return NaN;
94
- default:
95
- return original;
96
- }
97
- }, false, true, false),
98
- });
99
- /**
100
- * Given a value, determine how to represent it as both a key and a response
101
- * or underlying original value. The method for this is dependent on the type
102
- * of the value itself.
103
- *
104
- * @param {any} value the value to be converted
105
- * @returns {[string, any]} an array where the first value is the transformed
106
- * value as a key and the second element is the originally supplied value.
107
- */
108
- const fromPrimitive = (value) => {
109
- let valueType = typeof value;
110
- switch (valueType) {
111
- case 'string':
112
- case 'number':
113
- case 'bigint':
114
- case 'boolean':
115
- default:
116
- return [String(value), value];
117
- case 'symbol':
118
- return [value.description, value];
119
- case 'function':
120
- return [value.name, value];
121
- case 'object': {
122
- const str = asString(value);
123
- return [str, str];
124
- }
125
- }
126
- };
127
- // Determine the keys that the final proxy should be aware of when computing
128
- // the enumeration value itself.
129
- const kValueProps = ['real', 'value', 'type', 'name', 'compare', 'isEnum'];
130
- const kCustomPropKeys = [];
131
- // Capture and calculate any custom properties defined for each element
132
- // of the enumeration. Each custom property is appended to `kCustomPropKeys`
133
- const props = {};
134
- if (properties) {
135
- if (Array.isArray(properties)) {
136
- const entries = properties.filter(e => Array.isArray(e) && e.length === 2);
137
- if (entries.length)
138
- properties = new Map(entries);
139
- else
140
- properties = new Map();
141
- }
142
- else if (typeof properties === 'object') {
143
- properties = new Map(Object.entries(Object.getOwnPropertyDescriptors(properties)));
144
- }
145
- if (properties instanceof Map) {
146
- const applyPropertiesOf = (object, baseDescriptor) => {
147
- const property = {
148
- configurable: baseDescriptor?.configurable ?? true,
149
- enumerable: baseDescriptor?.enumerable ?? true,
150
- writable: baseDescriptor?.writable ?? true,
151
- };
152
- const descriptors = Object.getOwnPropertyDescriptors(object);
153
- for (const [key, subvalue] of Object.entries(descriptors)) {
154
- const stats = isDescriptor(subvalue, true);
155
- const baseStats = isDescriptor(baseDescriptor, true);
156
- if (stats.isAccessor && baseStats.isValid) {
157
- props[key] = { ...subvalue, ...accessor.keys.from(baseDescriptor) };
158
- }
159
- else if (stats.isData && baseStats.isValid) {
160
- props[key] = { ...subvalue, ...data.keys.from(baseDescriptor) };
161
- }
162
- }
163
- };
164
- let stats = {};
165
- for (const [property, value] of properties.entries()) {
166
- kCustomPropKeys.push(property);
167
- if (isDescriptor(property)) {
168
- if (typeof value === 'object') {
169
- applyPropertiesOf(value, property);
170
- continue;
171
- }
172
- }
173
- props[property] = value;
174
- }
175
- }
176
- }
177
- for (const value of values) {
178
- const valueType = Array.isArray(value) ? 'array' : typeof value;
179
- let property = undefined;
180
- let response = undefined;
181
- let wasArray = false;
182
- let elements = value;
183
- switch (valueType) {
184
- case 'array':
185
- if (value.length >= 1) {
186
- wasArray = true;
187
- ([property, response] = fromPrimitive(elements[0]));
188
- }
189
- default:
190
- ([property, response] = fromPrimitive(value));
191
- }
192
- const maker = {
193
- [property](initialValue) {
194
- const storage = new Map();
195
- const key = property;
196
- const realValue = accessor(response, false, { storage, key });
197
- let _opts, associatedValue;
198
- if (wasArray) {
199
- _opts = { storage, key: key + '.associated' };
200
- associatedValue = elements.length === 1
201
- ? accessor(initialValue, true, _opts)
202
- : accessor(elements?.[1], elements?.[2], _opts);
203
- }
204
- else
205
- associatedValue = accessor(Symbol.for('Enum.NonAssociatedValue'), false, false, false);
206
- const _prop = Object(asString(response));
207
- const valueProps = [...kValueProps, ...kCustomPropKeys];
208
- const enumResponse = Object.create(_prop, {
209
- ...makeEnumValue(property, response),
210
- ...props,
211
- });
212
- const proxy = new Proxy(_prop, {
213
- get(target, _property, receiver) {
214
- if (_property === 'real')
215
- return realValue.get();
216
- if (_property === 'value')
217
- return associatedValue.get();
218
- if (_property === 'type')
219
- return name;
220
- if (_property === 'name')
221
- return property;
222
- if (_property === 'compare')
223
- return enumResponse[Symbol.for('compare')];
224
- if (_property === 'isEnum')
225
- return true;
226
- if (!valueProps.includes(_property))
227
- return undefined;
228
- },
229
- has(target, _property) {
230
- return valueProps.includes(_property);
231
- },
232
- ownKeys(target) {
233
- return valueProps;
234
- },
235
- set(target, _property, value, receiver) {
236
- if (_property === 'value' && wasArray)
237
- return associatedValue.set(value);
238
- return false;
239
- }
240
- });
241
- Object.setPrototypeOf(proxy, Object.getPrototypeOf(_prop));
242
- Object.setPrototypeOf(enumResponse, proxy);
243
- return enumResponse;
244
- }
245
- };
246
- enumeration[Symbol.for('Enum.valueKeys')].push(property);
247
- const dataValue = wasArray ? maker[property] : maker[property]();
248
- const baseProps = {
249
- writable: false,
250
- configurable: false,
251
- enumerable: true,
252
- };
253
- Object.defineProperty(enumeration, property, data(dataValue, baseProps));
254
- }
255
- return enumeration;
256
- }
257
- export const EnumExtension = new Extension(Enum);
258
- /**
259
- * Converts a given value to a string representation with additional
260
- * options for description and string tag.
261
- *
262
- * @param {any} value - The value to be converted to a string. This can
263
- * be of any type, including objects, arrays, numbers, etc.
264
- * @returns {string} A string representation of the input value, enhanced
265
- * with a description and string tag if applicable.
266
- *
267
- * @example
268
- * // Convert a number to a string with additional options
269
- * const result = asString(123)
270
- * console.log(result) // Outputs: "123" with description and string tag
271
- *
272
- * @example
273
- * // Convert an object to a string with additional options
274
- * const obj = { key: 'value' }
275
- * const result = asString(obj)
276
- * console.log(result) // Outputs: "[object Object]" with description and
277
- * // string tag
278
- */
279
- function asString(value) {
280
- return as.string(value, { description: true, stringTag: true });
281
- }
282
- /**
283
- * Creates a base enumeration object with predefined properties and
284
- * symbols. This function is used to initialize an enumeration with
285
- * specific characteristics, such as a name and various symbolic
286
- * properties that enhance its functionality and identification.
287
- *
288
- * @param {string} name - The name of the enumeration. This name is
289
- * used to identify the enumeration and is stored as a symbol on
290
- * the object.
291
- * @returns {Object} A new enumeration object with specific properties
292
- * and symbols set for enhanced functionality and identification.
293
- *
294
- * @example
295
- * // Create a base enum with the name 'Color'
296
- * const colorEnum = makeBaseEnum('Color')
297
- * console.log(colorEnum[Symbol.for('Enum.name')]) // Outputs: 'Color'
298
- */
299
- export function makeBaseEnum(name) {
300
- return Object.create({}, {
301
- /**
302
- * Defines the `toStringTag` symbol on each enumeration to allow for
303
- * type identification and to be consistent in naming conventions.
304
- *
305
- * @type {string}
306
- */
307
- [Symbol.toStringTag]: accessor('Enum', false, true, false),
308
- /**
309
- * In addition to the `toStringTag` symbol which defines this enumeration
310
- * as an Enum type, the name of the enum is also codified in as a symbol
311
- * on the object. It can be found using `Symbol.for('Enum.name')`.
312
- *
313
- * @type {string|symbol|number}
314
- */
315
- [Symbol.for('Enum.name')]: accessor(name, false, true, false),
316
- /**
317
- * Knowing which keys of the enum are part of the keys themselves is also
318
- * crucial for enumerations. These can always be found on each Enum type
319
- * as `Symbol.for('Enum.valueKeys')` as an array, but can also be found
320
- * as the `.keys` property if there is no enum value of that name.
321
- */
322
- [Symbol.for('Enum.valueKeys')]: data([], false, true, false),
323
- /**
324
- * For users of the node.js REPL, this symbol represents enum types in a
325
- * more readily readable format. See the docs for node's `util.inspect()`
326
- * function for more details.
327
- *
328
- * @type {(number, object, Function) => string}
329
- */
330
- [Symbol.for('nodejs.util.inspect.custom')]: data(function (depth, options, inspect) {
331
- const valueKeys = this[Symbol.for('Enum.valueKeys')] ?? [];
332
- let valueText = valueKeys
333
- .map(key => `\x1b[1;2m${key}\x1b[22m`)
334
- .join(', ');
335
- if (valueText.length)
336
- valueText = ` { ${valueText} }`;
337
- return `\x1b[1menum \x1b[22m${name}${valueText}`;
338
- }, false, true, false),
339
- /**
340
- * This function checks the supplied `possibleEnumValue` to see if it
341
- * is an enum value type from this enum.
342
- *
343
- * @param {any} possibleEnumValue the value to evaluate
344
- * @returns {boolean} returns `true` if the value is an enum value type
345
- * from this `Enum`, irrespective of any associated value. Returns `false`
346
- * otherwise.
347
- */
348
- isValueOf: data(function isValueOf(possibleEnumValue) {
349
- if (!possibleEnumValue || typeof possibleEnumValue !== 'object')
350
- return false;
351
- const enumValueType = possibleEnumValue?.type;
352
- const enumValueName = possibleEnumValue?.name;
353
- const thisEnumName = this[Symbol.for('Enum.name')];
354
- const thisEnumKeys = this[Symbol.for('Enum.valueKeys')];
355
- return (enumValueType === thisEnumName &&
356
- thisEnumKeys.includes(enumValueName));
357
- }, false, true, false),
358
- /**
359
- * A simple overload of the `toString()` method to represent the enum
360
- * more identifiably when called. The result will be the word enum with
361
- * the name of the enum in parenthesis. So a Gender enum might be seen
362
- * as `Enum(Gender)` as a result to calling this function.
363
- *
364
- * @returns {string} a {@link String} representation of this object.
365
- */
366
- toString: data(function toString() {
367
- return `Enum(${name})`;
368
- }, false, true, false)
369
- });
370
- const applySyntacticSugar = () => {
371
- createSymlinks(Symbol.for('Enum.valueKeys'), 'keys');
372
- createSymlinks(Symbol.for('Enum.name'), 'name');
373
- };
374
- return [base, applySyntacticSugar];
375
- }
376
- /**
377
- * Creates a symlink for a property from an existing key to a new key on
378
- * the specified object. This function checks if the new key already
379
- * exists on the object and, if not, it creates a new property with the
380
- * same descriptor as the old key.
381
- *
382
- * Since this method creates the new link through the use of property
383
- * descriptors, computed getters and setters also are mapped properly.
384
- *
385
- * @param {Object} on - The target object on which the symlink is to be
386
- * created.
387
- * @param {string|symbol} oldKey - The existing key whose property
388
- * descriptor will be used for the new key.
389
- * @param {string|symbol} newKey - The new key under which the property
390
- * will be accessible.
391
- *
392
- * @example
393
- * const obj = { a: 1 }
394
- * createSymlink(obj, 'a', 'b')
395
- * console.log(obj.b) // Outputs: 1
396
- */
397
- function createSymlinks(on, oldKey, ...newKeys) {
398
- redescribe(on, oldKey, {}, { alsoAs: newKeys });
399
- }
400
- //# sourceMappingURL=enum.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/classes/enum.js"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export * from "./asyncIterable.js";
2
- export * from "./deferred.js";
3
- export * from "./descriptor.js";
4
- export * from "./enum.js";
5
- export * from "./introspector.js";
6
- export * from "./iterable.js";
7
- export * from "./param.parser.js";
8
- export * from "./pluggable.proxy.js";
9
- export * from "./property.js";
10
- export * from "./refmap.js";
11
- export * from "./refset.js";
12
- export * from "./symkeys.js";
13
- export * from "./type.js";
14
- export const NewClassesExtension: Patch;
15
- import { Patch } from '@nejs/extension';
@@ -1,46 +0,0 @@
1
- import { Patch } from '@nejs/extension';
2
- import { AsyncIterable, AsyncIterator } from './asyncIterable.js';
3
- export * from './asyncIterable.js';
4
- import { Deferred } from './deferred.js';
5
- export * from './deferred.js';
6
- import { Descriptor } from './descriptor.js';
7
- export * from './descriptor.js';
8
- import { Enum } from './enum.js';
9
- export * from './enum.js';
10
- import { Introspector } from './introspector.js';
11
- export * from './introspector.js';
12
- import { Iterable, Iterator } from './iterable.js';
13
- export * from './iterable.js';
14
- import { ParamParser } from './param.parser.js';
15
- export * from './param.parser.js';
16
- import { PluggableProxy, ProxyHandler } from './pluggable.proxy.js';
17
- export * from './pluggable.proxy.js';
18
- import { Property, PropertyExtensions } from './property.js';
19
- export * from './property.js';
20
- import { RefMap } from './refmap.js';
21
- export * from './refmap.js';
22
- import { RefSet } from './refset.js';
23
- export * from './refset.js';
24
- import { Symkeys } from './symkeys.js';
25
- export * from './symkeys.js';
26
- import { Type } from './type.js';
27
- export * from './type.js';
28
- export const NewClassesExtension = new Patch(globalThis, {
29
- AsyncIterable,
30
- AsyncIterator,
31
- Deferred,
32
- Descriptor,
33
- Enum,
34
- Introspector,
35
- Iterable,
36
- Iterator,
37
- ParamParser,
38
- PluggableProxy,
39
- ProxyHandler,
40
- Property,
41
- RefMap,
42
- RefSet,
43
- Symkeys,
44
- Type,
45
- });
46
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/classes/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACjE,cAAc,oBAAoB,CAAA;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,cAAc,eAAe,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,iBAAiB,CAAA;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,cAAc,eAAe,CAAA;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnE,cAAc,sBAAsB,CAAA;AAEpC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC5D,cAAc,eAAe,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAG,MAAM,aAAa,CAAA;AACrC,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,cAAc,aAAa,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,cAAc,cAAc,CAAA;AAE5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,cAAc,WAAW,CAAA;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;IACvD,aAAa;IACb,aAAa;IACb,QAAQ;IACR,UAAU;IACV,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,IAAI;CACL,CAAC,CAAA"}
@@ -1,20 +0,0 @@
1
- export class Introspector {
2
- static addExpansion(array: any): any;
3
- static accessors(owner?: typeof globalThis, keys?: any[]): Map<any, any>;
4
- static classes(owner?: typeof globalThis): any;
5
- static functions(owner?: typeof globalThis): any;
6
- static objects(owner?: typeof globalThis): any;
7
- static properties(owner?: typeof globalThis): any;
8
- static symbols(owner?: typeof globalThis): any;
9
- static metadata(owner: any, key: any): {
10
- owner: any;
11
- key: any;
12
- descriptor: undefined;
13
- value: undefined;
14
- readonly type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
15
- };
16
- static fetcher(typeNameOrTyperFn: any, regExp?: undefined, searchClass?: ObjectConstructor, searchFunction?: string, owner?: typeof globalThis): any;
17
- static makeReport(owner?: typeof globalThis): {};
18
- }
19
- export const IntrospectorExtensions: Extension;
20
- import { Extension } from '@nejs/extension';
@@ -1,126 +0,0 @@
1
- import { Extension } from '@nejs/extension';
2
- export class Introspector {
3
- static addExpansion(array) {
4
- const toEntriesFrom = (owner = globalThis) => {
5
- return (accumulator, key) => {
6
- const count = accumulator.length;
7
- try {
8
- const value = owner[key];
9
- accumulator.splice(count, 0, [key, value], [value, key]);
10
- }
11
- catch (error) {
12
- accumulator.splice(count, 0, [key, error]);
13
- }
14
- return accumulator;
15
- };
16
- };
17
- return Object.defineProperty(array, 'expand', {
18
- get() {
19
- return new Map(this.reduce(toEntriesFrom(globalThis), []));
20
- },
21
- configurable: true,
22
- enumerable: true,
23
- });
24
- }
25
- static accessors(owner = globalThis, keys = []) {
26
- const entries = [];
27
- for (const key of keys) {
28
- try {
29
- const metadata = this.metadata(owner, key);
30
- if (metadata.get || metadata.set) {
31
- entries.push([key, metadata]);
32
- }
33
- continue;
34
- }
35
- catch (error) {
36
- entries.push([key, error]);
37
- }
38
- }
39
- return new Map(entries);
40
- }
41
- static classes(owner = globalThis) {
42
- return this.fetcher('function', /^[A-Z]/, Object, 'getOwnPropertyNames', owner);
43
- }
44
- static functions(owner = globalThis) {
45
- return this.fetcher('function', /^[a-z]/, Object, 'getOwnPropertyNames', owner);
46
- }
47
- static objects(owner = globalThis) {
48
- return this.fetcher('object', null, Object, 'getOwnPropertyNames', owner);
49
- }
50
- static properties(owner = globalThis) {
51
- return this.fetcher((v, t, d) => t !== 'object' && t !== 'function', null, Object, 'getOwnPropertyNames', owner);
52
- }
53
- static symbols(owner = globalThis) {
54
- return this.addExpansion(Object.getOwnPropertySymbols(owner));
55
- }
56
- static metadata(owner, key) {
57
- const metadata = {
58
- owner, key,
59
- descriptor: undefined,
60
- value: undefined,
61
- get type() { return typeof this.value; },
62
- };
63
- try {
64
- metadata.descriptor = Object.getOwnPropertyDescriptor(owner, key);
65
- }
66
- catch (error) {
67
- metadata.descriptor = error;
68
- }
69
- try {
70
- metadata.value = (metadata.descriptor?.value ??
71
- metadata.descriptor?.get?.bind(owner)?.() ??
72
- owner[key]);
73
- }
74
- catch (error) {
75
- metadata.value = error;
76
- }
77
- return metadata;
78
- }
79
- static fetcher(typeNameOrTyperFn, regExp = undefined, searchClass = Object, searchFunction = 'getOwnPropertyNames', owner = globalThis) {
80
- let typer = typeNameOrTyperFn;
81
- if (typeof typeNameOrTyperFn !== 'function') {
82
- const type = String(typeNameOrTyperFn);
83
- typer = (function (value, typeName, descriptor) {
84
- return typeName === type;
85
- }).bind(this);
86
- }
87
- return this.addExpansion(searchClass[searchFunction](owner).filter(key => {
88
- const metadata = this.metadata(owner, key);
89
- return ((!regExp || regExp.exec(String(key))) &&
90
- typer(metadata.value, metadata.type, metadata.descriptor));
91
- }).toSorted());
92
- }
93
- static makeReport(owner = globalThis) {
94
- let names = [
95
- 'classes', 'functions', 'objects', 'properties', 'symbols', 'accessors'
96
- ];
97
- let bound = names.reduce((a, n) => { a[n] = this[n].bind(this); return a; }, {});
98
- const { classes, functions, objects, properties, symbols, accessors } = bound;
99
- const result = {};
100
- Object.assign(result, {
101
- accessors: {
102
- classes: undefined,
103
- functions: undefined,
104
- objects: undefined,
105
- properties: undefined,
106
- symbols: undefined,
107
- },
108
- classes: this[classes.name](),
109
- functions: this[functions.name](),
110
- objects: this[objects.name](),
111
- properties: this[properties.name](),
112
- symbols: this[symbols.name](),
113
- expandAll() {
114
- names.forEach(reportName => {
115
- result[reportName] = result?.[reportName]?.expand;
116
- });
117
- },
118
- })(names.forEach(type => {
119
- debugger;
120
- result.accessors[type] = accessors(globalThis, result[type]);
121
- }));
122
- return result;
123
- }
124
- }
125
- export const IntrospectorExtensions = new Extension(Introspector);
126
- //# sourceMappingURL=introspector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspector.js","sourceRoot":"","sources":["../../../src/classes/introspector.js"],"names":[],"mappings":"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"}