@nejs/basic-extensions 2.9.0 → 2.10.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.
- package/dist/@nejs/basic-extensions.bundle.2.10.0.js +19 -0
- package/dist/@nejs/basic-extensions.bundle.2.10.0.js.map +7 -0
- package/dist/cjs/array.extensions.js +174 -0
- package/dist/cjs/array.extensions.js.map +1 -1
- package/dist/cjs/big.int.extension.js +1 -0
- package/dist/cjs/big.int.extension.js.map +1 -1
- package/dist/cjs/classes/descriptor.js +1 -1
- package/dist/cjs/classes/descriptor.js.map +1 -1
- package/dist/cjs/classes/index.d.ts +1 -0
- package/dist/cjs/classes/index.js +3 -0
- package/dist/cjs/classes/index.js.map +1 -1
- package/dist/cjs/classes/iterable.d.ts +44 -0
- package/dist/cjs/classes/iterable.js +64 -0
- package/dist/cjs/classes/iterable.js.map +1 -1
- package/dist/cjs/classes/param.parser.d.ts +10 -10
- package/dist/cjs/classes/property.d.ts +86 -0
- package/dist/cjs/classes/property.js +284 -0
- package/dist/cjs/classes/property.js.map +1 -0
- package/dist/cjs/classes/symkeys.d.ts +68 -11
- package/dist/cjs/classes/symkeys.js +103 -17
- package/dist/cjs/classes/symkeys.js.map +1 -1
- package/dist/cjs/classes/type.d.ts +4 -4
- package/dist/cjs/function.extensions.js +1 -0
- package/dist/cjs/function.extensions.js.map +1 -1
- package/dist/cjs/global.this.js +29 -0
- package/dist/cjs/global.this.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/json.extensions.js +19 -18
- package/dist/cjs/json.extensions.js.map +1 -1
- package/dist/cjs/map.extensions.js +1 -0
- package/dist/cjs/map.extensions.js.map +1 -1
- package/dist/cjs/number.extension.js +1 -0
- package/dist/cjs/number.extension.js.map +1 -1
- package/dist/cjs/object.extensions.d.ts +0 -29
- package/dist/cjs/object.extensions.js +218 -255
- package/dist/cjs/object.extensions.js.map +1 -1
- package/dist/cjs/set.extensions.js +1 -0
- package/dist/cjs/set.extensions.js.map +1 -1
- package/dist/cjs/string.extensions.js +474 -469
- package/dist/cjs/string.extensions.js.map +1 -1
- package/dist/cjs/symbol.extensions.js +386 -31
- package/dist/cjs/symbol.extensions.js.map +1 -1
- package/dist/cjs/utils/copy.object.d.ts +408 -0
- package/dist/cjs/utils/copy.object.js +720 -0
- package/dist/cjs/utils/copy.object.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +19 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/toolkit.d.ts +1897 -0
- package/dist/cjs/utils/toolkit.js +1377 -0
- package/dist/cjs/utils/toolkit.js.map +1 -0
- package/dist/mjs/array.extensions.js +174 -0
- package/dist/mjs/array.extensions.js.map +1 -1
- package/dist/mjs/big.int.extension.js +1 -0
- package/dist/mjs/big.int.extension.js.map +1 -1
- package/dist/mjs/classes/descriptor.js +1 -1
- package/dist/mjs/classes/descriptor.js.map +1 -1
- package/dist/mjs/classes/index.d.ts +1 -0
- package/dist/mjs/classes/index.js +3 -0
- package/dist/mjs/classes/index.js.map +1 -1
- package/dist/mjs/classes/iterable.d.ts +44 -0
- package/dist/mjs/classes/iterable.js +64 -0
- package/dist/mjs/classes/iterable.js.map +1 -1
- package/dist/mjs/classes/param.parser.d.ts +10 -10
- package/dist/mjs/classes/property.d.ts +86 -0
- package/dist/mjs/classes/property.js +280 -0
- package/dist/mjs/classes/property.js.map +1 -0
- package/dist/mjs/classes/symkeys.d.ts +68 -11
- package/dist/mjs/classes/symkeys.js +103 -17
- package/dist/mjs/classes/symkeys.js.map +1 -1
- package/dist/mjs/classes/type.d.ts +4 -4
- package/dist/mjs/function.extensions.js +1 -0
- package/dist/mjs/function.extensions.js.map +1 -1
- package/dist/mjs/global.this.js +6 -0
- package/dist/mjs/global.this.js.map +1 -1
- package/dist/mjs/index.d.ts +2 -0
- package/dist/mjs/index.js +4 -0
- package/dist/mjs/index.js.map +1 -1
- package/dist/mjs/json.extensions.js +19 -18
- package/dist/mjs/json.extensions.js.map +1 -1
- package/dist/mjs/map.extensions.js +1 -0
- package/dist/mjs/map.extensions.js.map +1 -1
- package/dist/mjs/number.extension.js +1 -0
- package/dist/mjs/number.extension.js.map +1 -1
- package/dist/mjs/object.extensions.d.ts +0 -29
- package/dist/mjs/object.extensions.js +215 -251
- package/dist/mjs/object.extensions.js.map +1 -1
- package/dist/mjs/set.extensions.js +1 -0
- package/dist/mjs/set.extensions.js.map +1 -1
- package/dist/mjs/string.extensions.js +474 -469
- package/dist/mjs/string.extensions.js.map +1 -1
- package/dist/mjs/symbol.extensions.js +386 -31
- package/dist/mjs/symbol.extensions.js.map +1 -1
- package/dist/mjs/utils/copy.object.d.ts +408 -0
- package/dist/mjs/utils/copy.object.js +702 -0
- package/dist/mjs/utils/copy.object.js.map +1 -0
- package/dist/mjs/utils/index.d.ts +1 -0
- package/dist/mjs/utils/index.js +3 -0
- package/dist/mjs/utils/index.js.map +1 -0
- package/dist/mjs/utils/toolkit.d.ts +1897 -0
- package/dist/mjs/utils/toolkit.js +1372 -0
- package/dist/mjs/utils/toolkit.js.map +1 -0
- package/package.json +29 -37
- package/repl.bootstrap.js +12 -1
- package/src/array.extensions.js +191 -1
- package/src/big.int.extension.js +3 -1
- package/src/classes/descriptor.js +1 -1
- package/src/classes/index.js +4 -0
- package/src/classes/iterable.js +74 -0
- package/src/classes/property.js +333 -0
- package/src/classes/symkeys.js +120 -19
- package/src/function.extensions.js +2 -0
- package/src/global.this.js +8 -0
- package/src/index.js +5 -0
- package/src/json.extensions.js +18 -19
- package/src/map.extensions.js +3 -1
- package/src/number.extension.js +3 -1
- package/src/object.extensions.js +240 -277
- package/src/set.extensions.js +3 -1
- package/src/string.extensions.js +512 -506
- package/src/symbol.extensions.js +412 -29
- package/src/utils/copy.object.js +780 -0
- package/src/utils/index.js +2 -0
- package/src/utils/toolkit.js +1471 -0
- package/tests/arrayextensions.test.js +2 -0
- package/tests/index.test.js +1 -0
- package/tests/newClasses/asyncIterable.test.js +2 -0
- package/tests/newClasses/deferred.test.js +5 -3
- package/tests/newClasses/descriptor.test.js +2 -0
- package/tests/newClasses/iterable.test.js +2 -0
- package/tests/newClasses/refmap.test.js +2 -1
- package/tests/newClasses/refset.test.js +2 -0
- package/tests/objectextensions.test.js +2 -0
- package/tests/setextensions.test.js +2 -0
- package/tests/stringextensions.test.js +1 -0
- package/tests/utils/toolkit.test.js +223 -0
- package/tsconfig.base.json +1 -1
- package/vitest.config.js +7 -0
- package/dist/@nejs/basic-extensions.bundle.2.8.0.js +0 -19
- package/dist/@nejs/basic-extensions.bundle.2.8.0.js.map +0 -7
- package/docs/assets/anchor.js +0 -350
- package/docs/assets/bass-addons.css +0 -12
- package/docs/assets/bass.css +0 -544
- package/docs/assets/fonts/EOT/SourceCodePro-Bold.eot +0 -0
- package/docs/assets/fonts/EOT/SourceCodePro-Regular.eot +0 -0
- package/docs/assets/fonts/LICENSE.txt +0 -93
- package/docs/assets/fonts/OTF/SourceCodePro-Bold.otf +0 -0
- package/docs/assets/fonts/OTF/SourceCodePro-Regular.otf +0 -0
- package/docs/assets/fonts/TTF/SourceCodePro-Bold.ttf +0 -0
- package/docs/assets/fonts/TTF/SourceCodePro-Regular.ttf +0 -0
- package/docs/assets/fonts/WOFF/OTF/SourceCodePro-Bold.otf.woff +0 -0
- package/docs/assets/fonts/WOFF/OTF/SourceCodePro-Regular.otf.woff +0 -0
- package/docs/assets/fonts/WOFF/TTF/SourceCodePro-Bold.ttf.woff +0 -0
- package/docs/assets/fonts/WOFF/TTF/SourceCodePro-Regular.ttf.woff +0 -0
- package/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 +0 -0
- package/docs/assets/fonts/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 +0 -0
- package/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 +0 -0
- package/docs/assets/fonts/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 +0 -0
- package/docs/assets/fonts/source-code-pro.css +0 -23
- package/docs/assets/github.css +0 -123
- package/docs/assets/site.js +0 -168
- package/docs/assets/split.css +0 -15
- package/docs/assets/split.js +0 -782
- package/docs/assets/style.css +0 -147
- package/docs/index.html +0 -35485
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export class Property {
|
|
2
|
+
/**
|
|
3
|
+
* Creates an accessor property with customizable getter and setter functions.
|
|
4
|
+
*
|
|
5
|
+
* This method offers flexible ways to define accessor properties, including
|
|
6
|
+
* support for storage-based getters and setters. It can handle various input
|
|
7
|
+
* formats, making it versatile for different use cases.
|
|
8
|
+
*
|
|
9
|
+
* @param {string} name - The name of the accessor property.
|
|
10
|
+
* @param {Object} accessors - Object containing getter and/or setter functions.
|
|
11
|
+
* @param {Function} [accessors.get] - Getter function for the property.
|
|
12
|
+
* @param {Function} [accessors.set] - Setter function for the property.
|
|
13
|
+
* @param {Object} [accessors.prototype] - Prototype object for getter/setter.
|
|
14
|
+
* @param {Object} [options] - Additional options for the accessor property.
|
|
15
|
+
* @param {boolean} [options.configurable=true] - Whether property is configurable.
|
|
16
|
+
* @param {boolean} [options.enumerable=true] - Whether property is enumerable.
|
|
17
|
+
* @param {Object} [options.storage] - Storage object for getter/setter closures.
|
|
18
|
+
* @returns {Property} A new Property instance representing the accessor.
|
|
19
|
+
* @throws {TypeError} If no name, getter, or setter is provided.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Basic usage
|
|
23
|
+
* Property.accessor('color', {
|
|
24
|
+
* get() { return this._color; },
|
|
25
|
+
* set(value) { this._color = value; }
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Using storage
|
|
30
|
+
* Property.accessor('keyword', {
|
|
31
|
+
* get(storage) { return () => storage.keyword; },
|
|
32
|
+
* set(storage) { return (value) => { storage.keyword = value; } }
|
|
33
|
+
* }, { storage: { keyword: 'initial' } });
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Using named getter function
|
|
37
|
+
* Property.accessor('color', function get() { return 'red' })
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* // Using prototype
|
|
41
|
+
* const ColorAccessors = {
|
|
42
|
+
* red: { get() { return this._red; } }
|
|
43
|
+
* };
|
|
44
|
+
* Property.accessor('red', ColorAccessors.red);
|
|
45
|
+
*/
|
|
46
|
+
static accessor(name: string, { get, set, prototype }: {
|
|
47
|
+
get?: Function | undefined;
|
|
48
|
+
set?: Function | undefined;
|
|
49
|
+
prototype?: Object | undefined;
|
|
50
|
+
}, { configurable, enumerable, storage }?: {
|
|
51
|
+
configurable?: boolean | undefined;
|
|
52
|
+
enumerable?: boolean | undefined;
|
|
53
|
+
storage?: Object | undefined;
|
|
54
|
+
} | undefined): Property;
|
|
55
|
+
static data(name: any, value: any, { writable, configurable, enumerable }?: {
|
|
56
|
+
writable: any;
|
|
57
|
+
configurable: any;
|
|
58
|
+
enumerable: any;
|
|
59
|
+
}): Property;
|
|
60
|
+
static from(object: any, name: any): Property;
|
|
61
|
+
static get is(): {
|
|
62
|
+
object(value: any): any;
|
|
63
|
+
descriptor(object: any): boolean;
|
|
64
|
+
};
|
|
65
|
+
constructor(key: any, descriptor: any);
|
|
66
|
+
key: string | symbol;
|
|
67
|
+
set descriptor(descriptor: {
|
|
68
|
+
enumerable: any;
|
|
69
|
+
configurable: any;
|
|
70
|
+
});
|
|
71
|
+
get descriptor(): {
|
|
72
|
+
enumerable: any;
|
|
73
|
+
configurable: any;
|
|
74
|
+
};
|
|
75
|
+
apply(toObject: any, asKey: any): any;
|
|
76
|
+
get is(): {
|
|
77
|
+
readonly accessor: boolean;
|
|
78
|
+
readonly data: boolean;
|
|
79
|
+
};
|
|
80
|
+
toString(colors?: boolean, { key, descriptor }?: {
|
|
81
|
+
key: any;
|
|
82
|
+
descriptor: any;
|
|
83
|
+
}): string;
|
|
84
|
+
}
|
|
85
|
+
export const PropertyExtensions: Extension;
|
|
86
|
+
import { Extension } from '@nejs/extension';
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { Extension } from '@nejs/extension';
|
|
2
|
+
export class Property {
|
|
3
|
+
constructor(key, descriptor) {
|
|
4
|
+
if (key.startsWith(':'))
|
|
5
|
+
key = Symbol.for(key.slice(1));
|
|
6
|
+
if (typeof key !== 'string' && typeof key !== 'symbol') {
|
|
7
|
+
throw new TypeError('Key or symbol or :symbol must be supplied!');
|
|
8
|
+
}
|
|
9
|
+
this.key = key;
|
|
10
|
+
if (!Property.is.descriptor(descriptor)) {
|
|
11
|
+
this.descriptor = {
|
|
12
|
+
value: descriptor,
|
|
13
|
+
writable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
enumerable: true,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this.descriptor = descriptor;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
apply(toObject, asKey) {
|
|
23
|
+
if (!toObject || !['object', 'function'].some(k => k == typeof toObject))
|
|
24
|
+
return;
|
|
25
|
+
return Object.defineProperty(toObject, asKey ?? this.key, this.descriptor);
|
|
26
|
+
}
|
|
27
|
+
get descriptor() {
|
|
28
|
+
const baseline = { configurable: true, enumerable: false };
|
|
29
|
+
const result = {
|
|
30
|
+
enumerable: this.meta.enumerable,
|
|
31
|
+
configurable: this.meta.configurable,
|
|
32
|
+
};
|
|
33
|
+
if (this.is.accessor) {
|
|
34
|
+
result.get = this.meta.accessor.get;
|
|
35
|
+
result.set = this.meta.accessor.set;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
result.value = this.meta.data.value;
|
|
39
|
+
result.writable = this.meta.data.writable;
|
|
40
|
+
}
|
|
41
|
+
return Object.defineProperties(result, {
|
|
42
|
+
make: {
|
|
43
|
+
...baseline,
|
|
44
|
+
get() {
|
|
45
|
+
const self = this;
|
|
46
|
+
return {
|
|
47
|
+
get enumerable() { self.enumerable = true; return self; },
|
|
48
|
+
get hidden() { self.enumerable = false; return self; },
|
|
49
|
+
get writable() { self.writable = true; return self; },
|
|
50
|
+
get readonly() { self.writable = false; return self; },
|
|
51
|
+
get configurable() { self.configurable = true; return self; },
|
|
52
|
+
get immutable() { self.configurable = false; return self; },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
is: {
|
|
57
|
+
...baseline,
|
|
58
|
+
get() {
|
|
59
|
+
const self = this;
|
|
60
|
+
return {
|
|
61
|
+
get accessor() { return self.is.accssor; },
|
|
62
|
+
get data() { return self.is.data; }
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
set descriptor(descriptor) {
|
|
69
|
+
const { is } = this.constructor;
|
|
70
|
+
if (!is.descriptor(descriptor))
|
|
71
|
+
return;
|
|
72
|
+
this.meta.configurable = descriptor.configurable ?? true;
|
|
73
|
+
this.meta.enumerable = descriptor.enumerable ?? true;
|
|
74
|
+
if (Reflect.has(descriptor, 'get') || Reflect.has(descriptor, 'set')) {
|
|
75
|
+
const { get, set } = descriptor;
|
|
76
|
+
if (get !== undefined)
|
|
77
|
+
this.meta.accessor.get = get;
|
|
78
|
+
if (set !== undefined)
|
|
79
|
+
this.meta.accessor.set = set;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const { value, writable } = descriptor;
|
|
83
|
+
this.meta.data.value = value;
|
|
84
|
+
this.meta.data.writable = writable ?? true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
get is() {
|
|
88
|
+
const self = this;
|
|
89
|
+
return {
|
|
90
|
+
get accessor() {
|
|
91
|
+
return !!(self.meta.accessor.get ||
|
|
92
|
+
self.meta.accessor.set);
|
|
93
|
+
},
|
|
94
|
+
get data() {
|
|
95
|
+
return !!!this.accessor;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
toString(colors = false, { key, descriptor } = {}) {
|
|
100
|
+
const bold = s => colors ? `\x1b[1m${s}\x1b[22m` : s;
|
|
101
|
+
const dim = s => colors ? `\x1b[2m${s}\x1b[22m` : s;
|
|
102
|
+
const red = s => colors ? `\x1b[31m${s}\x1b[39m` : s;
|
|
103
|
+
const green = s => colors ? `\x1b[32m${s}\x1b[39m` : s;
|
|
104
|
+
const blue = s => colors ? `\x1b[34m${s}\x1b[39m` : s;
|
|
105
|
+
if (!key)
|
|
106
|
+
({ key } = this);
|
|
107
|
+
if (!descriptor || !Property.is.descriptor(descriptor))
|
|
108
|
+
({ descriptor } = this);
|
|
109
|
+
const buffer = [`${bold(key)} { `];
|
|
110
|
+
const keyPresent = (object) => (key) => Reflect.has(object, key);
|
|
111
|
+
const eqeq = (value, compare = (a, b) => a === b) => (element) => compare(element, value);
|
|
112
|
+
if (['get', 'set'].some(keyPresent(descriptor))) {
|
|
113
|
+
if (descriptor.get) {
|
|
114
|
+
buffer.push(blue('getter'));
|
|
115
|
+
if (descriptor.set) {
|
|
116
|
+
buffer.push(bold('|'));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (descriptor.set) {
|
|
120
|
+
buffer.push(blue('setter'));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
buffer.push(green('value'));
|
|
125
|
+
buffer.push(bold('|'));
|
|
126
|
+
buffer.push(descriptor.writable ? green('writable') : red('readonly'));
|
|
127
|
+
}
|
|
128
|
+
buffer.push(' ');
|
|
129
|
+
buffer.push(descriptor.configurable ? green('mutable') : red('immuatable'));
|
|
130
|
+
buffer.push(' ');
|
|
131
|
+
buffer.push(descriptor.enumerable ? green('visible') : red('hidden'));
|
|
132
|
+
buffer.push(' }');
|
|
133
|
+
return buffer.join('');
|
|
134
|
+
}
|
|
135
|
+
[Symbol.for('nodejs.util.inspect.custom')](depth, options, inspect) {
|
|
136
|
+
return this.toString(true);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Creates an accessor property with customizable getter and setter functions.
|
|
140
|
+
*
|
|
141
|
+
* This method offers flexible ways to define accessor properties, including
|
|
142
|
+
* support for storage-based getters and setters. It can handle various input
|
|
143
|
+
* formats, making it versatile for different use cases.
|
|
144
|
+
*
|
|
145
|
+
* @param {string} name - The name of the accessor property.
|
|
146
|
+
* @param {Object} accessors - Object containing getter and/or setter functions.
|
|
147
|
+
* @param {Function} [accessors.get] - Getter function for the property.
|
|
148
|
+
* @param {Function} [accessors.set] - Setter function for the property.
|
|
149
|
+
* @param {Object} [accessors.prototype] - Prototype object for getter/setter.
|
|
150
|
+
* @param {Object} [options] - Additional options for the accessor property.
|
|
151
|
+
* @param {boolean} [options.configurable=true] - Whether property is configurable.
|
|
152
|
+
* @param {boolean} [options.enumerable=true] - Whether property is enumerable.
|
|
153
|
+
* @param {Object} [options.storage] - Storage object for getter/setter closures.
|
|
154
|
+
* @returns {Property} A new Property instance representing the accessor.
|
|
155
|
+
* @throws {TypeError} If no name, getter, or setter is provided.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* // Basic usage
|
|
159
|
+
* Property.accessor('color', {
|
|
160
|
+
* get() { return this._color; },
|
|
161
|
+
* set(value) { this._color = value; }
|
|
162
|
+
* });
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* // Using storage
|
|
166
|
+
* Property.accessor('keyword', {
|
|
167
|
+
* get(storage) { return () => storage.keyword; },
|
|
168
|
+
* set(storage) { return (value) => { storage.keyword = value; } }
|
|
169
|
+
* }, { storage: { keyword: 'initial' } });
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* // Using named getter function
|
|
173
|
+
* Property.accessor('color', function get() { return 'red' })
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* // Using prototype
|
|
177
|
+
* const ColorAccessors = {
|
|
178
|
+
* red: { get() { return this._red; } }
|
|
179
|
+
* };
|
|
180
|
+
* Property.accessor('red', ColorAccessors.red);
|
|
181
|
+
*/
|
|
182
|
+
static accessor(name, { get, set, prototype }, { configurable, enumerable, storage } = {}) {
|
|
183
|
+
if (!get && !set && prototype) {
|
|
184
|
+
const constructor = prototype?.constructor;
|
|
185
|
+
if (constructor?.name === 'get') {
|
|
186
|
+
get = constructor;
|
|
187
|
+
}
|
|
188
|
+
else if (constructor?.name === 'set') {
|
|
189
|
+
set = constructor;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (get && storage && get.length == 1) {
|
|
193
|
+
get = get(storage);
|
|
194
|
+
}
|
|
195
|
+
if (set && storage && set.length == 1) {
|
|
196
|
+
set = set(storage);
|
|
197
|
+
}
|
|
198
|
+
if (!name && !get && !set)
|
|
199
|
+
throw new TypeError('Cannot create accessor');
|
|
200
|
+
configurable ??= true;
|
|
201
|
+
enumerable ??= true;
|
|
202
|
+
return new Property(name, { get, set, configurable, enumerable });
|
|
203
|
+
}
|
|
204
|
+
static data(name, value, { writable, configurable, enumerable } = {}) {
|
|
205
|
+
if (!name)
|
|
206
|
+
throw new TypeError('Cannot create data property without name');
|
|
207
|
+
writable ??= true;
|
|
208
|
+
configurable ??= true;
|
|
209
|
+
enumerable ??= true;
|
|
210
|
+
return new Property(name, { value, writable, configurable, enumerable });
|
|
211
|
+
}
|
|
212
|
+
static from(object, name) {
|
|
213
|
+
const descriptor = Object.getOwnPropertyDescriptor(object, name);
|
|
214
|
+
return new Property(name, descriptor);
|
|
215
|
+
}
|
|
216
|
+
static get is() {
|
|
217
|
+
return {
|
|
218
|
+
object(value) {
|
|
219
|
+
return value && ['object', 'function'].some(k => k == typeof value);
|
|
220
|
+
},
|
|
221
|
+
descriptor(object) {
|
|
222
|
+
if (!Property.is.object(object)) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
const present = element => Reflect.has(object, element);
|
|
226
|
+
const props = {
|
|
227
|
+
base: ['configurable', 'enumerable'],
|
|
228
|
+
data: ['writable', 'value'],
|
|
229
|
+
accessor: ['get', 'set'],
|
|
230
|
+
};
|
|
231
|
+
if (Object.getOwnPropertyNames(object).length > 4)
|
|
232
|
+
return false;
|
|
233
|
+
if (props.data.some(present) && props.accessor.some(present))
|
|
234
|
+
return false;
|
|
235
|
+
if (props.base.some(present))
|
|
236
|
+
return true;
|
|
237
|
+
if (props.data.some(present))
|
|
238
|
+
return true;
|
|
239
|
+
if (props.accessor.some(present))
|
|
240
|
+
return true;
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
static {
|
|
246
|
+
const storage = Object.assign(Object.create(null), {
|
|
247
|
+
key: undefined,
|
|
248
|
+
meta: {
|
|
249
|
+
enumerable: true,
|
|
250
|
+
configurable: true,
|
|
251
|
+
accessor: {
|
|
252
|
+
get: undefined,
|
|
253
|
+
set: undefined
|
|
254
|
+
},
|
|
255
|
+
data: {
|
|
256
|
+
value: undefined,
|
|
257
|
+
writable: true
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
basic_accessor(this.prototype, 'key', storage.key, storage);
|
|
262
|
+
basic_accessor(this.prototype, 'meta', storage.meta, storage);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
export const PropertyExtensions = new Extension(Property);
|
|
266
|
+
function basic_accessor(prototype, key, initialValue, storage = {}) {
|
|
267
|
+
storage[key] = initialValue;
|
|
268
|
+
Object.defineProperty(prototype, key, {
|
|
269
|
+
get() {
|
|
270
|
+
return storage[key];
|
|
271
|
+
},
|
|
272
|
+
set(value) {
|
|
273
|
+
storage[key] = value;
|
|
274
|
+
},
|
|
275
|
+
enumerable: true,
|
|
276
|
+
configurable: true,
|
|
277
|
+
});
|
|
278
|
+
return Object.getOwnPropertyDescriptor(prototype, key);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=property.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property.js","sourceRoot":"","sources":["../../../src/classes/property.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,OAAO,QAAQ;IACnB,YAAY,GAAG,EAAE,UAAU;QACzB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,GAAG;gBAChB,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;aACjB,CAAA;QACH,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,EAAE,KAAK;QACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,QAAQ,CAAC;YACrE,OAAO;QAET,OAAO,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,QAAQ,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;YAChC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY;SACrC,CAAC;QAEF,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACpC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtC,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C,CAAC;QAED,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACrC,IAAI,EAAE;gBACJ,GAAG,QAAQ;gBACX,GAAG;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC;oBAElB,OAAO;wBACL,IAAI,UAAU,KAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;wBACtD,IAAI,MAAM,KAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;wBAEnD,IAAI,QAAQ,KAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;wBAClD,IAAI,QAAQ,KAAI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;wBAEnD,IAAI,YAAY,KAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;wBAC1D,IAAI,SAAS,KAAI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,CAAA,CAAA,CAAC;qBACzD,CAAA;gBACH,CAAC;aACF;YAED,EAAE,EAAE;gBACF,GAAG,QAAQ;gBACX,GAAG;oBACD,MAAM,IAAI,GAAG,IAAI,CAAC;oBAElB,OAAO;wBACL,IAAI,QAAQ,KAAI,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAA,CAAA,CAAC;wBACvC,IAAI,IAAI,KAAI,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA,CAAA,CAAC;qBACjC,CAAA;gBACH,CAAC;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,UAAU;QACvB,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAEhC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAC5B,OAAO;QAET,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,IAAI,IAAI,CAAA;QACxD,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,IAAI,CAAA;QAEpD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;YAEhC,IAAI,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;YACpD,IAAI,GAAG,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;QACtD,CAAC;aACI,CAAC;YACJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,EAAE;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,OAAO;YACL,IAAI,QAAQ;gBACV,OAAO,CAAC,CAAC,CACP,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;oBACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CACvB,CAAC;YACJ,CAAC;YAED,IAAI,IAAI;gBACN,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;YACzB,CAAC;SACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE,EAAC,GAAG,EAAE,UAAU,EAAC,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtD,IAAI,CAAC,GAAG;YAAE,CAAC,EAAC,GAAG,EAAC,GAAG,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YACpD,CAAC,EAAC,UAAU,EAAC,GAAG,IAAI,CAAC,CAAC;QAExB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChE,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CACjD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC3B,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QACxE,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAE3E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAErE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxB,CAAC;IAED,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EACJ,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,EACrB,EAAC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAC,GAAG,EAAE;QAExC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,SAAS,EAAE,WAAW,CAAC;YAE3C,IAAI,WAAW,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;gBAChC,GAAG,GAAG,WAAW,CAAC;YACpB,CAAC;iBACI,IAAI,WAAW,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;gBACrC,GAAG,GAAG,WAAW,CAAA;YACnB,CAAC;QACH,CAAC;QAED,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAEzE,YAAY,KAAK,IAAI,CAAA;QACrB,UAAU,KAAK,IAAI,CAAA;QAEnB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE;QAClE,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAA;QAE1E,QAAQ,KAAK,IAAI,CAAA;QACjB,YAAY,KAAK,IAAI,CAAA;QACrB,UAAU,KAAK,IAAI,CAAA;QAEnB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,EAAE;QACX,OAAO;YACL,MAAM,CAAC,KAAK;gBACV,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC;YACrE,CAAC;YAED,UAAU,CAAC,MAAM;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG;oBACZ,IAAI,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;oBACpC,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;oBAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;iBACzB,CAAC;gBAEF,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;oBAC/C,OAAO,KAAK,CAAC;gBAEf,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC1D,OAAO,KAAK,CAAC;gBAEf,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAE9C,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAA;IACH,CAAC;IAED;QACE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACjD,GAAG,EAAE,SAAS;YACd,IAAI,EAAE;gBACJ,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE;oBACR,GAAG,EAAE,SAAS;oBACd,GAAG,EAAE,SAAS;iBACf;gBACD,IAAI,EAAE;oBACJ,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,IAAI;iBACf;aACF;SACF,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC3D,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1D,SAAS,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE;IAChE,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;IAE5B,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE;QACpC,GAAG;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,GAAG,CAAC,KAAK;YACP,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACtB,CAAC;QACD,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -112,21 +112,78 @@ export class Symkeys {
|
|
|
112
112
|
*/
|
|
113
113
|
constructor(domain?: string, separator?: string);
|
|
114
114
|
/**
|
|
115
|
-
* Adds a new
|
|
116
|
-
*
|
|
115
|
+
* Adds a new symbol to the Symkeys instance with the given name and
|
|
116
|
+
* associated data.
|
|
117
|
+
*
|
|
118
|
+
* This method generates a unique symbol based on the provided name,
|
|
119
|
+
* optional domain, separator, and token. It also allows embedding
|
|
120
|
+
* additional data into the symbol's name.
|
|
121
|
+
*
|
|
122
|
+
* @param {string} named - The base name for the new symbol.
|
|
123
|
+
* @param {Object} options - Additional options for the symbol.
|
|
124
|
+
* @param {*} [options.associate={}] - Data to associate with the symbol.
|
|
125
|
+
* @param {Object} [options.embed] - Optional data to embed in the symbol.
|
|
126
|
+
* @param {string} [options.useDomain] - Optional domain to include in the
|
|
127
|
+
* symbol's name.
|
|
128
|
+
* @param {string} [options.useSeparator] - Optional separator to use in
|
|
129
|
+
* the symbol's name.
|
|
130
|
+
* @param {string} [options.useToken] - Optional token to use for the
|
|
131
|
+
* symbol. If not provided, a random token is generated.
|
|
132
|
+
* @returns {Symbol} The newly created symbol.
|
|
117
133
|
*
|
|
118
|
-
* @
|
|
119
|
-
*
|
|
120
|
-
*
|
|
134
|
+
* @example
|
|
135
|
+
* // Add a symbol with associated data
|
|
136
|
+
* const mySymbol = symkeys.add('myIdentifier', {
|
|
137
|
+
* associate: { foo: 'bar' },
|
|
138
|
+
* embed: { baz: 'qux' },
|
|
139
|
+
* useDomain: 'exampleDomain',
|
|
140
|
+
* useSeparator: '-',
|
|
141
|
+
* useToken: 'customToken',
|
|
142
|
+
* })
|
|
143
|
+
* console.log(mySymbol)
|
|
144
|
+
* // Symbol(@exampleDomain-myIdentifier {"baz":"qux"} #customToken)
|
|
145
|
+
*/
|
|
146
|
+
add(named: string, { associate, embed, useDomain, useSeparator, useToken, }: {
|
|
147
|
+
associate?: any;
|
|
148
|
+
embed?: Object | undefined;
|
|
149
|
+
useDomain?: string | undefined;
|
|
150
|
+
useSeparator?: string | undefined;
|
|
151
|
+
useToken?: string | undefined;
|
|
152
|
+
}): Symbol;
|
|
153
|
+
/**
|
|
154
|
+
* Creates or retrieves a shared symbol key with the given name and
|
|
155
|
+
* optional associated data.
|
|
156
|
+
*
|
|
157
|
+
* This method generates a shared symbol key using the provided name
|
|
158
|
+
* and optional parameters. If the symbol already exists in the
|
|
159
|
+
* Symkeys's internal map, it updates the associated data if provided.
|
|
160
|
+
* Otherwise, it creates a new symbol with the specified parameters.
|
|
161
|
+
*
|
|
162
|
+
* @param {string} named - The name to use for the shared symbol key.
|
|
163
|
+
* @param {Object} options - Optional parameters for the shared symbol key.
|
|
164
|
+
* @param {Object} [options.associate] - Data to associate with the symbol.
|
|
165
|
+
* @param {Object} [options.embed] - Data to embed in the symbol's name.
|
|
166
|
+
* @param {string} [options.useDomain] - Domain to include in the symbol's name.
|
|
167
|
+
* @param {string} [options.useSeparator] - Separator to use in the symbol's name.
|
|
168
|
+
* @returns {Symbol} The shared symbol key.
|
|
121
169
|
*
|
|
122
170
|
* @example
|
|
123
|
-
* //
|
|
124
|
-
* const
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
171
|
+
* // Create or retrieve a shared symbol key with associated data
|
|
172
|
+
* const sharedSymbol = symkeys.sharedKey('mySharedKey', {
|
|
173
|
+
* associate: { foo: 'bar' },
|
|
174
|
+
* embed: { baz: 'qux' },
|
|
175
|
+
* useDomain: 'exampleDomain',
|
|
176
|
+
* useSeparator: '-',
|
|
177
|
+
* })
|
|
178
|
+
* console.log(sharedSymbol)
|
|
179
|
+
* // Symbol(@exampleDomain-mySharedKey {"baz":"qux"} #shared)
|
|
128
180
|
*/
|
|
129
|
-
|
|
181
|
+
sharedKey(named: string, { associate, embed, useDomain, useSeparator }: {
|
|
182
|
+
associate?: Object | undefined;
|
|
183
|
+
embed?: Object | undefined;
|
|
184
|
+
useDomain?: string | undefined;
|
|
185
|
+
useSeparator?: string | undefined;
|
|
186
|
+
}): Symbol;
|
|
130
187
|
/**
|
|
131
188
|
* Retrieves the data associated with a given symbol from the Symkeys.
|
|
132
189
|
*
|
|
@@ -17,32 +17,118 @@ import { Extension } from '@nejs/extension';
|
|
|
17
17
|
*/
|
|
18
18
|
export class Symkeys {
|
|
19
19
|
/**
|
|
20
|
-
* Adds a new
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
20
|
+
* Adds a new symbol to the Symkeys instance with the given name and
|
|
21
|
+
* associated data.
|
|
22
|
+
*
|
|
23
|
+
* This method generates a unique symbol based on the provided name,
|
|
24
|
+
* optional domain, separator, and token. It also allows embedding
|
|
25
|
+
* additional data into the symbol's name.
|
|
26
|
+
*
|
|
27
|
+
* @param {string} named - The base name for the new symbol.
|
|
28
|
+
* @param {Object} options - Additional options for the symbol.
|
|
29
|
+
* @param {*} [options.associate={}] - Data to associate with the symbol.
|
|
30
|
+
* @param {Object} [options.embed] - Optional data to embed in the symbol.
|
|
31
|
+
* @param {string} [options.useDomain] - Optional domain to include in the
|
|
32
|
+
* symbol's name.
|
|
33
|
+
* @param {string} [options.useSeparator] - Optional separator to use in
|
|
34
|
+
* the symbol's name.
|
|
35
|
+
* @param {string} [options.useToken] - Optional token to use for the
|
|
36
|
+
* symbol. If not provided, a random token is generated.
|
|
37
|
+
* @returns {Symbol} The newly created symbol.
|
|
26
38
|
*
|
|
27
39
|
* @example
|
|
28
|
-
* // Add
|
|
29
|
-
* const
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
40
|
+
* // Add a symbol with associated data
|
|
41
|
+
* const mySymbol = symkeys.add('myIdentifier', {
|
|
42
|
+
* associate: { foo: 'bar' },
|
|
43
|
+
* embed: { baz: 'qux' },
|
|
44
|
+
* useDomain: 'exampleDomain',
|
|
45
|
+
* useSeparator: '-',
|
|
46
|
+
* useToken: 'customToken',
|
|
47
|
+
* })
|
|
48
|
+
* console.log(mySymbol)
|
|
49
|
+
* // Symbol(@exampleDomain-myIdentifier {"baz":"qux"} #customToken)
|
|
33
50
|
*/
|
|
34
|
-
add(named,
|
|
51
|
+
add(named, { associate = {}, embed = undefined, useDomain = undefined, useSeparator = undefined, useToken = undefined, }) {
|
|
35
52
|
// Generate a unique token for the symbol
|
|
36
|
-
const token = Symkeys.token;
|
|
53
|
+
const token = useToken ?? Symkeys.token;
|
|
37
54
|
// Calculate a name (optionally with domain and separator)
|
|
38
|
-
|
|
55
|
+
let symName = this.calculateName(named, useDomain, useSeparator);
|
|
56
|
+
if (embed && typeof embed === 'object') {
|
|
57
|
+
try {
|
|
58
|
+
symName += ` ${JSON.stringify(embed)}`;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.warn(`Cannot create JSON from ${embed}; skipping`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
39
64
|
// Create a symbol using the provided name and the unique token
|
|
40
65
|
const symbol = Symbol.for(`@${symName} #${token}`);
|
|
41
66
|
// Store the symbol and associated data in the Symkeys's internal map
|
|
42
|
-
this[Symkeys.kDataKey].set(symbol,
|
|
67
|
+
this[Symkeys.kDataKey].set(symbol, associate ?? {});
|
|
43
68
|
// Return the unique symbol for external use
|
|
44
69
|
return symbol;
|
|
45
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Creates or retrieves a shared symbol key with the given name and
|
|
73
|
+
* optional associated data.
|
|
74
|
+
*
|
|
75
|
+
* This method generates a shared symbol key using the provided name
|
|
76
|
+
* and optional parameters. If the symbol already exists in the
|
|
77
|
+
* Symkeys's internal map, it updates the associated data if provided.
|
|
78
|
+
* Otherwise, it creates a new symbol with the specified parameters.
|
|
79
|
+
*
|
|
80
|
+
* @param {string} named - The name to use for the shared symbol key.
|
|
81
|
+
* @param {Object} options - Optional parameters for the shared symbol key.
|
|
82
|
+
* @param {Object} [options.associate] - Data to associate with the symbol.
|
|
83
|
+
* @param {Object} [options.embed] - Data to embed in the symbol's name.
|
|
84
|
+
* @param {string} [options.useDomain] - Domain to include in the symbol's name.
|
|
85
|
+
* @param {string} [options.useSeparator] - Separator to use in the symbol's name.
|
|
86
|
+
* @returns {Symbol} The shared symbol key.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* // Create or retrieve a shared symbol key with associated data
|
|
90
|
+
* const sharedSymbol = symkeys.sharedKey('mySharedKey', {
|
|
91
|
+
* associate: { foo: 'bar' },
|
|
92
|
+
* embed: { baz: 'qux' },
|
|
93
|
+
* useDomain: 'exampleDomain',
|
|
94
|
+
* useSeparator: '-',
|
|
95
|
+
* })
|
|
96
|
+
* console.log(sharedSymbol)
|
|
97
|
+
* // Symbol(@exampleDomain-mySharedKey {"baz":"qux"} #shared)
|
|
98
|
+
*/
|
|
99
|
+
sharedKey(named, { associate, embed, useDomain, useSeparator }) {
|
|
100
|
+
// Calculate the symbol name with optional domain and separator
|
|
101
|
+
const symName = this.calculateName(named, useDomain, useSeparator);
|
|
102
|
+
// Initialize JSON string for embedded data
|
|
103
|
+
let json = '';
|
|
104
|
+
if (embed && typeof embed === 'object') {
|
|
105
|
+
try {
|
|
106
|
+
json = ` ${JSON.stringify(embed)}`;
|
|
107
|
+
}
|
|
108
|
+
catch (ignored) {
|
|
109
|
+
// Ignore JSON stringify errors
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Create the shared symbol key
|
|
113
|
+
const symbol = Symbol.for(`@${symName}${json} #shared`);
|
|
114
|
+
// Check if the symbol already exists in the internal map
|
|
115
|
+
if (this[Symkeys.kDataKey].has(symbol)) {
|
|
116
|
+
// Update associated data if provided and symbol is a Symkey
|
|
117
|
+
if (associate && symbol.isSymkey) {
|
|
118
|
+
symbol.data = associate;
|
|
119
|
+
}
|
|
120
|
+
// Return the existing symbol
|
|
121
|
+
return symbol;
|
|
122
|
+
}
|
|
123
|
+
// Add a new symbol with the specified parameters
|
|
124
|
+
return this.add(named, {
|
|
125
|
+
associate: associate ?? {},
|
|
126
|
+
embed,
|
|
127
|
+
useDomain,
|
|
128
|
+
useSeparator,
|
|
129
|
+
useToken: 'shared'
|
|
130
|
+
});
|
|
131
|
+
}
|
|
46
132
|
/**
|
|
47
133
|
* Retrieves the data associated with a given symbol from the Symkeys.
|
|
48
134
|
*
|
|
@@ -162,7 +248,7 @@ export class Symkeys {
|
|
|
162
248
|
token(forSymbol) {
|
|
163
249
|
// Use a regular expression to match the token pattern in the symbol
|
|
164
250
|
// description exists on symbol but our JS output target is too old
|
|
165
|
-
return /^.* \#(.*?)$/.exec(forSymbol)
|
|
251
|
+
return /^.* \#(.*?)$/.exec(forSymbol)?.description?.[1];
|
|
166
252
|
}
|
|
167
253
|
/**
|
|
168
254
|
* Retrieves the separator used in the Symkeys instance.
|
|
@@ -347,7 +433,7 @@ export class Symkeys {
|
|
|
347
433
|
if (!(typeof value === 'symbol' || value instanceof Symbol)) {
|
|
348
434
|
return false;
|
|
349
435
|
}
|
|
350
|
-
return !!/^@.*? #\w+$/.exec(value
|
|
436
|
+
return !!/^@.*? #\w+$/.exec(value?.description);
|
|
351
437
|
}
|
|
352
438
|
/**
|
|
353
439
|
* Generates a random token string.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symkeys.js","sourceRoot":"","sources":["../../../src/classes/symkeys.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;;;;;;;;;;;;;EAeE;AACF,MAAM,OAAO,OAAO;IAClB
|
|
1
|
+
{"version":3,"file":"symkeys.js","sourceRoot":"","sources":["../../../src/classes/symkeys.js"],"names":[],"mappings":"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"}
|