@axi-engine/fields 0.3.3 → 0.3.4
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/core-field-tree-factory.d.ts +13 -0
- package/dist/core-field-tree-factory.d.ts.map +1 -0
- package/dist/core-field-tree-factory.js +14 -0
- package/dist/core-field-tree-factory.js.map +1 -0
- package/dist/core-field-tree.d.ts +5 -0
- package/dist/core-field-tree.d.ts.map +1 -0
- package/dist/core-field-tree.js +4 -0
- package/dist/core-field-tree.js.map +1 -0
- package/dist/core-fields-factory.d.ts +10 -0
- package/dist/core-fields-factory.d.ts.map +1 -0
- package/dist/core-fields-factory.js +14 -0
- package/dist/core-fields-factory.js.map +1 -0
- package/dist/core-fields.d.ts +47 -0
- package/dist/core-fields.d.ts.map +1 -0
- package/dist/core-fields.js +8 -0
- package/dist/core-fields.js.map +1 -0
- package/dist/data-store-field-resolver.d.ts +26 -0
- package/dist/data-store-field-resolver.d.ts.map +1 -0
- package/dist/data-store-field-resolver.js +21 -0
- package/dist/data-store-field-resolver.js.map +1 -0
- package/dist/data-store.d.ts +38 -0
- package/dist/data-store.d.ts.map +1 -0
- package/dist/data-store.js +141 -0
- package/dist/data-store.js.map +1 -0
- package/dist/field-definitions/core-boolean-field.d.ts +11 -0
- package/dist/field-definitions/core-boolean-field.d.ts.map +1 -0
- package/dist/field-definitions/core-boolean-field.js +13 -0
- package/dist/field-definitions/core-boolean-field.js.map +1 -0
- package/dist/field-definitions/core-field.d.ts +51 -0
- package/dist/field-definitions/core-field.d.ts.map +1 -0
- package/dist/field-definitions/core-field.js +74 -0
- package/dist/field-definitions/core-field.js.map +1 -0
- package/dist/field-definitions/core-numeric-field.d.ts +18 -0
- package/dist/field-definitions/core-numeric-field.d.ts.map +1 -0
- package/dist/field-definitions/core-numeric-field.js +45 -0
- package/dist/field-definitions/core-numeric-field.js.map +1 -0
- package/dist/field-definitions/core-string-field.d.ts +15 -0
- package/dist/field-definitions/core-string-field.d.ts.map +1 -0
- package/dist/field-definitions/core-string-field.js +27 -0
- package/dist/field-definitions/core-string-field.js.map +1 -0
- package/dist/field-definitions/index.d.ts +5 -0
- package/dist/field-definitions/index.d.ts.map +1 -0
- package/dist/field-definitions/index.js +5 -0
- package/dist/field-definitions/index.js.map +1 -0
- package/dist/field-registry.d.ts +5 -0
- package/dist/field-registry.d.ts.map +1 -0
- package/dist/field-registry.js +4 -0
- package/dist/field-registry.js.map +1 -0
- package/dist/field-tree-factory.d.ts +12 -0
- package/dist/field-tree-factory.d.ts.map +1 -0
- package/dist/field-tree-factory.js +2 -0
- package/dist/field-tree-factory.js.map +1 -0
- package/dist/field-tree.d.ts +171 -0
- package/dist/field-tree.d.ts.map +1 -0
- package/dist/field-tree.js +248 -0
- package/dist/field-tree.js.map +1 -0
- package/dist/field.d.ts +34 -0
- package/dist/field.d.ts.map +1 -0
- package/dist/field.js +2 -0
- package/dist/field.js.map +1 -0
- package/dist/fields-factory.d.ts +5 -0
- package/dist/fields-factory.d.ts.map +1 -0
- package/dist/fields-factory.js +2 -0
- package/dist/fields-factory.js.map +1 -0
- package/dist/fields.d.ts +101 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +143 -0
- package/dist/fields.js.map +1 -0
- package/dist/index.d.mts +794 -815
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1084 -1116
- package/dist/mixins/mixin-factory.d.ts +29 -0
- package/dist/mixins/mixin-factory.d.ts.map +1 -0
- package/dist/mixins/mixin-factory.js +32 -0
- package/dist/mixins/mixin-factory.js.map +1 -0
- package/dist/mixins/with-boolean-fields.mixin.d.ts +9 -0
- package/dist/mixins/with-boolean-fields.mixin.d.ts.map +1 -0
- package/dist/mixins/with-boolean-fields.mixin.js +4 -0
- package/dist/mixins/with-boolean-fields.mixin.js.map +1 -0
- package/dist/mixins/with-default-generic-fields.mixin.d.ts +31 -0
- package/dist/mixins/with-default-generic-fields.mixin.d.ts.map +1 -0
- package/dist/mixins/with-default-generic-fields.mixin.js +15 -0
- package/dist/mixins/with-default-generic-fields.mixin.js.map +1 -0
- package/dist/mixins/with-numeric-fields.mixin.d.ts +9 -0
- package/dist/mixins/with-numeric-fields.mixin.d.ts.map +1 -0
- package/dist/mixins/with-numeric-fields.mixin.js +4 -0
- package/dist/mixins/with-numeric-fields.mixin.js.map +1 -0
- package/dist/mixins/with-string-fields.mixin.d.ts +9 -0
- package/dist/mixins/with-string-fields.mixin.d.ts.map +1 -0
- package/dist/mixins/with-string-fields.mixin.js +4 -0
- package/dist/mixins/with-string-fields.mixin.js.map +1 -0
- package/dist/policies/clamp-max-policy.d.ts +11 -0
- package/dist/policies/clamp-max-policy.d.ts.map +1 -0
- package/dist/policies/clamp-max-policy.js +18 -0
- package/dist/policies/clamp-max-policy.js.map +1 -0
- package/dist/policies/clamp-min-policy.d.ts +11 -0
- package/dist/policies/clamp-min-policy.d.ts.map +1 -0
- package/dist/policies/clamp-min-policy.js +18 -0
- package/dist/policies/clamp-min-policy.js.map +1 -0
- package/dist/policies/clamp-policy.d.ts +12 -0
- package/dist/policies/clamp-policy.d.ts.map +1 -0
- package/dist/policies/clamp-policy.js +21 -0
- package/dist/policies/clamp-policy.js.map +1 -0
- package/dist/policies/index.d.ts +6 -0
- package/dist/policies/index.d.ts.map +1 -0
- package/dist/policies/index.js +6 -0
- package/dist/policies/index.js.map +1 -0
- package/dist/policies/policies.d.ts +38 -0
- package/dist/policies/policies.d.ts.map +1 -0
- package/dist/policies/policies.js +62 -0
- package/dist/policies/policies.js.map +1 -0
- package/dist/policies/policy.d.ts +6 -0
- package/dist/policies/policy.d.ts.map +1 -0
- package/dist/policies/policy.js +2 -0
- package/dist/policies/policy.js.map +1 -0
- package/dist/serializer/field-serializer.d.ts +52 -0
- package/dist/serializer/field-serializer.d.ts.map +1 -0
- package/dist/serializer/field-serializer.js +66 -0
- package/dist/serializer/field-serializer.js.map +1 -0
- package/dist/serializer/field-tree-serializer.d.ts +50 -0
- package/dist/serializer/field-tree-serializer.d.ts.map +1 -0
- package/dist/serializer/field-tree-serializer.js +68 -0
- package/dist/serializer/field-tree-serializer.js.map +1 -0
- package/dist/serializer/fields-serializer.d.ts +49 -0
- package/dist/serializer/fields-serializer.d.ts.map +1 -0
- package/dist/serializer/fields-serializer.js +57 -0
- package/dist/serializer/fields-serializer.js.map +1 -0
- package/dist/serializer/index.d.ts +8 -0
- package/dist/serializer/index.d.ts.map +1 -0
- package/dist/serializer/index.js +8 -0
- package/dist/serializer/index.js.map +1 -0
- package/dist/serializer/policies/clamp-max-policy-serializer-handler.d.ts +13 -0
- package/dist/serializer/policies/clamp-max-policy-serializer-handler.d.ts.map +1 -0
- package/dist/serializer/policies/clamp-max-policy-serializer-handler.js +10 -0
- package/dist/serializer/policies/clamp-max-policy-serializer-handler.js.map +1 -0
- package/dist/serializer/policies/clamp-min-policy-serializer-handler.d.ts +13 -0
- package/dist/serializer/policies/clamp-min-policy-serializer-handler.d.ts.map +1 -0
- package/dist/serializer/policies/clamp-min-policy-serializer-handler.js +10 -0
- package/dist/serializer/policies/clamp-min-policy-serializer-handler.js.map +1 -0
- package/dist/serializer/policies/clamp-policy-serializer-handler.d.ts +16 -0
- package/dist/serializer/policies/clamp-policy-serializer-handler.d.ts.map +1 -0
- package/dist/serializer/policies/clamp-policy-serializer-handler.js +10 -0
- package/dist/serializer/policies/clamp-policy-serializer-handler.js.map +1 -0
- package/dist/serializer/policy-serializer.d.ts +41 -0
- package/dist/serializer/policy-serializer.d.ts.map +1 -0
- package/dist/serializer/policy-serializer.js +43 -0
- package/dist/serializer/policy-serializer.js.map +1 -0
- package/dist/setup.d.ts +41 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +57 -0
- package/dist/setup.js.map +1 -0
- package/dist/store.d.ts +137 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -0
- package/package.json +44 -44
- package/dist/index.cjs +0 -1232
- package/dist/index.d.cts +0 -1018
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields-factory.d.ts","sourceRoot":"","sources":["../src/fields-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM;IACnD,MAAM,IAAI,OAAO,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields-factory.js","sourceRoot":"","sources":["../src/fields-factory.ts"],"names":[],"mappings":""}
|
package/dist/fields.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Emitter } from '@axi-engine/utils';
|
|
2
|
+
import { FieldRegistry } from './field-registry';
|
|
3
|
+
import { Field } from './field';
|
|
4
|
+
/**
|
|
5
|
+
* A container for a collection of named `Field` instances.
|
|
6
|
+
*
|
|
7
|
+
* This class acts as a "leaf" node in the `FieldTree` hierarchy, managing a flat
|
|
8
|
+
* key-value store of reactive data points. It uses a `FieldRegistry` to dynamically
|
|
9
|
+
* create `Field` instances of different types.
|
|
10
|
+
*/
|
|
11
|
+
export declare class Fields {
|
|
12
|
+
static readonly typeName = "fields";
|
|
13
|
+
readonly typeName = "fields";
|
|
14
|
+
readonly _fields: Map<string, Field<any>>;
|
|
15
|
+
readonly _fieldRegistry: FieldRegistry;
|
|
16
|
+
/**
|
|
17
|
+
* An event emitter that fires when a new field is added to the collection.
|
|
18
|
+
* @event
|
|
19
|
+
* @param {object} event - The event payload.
|
|
20
|
+
* @param {string} event.name - The name of the added field.
|
|
21
|
+
* @param {Field<any>} event.field - The `Field` instance that was added.
|
|
22
|
+
*/
|
|
23
|
+
onAdd: Emitter<[event: {
|
|
24
|
+
name: string;
|
|
25
|
+
field: Field<any>;
|
|
26
|
+
}]>;
|
|
27
|
+
/**
|
|
28
|
+
* An event emitter that fires after one or more fields have been removed.
|
|
29
|
+
* @event
|
|
30
|
+
* @param {object} event - The event payload.
|
|
31
|
+
* @param {string[]} event.names - An array of names of the fields that were successfully removed.
|
|
32
|
+
*/
|
|
33
|
+
onRemove: Emitter<[event: {
|
|
34
|
+
names: string[];
|
|
35
|
+
}]>;
|
|
36
|
+
/**
|
|
37
|
+
* Gets the read-only map of all `Field` instances in this container.
|
|
38
|
+
* @returns {Map<string, Field<any>>} The collection of fields.
|
|
39
|
+
*/
|
|
40
|
+
get fields(): Map<string, Field<any>>;
|
|
41
|
+
/**
|
|
42
|
+
* Creates an instance of Fields.
|
|
43
|
+
* @param {FieldRegistry} fieldRegistry - The registry used to create new `Field` instances.
|
|
44
|
+
*/
|
|
45
|
+
constructor(fieldRegistry: FieldRegistry);
|
|
46
|
+
/**
|
|
47
|
+
* Checks if a field with the given name exists in the collection.
|
|
48
|
+
* @param {string} name The name of the field to check.
|
|
49
|
+
* @returns {boolean} `true` if the field exists, otherwise `false`.
|
|
50
|
+
*/
|
|
51
|
+
has(name: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Adds a pre-existing `Field` instance to the collection and fires the `onAdd` event.
|
|
54
|
+
* @template T - The specific `Field` type being added.
|
|
55
|
+
* @param {Field<any>} field - The `Field` instance to add.
|
|
56
|
+
* @returns {T} The added `Field` instance, cast to type `T`.
|
|
57
|
+
* @throws If a field with the same name already exists.
|
|
58
|
+
*/
|
|
59
|
+
add<T extends Field<any>>(field: Field<any>): T;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new `Field` instance of a specified type, adds it to the collection, and returns it.
|
|
62
|
+
* This is the primary factory method for creating fields within this container.
|
|
63
|
+
* @template T - The expected `Field` type to be returned.
|
|
64
|
+
* @param {string} typeName - The registered type name of the field to create (e.g., 'numeric', 'boolean').
|
|
65
|
+
* @param {string} name - The unique name for the new field.
|
|
66
|
+
* @param {*} initialValue - The initial value for the new field.
|
|
67
|
+
* @param {*} [options] - Optional configuration passed to the field's constructor.
|
|
68
|
+
* @returns {T} The newly created `Field` instance.
|
|
69
|
+
*/
|
|
70
|
+
create<T extends Field<any>>(typeName: string, name: string, initialValue: any, options?: any): T;
|
|
71
|
+
/**
|
|
72
|
+
* Updates an existing field's value or creates a new one if it doesn't exist.
|
|
73
|
+
* @template T - The expected `Field` type.
|
|
74
|
+
* @param {string} typeName - The type name to use if a new field needs to be created.
|
|
75
|
+
* @param {string} name - The name of the field to update or create.
|
|
76
|
+
* @param {*} value - The new value to set.
|
|
77
|
+
* @param {*} [options] - Optional configuration, used only if a new field is created.
|
|
78
|
+
* @returns {T} The existing or newly created `Field` instance.
|
|
79
|
+
*/
|
|
80
|
+
upset<T extends Field<any>>(typeName: string, name: string, value: any, options?: any): T;
|
|
81
|
+
/**
|
|
82
|
+
* Retrieves a field by its name.
|
|
83
|
+
* @template TField - The expected `Field` type to be returned.
|
|
84
|
+
* @param {string} name - The name of the field to retrieve.
|
|
85
|
+
* @returns {TField} The `Field` instance.
|
|
86
|
+
* @throws If the field does not exist.
|
|
87
|
+
*/
|
|
88
|
+
get<TField extends Field<any>>(name: string): TField;
|
|
89
|
+
/**
|
|
90
|
+
* Removes one or more fields from the collection.
|
|
91
|
+
* This method ensures that the `destroy` method of each removed field is called to clean up its resources.
|
|
92
|
+
* @param {string| string[]} names A single name or an array of names to remove.
|
|
93
|
+
*/
|
|
94
|
+
remove(names: string | string[]): void;
|
|
95
|
+
/**
|
|
96
|
+
* Removes all fields from the collection, ensuring each is properly destroyed.
|
|
97
|
+
*/
|
|
98
|
+
clear(): void;
|
|
99
|
+
destroy(): void;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAU,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAE9B;;;;;;GAMG;AACH,qBAAa,MAAM;IACjB,MAAM,CAAC,QAAQ,CAAC,QAAQ,YAAY;IACpC,QAAQ,CAAC,QAAQ,YAAmB;IAEpC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAa;IACtD,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC;IAEvC;;;;;;OAMG;IACH,KAAK;cACG,MAAM;eACL,KAAK,CAAC,GAAG,CAAC;QACb;IAEN;;;;;OAKG;IACH,QAAQ;eACC,MAAM,EAAE;QACX;IAEN;;;OAGG;IACH,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAEpC;IAED;;;OAGG;gBACS,aAAa,EAAE,aAAa;IAIxC;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAa/C;;;;;;;;;OASG;IACH,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,EACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,GAAG,EACjB,OAAO,CAAC,EAAE,GAAG,GACZ,CAAC;IAOJ;;;;;;;;OAQG;IACH,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,GAAG,GACZ,CAAC;IASJ;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAkB/B;;OAEG;IACH,KAAK;IAIL,OAAO;CAKR"}
|
package/dist/fields.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Emitter, throwIf } from '@axi-engine/utils';
|
|
2
|
+
/**
|
|
3
|
+
* A container for a collection of named `Field` instances.
|
|
4
|
+
*
|
|
5
|
+
* This class acts as a "leaf" node in the `FieldTree` hierarchy, managing a flat
|
|
6
|
+
* key-value store of reactive data points. It uses a `FieldRegistry` to dynamically
|
|
7
|
+
* create `Field` instances of different types.
|
|
8
|
+
*/
|
|
9
|
+
export class Fields {
|
|
10
|
+
static typeName = 'fields';
|
|
11
|
+
typeName = Fields.typeName;
|
|
12
|
+
_fields = new Map();
|
|
13
|
+
_fieldRegistry;
|
|
14
|
+
/**
|
|
15
|
+
* An event emitter that fires when a new field is added to the collection.
|
|
16
|
+
* @event
|
|
17
|
+
* @param {object} event - The event payload.
|
|
18
|
+
* @param {string} event.name - The name of the added field.
|
|
19
|
+
* @param {Field<any>} event.field - The `Field` instance that was added.
|
|
20
|
+
*/
|
|
21
|
+
onAdd = new Emitter();
|
|
22
|
+
/**
|
|
23
|
+
* An event emitter that fires after one or more fields have been removed.
|
|
24
|
+
* @event
|
|
25
|
+
* @param {object} event - The event payload.
|
|
26
|
+
* @param {string[]} event.names - An array of names of the fields that were successfully removed.
|
|
27
|
+
*/
|
|
28
|
+
onRemove = new Emitter();
|
|
29
|
+
/**
|
|
30
|
+
* Gets the read-only map of all `Field` instances in this container.
|
|
31
|
+
* @returns {Map<string, Field<any>>} The collection of fields.
|
|
32
|
+
*/
|
|
33
|
+
get fields() {
|
|
34
|
+
return this._fields;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates an instance of Fields.
|
|
38
|
+
* @param {FieldRegistry} fieldRegistry - The registry used to create new `Field` instances.
|
|
39
|
+
*/
|
|
40
|
+
constructor(fieldRegistry) {
|
|
41
|
+
this._fieldRegistry = fieldRegistry;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Checks if a field with the given name exists in the collection.
|
|
45
|
+
* @param {string} name The name of the field to check.
|
|
46
|
+
* @returns {boolean} `true` if the field exists, otherwise `false`.
|
|
47
|
+
*/
|
|
48
|
+
has(name) {
|
|
49
|
+
return this._fields.has(name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Adds a pre-existing `Field` instance to the collection and fires the `onAdd` event.
|
|
53
|
+
* @template T - The specific `Field` type being added.
|
|
54
|
+
* @param {Field<any>} field - The `Field` instance to add.
|
|
55
|
+
* @returns {T} The added `Field` instance, cast to type `T`.
|
|
56
|
+
* @throws If a field with the same name already exists.
|
|
57
|
+
*/
|
|
58
|
+
add(field) {
|
|
59
|
+
throwIf(this.has(field.name), `Field with name '${field.name}' already exists`);
|
|
60
|
+
this._fields.set(field.name, field);
|
|
61
|
+
this.onAdd.emit({
|
|
62
|
+
name: field.name,
|
|
63
|
+
field: field
|
|
64
|
+
});
|
|
65
|
+
return field;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a new `Field` instance of a specified type, adds it to the collection, and returns it.
|
|
69
|
+
* This is the primary factory method for creating fields within this container.
|
|
70
|
+
* @template T - The expected `Field` type to be returned.
|
|
71
|
+
* @param {string} typeName - The registered type name of the field to create (e.g., 'numeric', 'boolean').
|
|
72
|
+
* @param {string} name - The unique name for the new field.
|
|
73
|
+
* @param {*} initialValue - The initial value for the new field.
|
|
74
|
+
* @param {*} [options] - Optional configuration passed to the field's constructor.
|
|
75
|
+
* @returns {T} The newly created `Field` instance.
|
|
76
|
+
*/
|
|
77
|
+
create(typeName, name, initialValue, options) {
|
|
78
|
+
const Ctor = this._fieldRegistry.get(typeName);
|
|
79
|
+
const field = new Ctor(name, initialValue, options);
|
|
80
|
+
this.add(field);
|
|
81
|
+
return field;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Updates an existing field's value or creates a new one if it doesn't exist.
|
|
85
|
+
* @template T - The expected `Field` type.
|
|
86
|
+
* @param {string} typeName - The type name to use if a new field needs to be created.
|
|
87
|
+
* @param {string} name - The name of the field to update or create.
|
|
88
|
+
* @param {*} value - The new value to set.
|
|
89
|
+
* @param {*} [options] - Optional configuration, used only if a new field is created.
|
|
90
|
+
* @returns {T} The existing or newly created `Field` instance.
|
|
91
|
+
*/
|
|
92
|
+
upset(typeName, name, value, options) {
|
|
93
|
+
if (this.has(name)) {
|
|
94
|
+
const field = this.get(name);
|
|
95
|
+
field.value = value;
|
|
96
|
+
return field;
|
|
97
|
+
}
|
|
98
|
+
return this.create(typeName, name, value, options);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Retrieves a field by its name.
|
|
102
|
+
* @template TField - The expected `Field` type to be returned.
|
|
103
|
+
* @param {string} name - The name of the field to retrieve.
|
|
104
|
+
* @returns {TField} The `Field` instance.
|
|
105
|
+
* @throws If the field does not exist.
|
|
106
|
+
*/
|
|
107
|
+
get(name) {
|
|
108
|
+
throwIf(!this._fields.has(name), `Field with name '${name}' not exists`);
|
|
109
|
+
return this._fields.get(name);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Removes one or more fields from the collection.
|
|
113
|
+
* This method ensures that the `destroy` method of each removed field is called to clean up its resources.
|
|
114
|
+
* @param {string| string[]} names A single name or an array of names to remove.
|
|
115
|
+
*/
|
|
116
|
+
remove(names) {
|
|
117
|
+
const namesToRemove = Array.isArray(names) ? names : [names];
|
|
118
|
+
const reallyRemoved = namesToRemove.filter(name => {
|
|
119
|
+
const field = this._fields.get(name);
|
|
120
|
+
if (!field) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
field.destroy();
|
|
124
|
+
return this._fields.delete(name);
|
|
125
|
+
});
|
|
126
|
+
if (!reallyRemoved.length) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.onRemove.emit({ names: reallyRemoved });
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Removes all fields from the collection, ensuring each is properly destroyed.
|
|
133
|
+
*/
|
|
134
|
+
clear() {
|
|
135
|
+
this.remove(Array.from(this._fields.keys()));
|
|
136
|
+
}
|
|
137
|
+
destroy() {
|
|
138
|
+
this.clear();
|
|
139
|
+
this.onAdd.clear();
|
|
140
|
+
this.onRemove.clear();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|