@furo/open-models 1.7.1 → 1.7.2

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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { ValueState } from './ValueState.js';
5
5
  import { FieldConstraints } from './FieldConstraints.js';
6
- type EventType = 'field-value-changed' | 'this-field-value-changed' | 'this-state-changed' | 'state-changed' | 'validity-changed' | 'array-changed' | 'this-array-changed' | 'map-changed' | 'this-map-changed' | 'model-injected';
6
+ type EventType = 'field-value-changed' | 'this-field-value-changed' | 'field-value-updated' | 'this-state-changed' | 'state-changed' | 'validity-changed' | 'array-changed' | 'this-array-changed' | 'map-changed' | 'this-map-changed' | 'model-injected';
7
7
  type Meta = {
8
8
  businessVaueState: ValueState;
9
9
  index?: number;
package/dist/FieldNode.js CHANGED
@@ -36,7 +36,6 @@ export class FieldNode {
36
36
  }
37
37
  else {
38
38
  this.___updateNotEmptyPath();
39
- this.__rootNode.__meta.isPristine = false;
40
39
  }
41
40
  }
42
41
  constructor(_initData, parent, parentAttributeName) {
@@ -138,6 +137,7 @@ export class FieldNode {
138
137
  bubbles: false,
139
138
  detail: this,
140
139
  }));
140
+ this.__meta.isPristine = true;
141
141
  // this.__notifyFieldValueChange(true);
142
142
  }
143
143
  __setModelValidStateTrue() {
@@ -174,10 +174,10 @@ export class FieldNode {
174
174
  return;
175
175
  }
176
176
  this[`_${field.fieldName}`].__updateWithLiteral(data[field.fieldName]);
177
- this[`_${field.fieldName}`].__meta.isPristine = true;
177
+ this[`_${field.fieldName}`].__meta.isPristine = false;
178
178
  });
179
- // set the object itself to pristine
180
- this.__meta.isPristine = true;
179
+ // set the object itself to pristine on root nodes
180
+ this.__meta.isPristine = false;
181
181
  this.__notifyFieldValueChange(false);
182
182
  }
183
183
  __stringify() {
@@ -635,10 +635,12 @@ export class FieldNode {
635
635
  __reset() {
636
636
  if (this.__meta.initialValue !== undefined) {
637
637
  this.__updateWithLiteral(this.__meta.initialValue);
638
+ this.__meta.isPristine = true;
638
639
  return;
639
640
  }
640
641
  // else re init every field downwards
641
642
  this.__clear();
643
+ this.__meta.isPristine = true;
642
644
  }
643
645
  /**
644
646
  * Clear clears the element downwards and set __isEmpty to true on all sub nodes.
@@ -709,6 +711,10 @@ export class FieldNode {
709
711
  bubbles: false,
710
712
  }));
711
713
  if (bubbles) {
714
+ this.__rootNode.__meta.isPristine = false;
715
+ // todo check if nodes in between this and root should be set to false too
716
+ // check ARRAY.ts line 120 too
717
+ this.__meta.isPristine = false;
712
718
  // console.log('bubble', this.__meta.typeName)
713
719
  this.__dispatchEvent(new CustomEvent('field-value-changed', {
714
720
  detail: this,
@@ -716,8 +722,8 @@ export class FieldNode {
716
722
  }));
717
723
  }
718
724
  else {
719
- // console.log('non', this.__meta.typeName)
720
- this.__dispatchEvent(new CustomEvent('field-value-changed', {
725
+ // triggered on clear or fromLiteral
726
+ this.__dispatchEvent(new CustomEvent('field-value-updated', {
721
727
  detail: this,
722
728
  bubbles: false,
723
729
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"FieldNode.js","sourceRoot":"","sources":["../src/FieldNode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-classes-per-file, no-use-before-define */\n\n/**\n * notes: i18n is not part of the api anymore\n */\nimport { ValueState } from './ValueState';\nimport { ToString, ValueOf } from './CustomPrototypes';\nimport { CustomConstraints, Validators } from './Validator';\nimport { OPEN_MODELS_OPTIONS } from './OPEN_MODELS_OPTIONS';\nimport { FieldConstraints } from './FieldConstraints';\n\ntype EventType =\n | 'field-value-changed'\n | 'this-field-value-changed'\n | 'this-state-changed'\n | 'state-changed'\n | 'validity-changed'\n | 'array-changed'\n | 'this-array-changed'\n | 'map-changed'\n | 'this-map-changed'\n | 'model-injected'; // fired before field-value-changed and this-field-value-changed\n\ntype Meta = {\n businessVaueState: ValueState;\n index?: number;\n oldValue?: unknown;\n initialValue: unknown; // Initial value from __updateWithLiteral\n typeName: string; // i.e \"furo.fat.Bool\"\n fieldName?: string; // field name of this node used by its parent node\n valueState: ValueState;\n stateMessage: string;\n nodeFields: FieldDescriptor[];\n readonly: boolean;\n required: boolean;\n isArrayNode: boolean; // set by array and used by baseName resolver to omit the index in the names\n // deleteArrayNode: () => void, // only available on array nodes\n isRecursionNode: boolean;\n isAnyNode: boolean;\n isValid: boolean;\n isPristine: boolean;\n eventListener: Map<\n string,\n {\n callbackfn: CustomEventListener;\n options?: AddEventListenerOptions | boolean;\n }[]\n >;\n};\n\n/**\n * Primitives have always a value field\n */\ninterface IPrimitive extends FieldNode {\n _value: unknown; // contains the value of the FieldNode\n}\n\ninterface CustomEventListener {\n (evt: CustomEvent): void;\n}\n\ntype FieldDescriptor = {\n // camel case name of the field\n fieldName: string;\n // API name of the field, defined by contract.\n protoName: string;\n // class of the type, must start with cap\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldConstructor: any; // (new(_initData: any, parent?: FieldNode, parentAttributeName?: string) => FieldNode);\n ValueConstructor?: new () => FieldNode; // used by MAP\n constraints?: FieldConstraints;\n};\n\nexport interface ValueStateSummary {\n /**\n * path of the field\n *\n * `fullName` for a violation in the `fullName` value\n * `emailAddresses[1].email` for a violation in the `email` field of the first `emailAddresses` message\n * `emailAddresses[3].type[2]` for a violation in the second `type` value in the third `emailAddresses` message.\n */\n field: string;\n state: ValueState;\n message: string;\n}\n\nexport abstract class FieldNode {\n protected ___isEmpty: boolean = true;\n\n /**\n * Marker for primitive types\n */\n public __isPrimitive: boolean = false;\n\n /**\n * Parent node of a node. This is undefined on root nodes.\n */\n public __parentNode: FieldNode | undefined;\n\n /**\n * Meta data of a field node.\n */\n public __meta: Meta = {\n businessVaueState: ValueState.None,\n readonly: false,\n required: false,\n initialValue: undefined,\n isPristine: true,\n isValid: true,\n valueState: ValueState.None,\n stateMessage: '',\n typeName: '',\n nodeFields: [],\n isArrayNode: false,\n isRecursionNode: false,\n isAnyNode: false,\n eventListener: new Map<string, []>(),\n };\n\n private ___rootNode: FieldNode;\n\n private ___readonlyState: Map<FieldNode, boolean> = new Map<\n FieldNode,\n boolean\n >();\n\n /**\n * Root node of a node\n */\n get __rootNode(): FieldNode {\n return this.___rootNode;\n }\n\n /**\n * Root node of a node. Do not set this value by yourself.\n * @param value\n */\n set __rootNode(value: FieldNode) {\n this.___rootNode = value;\n }\n\n /**\n * Empty state of the node\n */\n get __isEmpty() {\n return this.___isEmpty;\n }\n\n /**\n * Empty state of the node\n * @param empty\n */\n set __isEmpty(empty: boolean) {\n if (empty) {\n this.___isEmpty = true;\n } else {\n this.___updateNotEmptyPath();\n this.__rootNode.__meta.isPristine = false;\n }\n }\n\n constructor(\n _initData: undefined,\n parent?: FieldNode,\n parentAttributeName?: string,\n ) {\n this.__parentNode = parent;\n\n if (parent) {\n this.___rootNode = parent.__rootNode;\n } else {\n this.___rootNode = this;\n }\n\n this.__meta.fieldName = parentAttributeName;\n }\n\n /**\n * Get a FieldNode by giving a field path using the proto names for the fields.\n *\n *\n *\n * - `email_addresses[3].type[2]` for the second `type` value in the third `email_addresses` message.\n * - `user.location.street` for the street in location in user.\n *\n * @param {string} deepPath - Path of the field.\n */\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n // replace array paths\n const path = deepPath.replaceAll(/[[\\]]/g, '.').split('.');\n if (path.length > 0 && path[0] !== '') {\n // rest wieder in error reinwerfen\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n // convert to camel\n const fieldName = this.__toLowerCamelCase(path[0]) as keyof FieldNode;\n\n if (deepPath === '') {\n if (this[fieldName]) {\n return this[fieldName] as FieldNode;\n }\n } else if (this[fieldName]) {\n return (this[fieldName] as FieldNode).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n set __readonly(v: boolean) {\n this.__meta.readonly = v;\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n // store readonly state if\n const cro = this.___readonlyState.get(child);\n if (cro === undefined) {\n this.___readonlyState.set(child, child.__readonly);\n }\n\n if (!child.__readonly && v) {\n // eslint-disable-next-line no-param-reassign\n child.__readonly = v;\n }\n }\n });\n }\n\n get __readonly(): boolean {\n return this.__meta.readonly;\n }\n\n /**\n * Build up the model with the literal type. The literal type matches the interface from ITypeName.\n * @param {} literal - The literal type matches the interface from ITypeName.\n */\n __fromLiteral(literal: unknown) {\n this.__updateWithLiteral(literal);\n // clear the state of the validity and value state\n this.__setModelValidStateTrue();\n\n this.__dispatchEvent(\n new CustomEvent('model-injected', {\n composed: true,\n bubbles: false,\n detail: this,\n }),\n );\n // this.__notifyFieldValueChange(true);\n }\n\n private __setModelValidStateTrue() {\n this.__meta.isValid = true;\n this.__setValueState(ValueState.None, ['']);\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__setModelValidStateTrue();\n }\n });\n }\n\n /**\n * Updates the model from literal data, without changing the validity and value state.\n *\n * @param literal\n */\n __updateWithLiteral(literal: unknown) {\n this.__clear(true);\n // store injected literal for reset()\n this.__meta.initialValue = literal;\n // a field which is set is not empty\n this.___isEmpty = false;\n const data = structuredClone(literal);\n\n // go through available fields\n this.__meta.nodeFields.forEach(field => {\n // __clear fields which are not available in literal\n // if the field does not exist on the incoming literal, reset or __clear the value on the fieldNode\n // make an undefined on complex types\n if (\n (data as FieldNode)[field.fieldName as keyof FieldNode] === undefined\n ) {\n if (this[`_${field.fieldName}` as keyof FieldNode] !== undefined) {\n // primitives go to their default values\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n }\n return;\n }\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__updateWithLiteral(\n (data as FieldNode)[field.fieldName as keyof FieldNode],\n );\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__meta.isPristine = true;\n });\n // set the object itself to pristine\n this.__meta.isPristine = true;\n this.__notifyFieldValueChange(false);\n }\n\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n /**\n * Converts the model to a JSON struct wich matches the protobuf spec.\n * If the `UseProtoNames` option is set to false, lowerCamelCase is produced.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __toJson(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n // use jsonName if UseProtoNames is set, otherwise convert to lowerCamel without X prefix\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.protoName\n : this.__toLowerCamelCaseWithoutXPrefix(f.protoName);\n\n if (OPEN_MODELS_OPTIONS.EmitUnpopulated) {\n if (\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty &&\n !(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive\n ) {\n d[jsonName] = null;\n } else {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n } else if (\n ((this as FieldNode)[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)) ||\n ((this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive &&\n OPEN_MODELS_OPTIONS.EmitDefaultValues)\n ) {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n\n return null;\n });\n return d;\n }\n\n /**\n * Build up the model, using the transport Json. If UseProtoNames is set to false, lowerCamelCase is expected.\n *\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __fromProtoNameJson(data: any) {\n const l = this.__mapProtoNameJsonToJson(data);\n this.__fromLiteral(l);\n }\n\n /**\n * Helper function to create a literal type from a json type\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: Record<string, unknown> = {};\n // map json to literal\n this.__meta.nodeFields.forEach(f => {\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.protoName\n : this.__toLowerCamelCaseWithoutXPrefix(f.protoName);\n\n if (data[jsonName] !== undefined) {\n literal[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__mapProtoNameJsonToJson(data[jsonName]);\n }\n });\n return literal;\n }\n\n /**\n * Converts the model to a literal type. The literal type matches the interface from ITypeName.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __toLiteral(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n if (\n this[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)\n ) {\n d[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toLiteral();\n }\n return null;\n });\n return d;\n }\n\n get __fieldPath(): string {\n const parts: string[] = [];\n this.___pathBuilder(parts);\n return parts.join('.').replaceAll('.[', '['); // replace for array paths\n }\n\n ___pathBuilder(parts: string[]): string[] {\n // the root node does not have a fieldName\n if (this.__meta.fieldName !== undefined) {\n parts.unshift(\n OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName,\n );\n this.__parentNode?.___pathBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Returns the formated label using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __label(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(`${this.__getBaseName()}.label`);\n }\n\n /**\n * Returns the raw label without any translations, formatters applied.\n *\n *\n */\n get __labelRaw(): string {\n return this.__getBaseName();\n }\n\n /**\n * Returns the placeholder label using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __placeholder(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.placeholder`,\n );\n }\n\n /**\n * Returns the formated aria description using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __ariaDescription(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.description`,\n );\n }\n\n /**\n * Returns a list of all states of a node and its children.\n *\n * ```json\n * [\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * },\n * {\n * \"field\": \"display_name\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * }\n * ]\n * ```\n */\n public __getAllStates(): ValueStateSummary[] {\n return this.___getAllStates([]);\n }\n\n private ___getAllStates(carrier: ValueStateSummary[]): ValueStateSummary[] {\n if (this.__meta.valueState !== ValueState.None) {\n carrier.push({\n field: this.__fieldPath,\n state: this.__meta.valueState,\n message: this.__meta.stateMessage,\n });\n }\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.___getAllStates(carrier);\n }\n });\n return carrier;\n }\n\n /**\n * Clears all value states recursively\n */\n public __clearAllValueStates() {\n this.__meta.valueState = ValueState.None;\n this.__meta.stateMessage = '';\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__clearAllValueStates();\n }\n });\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Applies a list of states to a node and its children.\n *\n * Keep in mind, that the message must be already translated.\n *\n * ```json\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n *}\n *\n * ```\n *\n */\n public __applyValueStates(...states: ValueStateSummary[]) {\n states.forEach(state => {\n const fn = this.__getFieldNodeByPath(state.field);\n if (fn !== undefined) {\n const validStateBefore = fn.__meta.isValid;\n fn.__meta.valueState = state.state;\n fn.__meta.stateMessage = state.message;\n fn.__meta.isValid = state.state !== ValueState.Negative;\n fn.__meta.businessVaueState = state.state;\n if (fn.__meta.isValid !== validStateBefore) {\n fn.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: fn,\n bubbles: true,\n }),\n );\n }\n\n fn.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: fn,\n bubbles: false,\n }),\n );\n }\n });\n }\n\n /**\n * Returns the valid state of a node.\n * - A node is valid when all children are valid.\n * - A node is valid when freshly initialized, even when some children have invalid values.\n *\n * use `validate()` to be sure to have the correct validity state.\n *\n * Use __meta.StateMessage to receive the state of a node. The `__meta.StateMessage` is only available on an explicit field, where the validity state is populated upwards.\n */\n public get __isValid(): boolean {\n return this.__meta.isValid;\n }\n\n /**\n * set the validity of the node. This will trigger no events, just set the __meta.isValid value.\n *\n * Use this in your customValidators.\n * @param valid\n */\n public __setValidState(valid: boolean): void {\n this.__meta.isValid = valid;\n }\n\n /**\n * Initialized fields are pristine as long nothing changes inside the model.\n *\n * Use this on rootNodes only.\n */\n public get __isPristine(): boolean {\n return this.__meta.isPristine;\n }\n\n /**\n * The toString() method of Object instances returns a string representing this object. This method is meant to be overridden by `CustomPrototypes.ToString`.\n * If no `CustomPrototypes` is set, it will try to find a display_name attribute on the node and uses that for the output.\n *\n * If there is no display_name `[object TypeName]` is returned.\n */\n public toString(): string {\n const ts = ToString.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n const found = this.__meta.nodeFields.find(\n fieldDescriptor => fieldDescriptor.fieldName === 'displayName',\n );\n if (\n found &&\n (this['displayName' as keyof FieldNode] as FieldNode).__meta.typeName ===\n 'primitives.STRING'\n ) {\n return (this['displayName' as keyof FieldNode] as FieldNode).toString();\n }\n return `[object ${this.__meta.typeName}]`;\n }\n\n /**\n * The valueOf() method of Object instances converts the this value to an object.\n * This method is meant to be overridden by derived objects for custom type conversion logic.\n */\n public valueOf(): number {\n const ts = ValueOf.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n return NaN;\n }\n\n /**\n * Helper method to build up labels, placeholders,...\n * @protected\n */\n protected __getBaseName(): string {\n const parts: string[] = [];\n this.___fieldNameBuilder(parts);\n return parts.join('.');\n }\n\n /**\n * Helper method to construct the __fieldPath\n * @param parts\n * @protected\n */\n protected ___fieldNameBuilder(parts: string[]): string[] {\n // stop if parent node has same typeName, we are on a recursion.\n if (this.__meta.isRecursionNode || this.__meta.isAnyNode) {\n parts.unshift(this.__meta.typeName as string);\n } else {\n // do not add the index to the baseName on Array fields\n if (!this.__meta.isArrayNode) {\n // the root node does not have a fieldName, so we use the typeName\n parts.unshift(\n // eslint-disable-next-line no-nested-ternary\n this.__meta.fieldName\n ? OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName\n : this.__meta.typeName || '',\n );\n }\n this.__parentNode?.___fieldNameBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Validate the node and all child nodes of it.\n */\n public __validate() {\n const validStateBefore = this.__meta.isValid;\n // trigger the local listeners\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n // do not go deeper if node is invalid, because business validators can set sub fields\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (child.__meta.businessVaueState === ValueState.None) {\n // this only check constraints, but business errors are higher order\n child.__validate();\n }\n\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Validates all parents of an element. This is done when you set a value on any child/attribute of a node directly\n * @param {FieldNode} node - Any FieldNode\n */\n protected __validateBottomUp(node: FieldNode) {\n // \"this\" is usually the parent node of \"node\"\n this.__validationExecuter(node);\n // climb up and check children state to define the own state of \"this\"\n node.__climbUpValidation();\n }\n\n /**\n * Validates all parent nodes if a sub-field was changed.\n * @protected\n */\n protected __climbUpValidation() {\n const validStateBefore = this.__meta.isValid;\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n // if any child is not valid, this is also not valid\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n if (this.__parentNode) {\n this.__parentNode.__climbUpValidation();\n }\n }\n\n /**\n * Additional \"constraint\" checker for primitive types, i.e. INT32 can only range from -2147483648 to 2147483647, but js uses always a float64 to handle numbers\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __checkTypeBoundaries(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Executes the validation process.\n * @param node\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __validationExecuter(node: FieldNode) {\n const validatorFunc = Validators.get(node.__meta.typeName);\n const customConstraintsFunc = CustomConstraints.get(node.__meta.typeName);\n const fieldConstraints = node.__getConstraints();\n let constraintMessage: undefined | string[];\n\n constraintMessage = this.__checkTypeBoundaries();\n\n if (\n validatorFunc ||\n fieldConstraints ||\n customConstraintsFunc ||\n constraintMessage\n ) {\n if (fieldConstraints && !customConstraintsFunc) {\n constraintMessage = node.__checkConstraints(fieldConstraints);\n }\n if (customConstraintsFunc) {\n constraintMessage = customConstraintsFunc(node);\n }\n if (validatorFunc) {\n validatorFunc(node);\n } else if (constraintMessage === undefined) {\n node.__setValueState(ValueState.None, ['']);\n }\n if (constraintMessage !== undefined) {\n node.__setValueState(ValueState.Negative, constraintMessage);\n }\n } else {\n node.__setValueState(ValueState.None, ['']);\n }\n }\n\n /**\n * Receives all constraints of a node. Use this in your custom validators or components.\n */\n public __getConstraints(): FieldConstraints | undefined {\n if (this.__meta.isArrayNode && this.__parentNode?.__parentNode) {\n const fieldDescriptor =\n this.__parentNode.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__parentNode!.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n\n if (this.__parentNode) {\n const fieldDescriptor = this.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n return undefined;\n }\n\n /**\n * Set the value state\n * @param {ValueState} state - The state of the node.\n * @param {string[]} messageAndParams - Description for the formatter.\n */\n __setValueState(state: ValueState, messageAndParams: string[]) {\n this.__meta.valueState = state;\n this.__meta.stateMessage = OPEN_MODELS_OPTIONS.valueStateMessageFormatter(\n messageAndParams[0],\n ...messageAndParams.slice(1),\n );\n // set invalid on error state\n // the event is sent from ...\n this.__meta.isValid = state !== ValueState.Negative;\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Resets the node to the last inserted literal or to the initial state.\n * // todo: reset to default values not just the empty state\n */\n public __reset() {\n if (this.__meta.initialValue !== undefined) {\n this.__updateWithLiteral(this.__meta.initialValue);\n return;\n }\n // else re init every field downwards\n this.__clear();\n }\n\n /**\n * Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n *\n * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.\n */\n public __clear(withoutNotification: boolean = false) {\n this.__isEmpty = true;\n\n // __clear every childNode too\n this.__meta.nodeFields.forEach(descriptor => {\n (\n this[`_${descriptor.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n });\n if (!withoutNotification) {\n this.__notifyFieldValueChange(false);\n }\n // todo: set to values to default value or initial\n // todo: set state to None\n // todo: set valid to true\n }\n\n /**\n * Helper method to update a skalar / primitive field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {string | boolean | number} value - The value you want to set\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __PrimitivesSetter(targetNode: IPrimitive, value: unknown) {\n // do not do anything if current value equals val\n if (targetNode._value !== value) {\n targetNode._value = value; // eslint-disable-line no-param-reassign\n\n targetNode.__isEmpty = false; // eslint-disable-line no-param-reassign\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n }\n\n /**\n * Helper method to update a field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {} literalData - The literal type matches the interface from ITypeName.\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __TypeSetter(\n targetNode: FieldNode,\n literalData: unknown | undefined | null,\n ) {\n if (literalData === undefined || literalData === null) {\n targetNode.__clear();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n return;\n }\n\n targetNode.__updateWithLiteral(literalData); // keep the references by getting the values\n // this is the parent of the target_node\n targetNode.___updateNotEmptyPath();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n\n /**\n * Notifies field changes\n * @param bubbles\n * @protected\n */\n protected __notifyFieldValueChange(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n\n if (bubbles) {\n // console.log('bubble', this.__meta.typeName)\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n // console.log('non', this.__meta.typeName)\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Returns the child nodes of a node.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get __childNodes(): any[] {\n return this.__meta.nodeFields.map(\n field => this[field.fieldName as keyof FieldNode],\n );\n }\n\n /**\n * Broadcast an event to all child nodes of a field node.\n * @param event\n */\n __broadcastEvent(event: CustomEvent) {\n // trigger the local listeners\n this.__triggerNodeEvents(event);\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__broadcastEvent(event);\n }\n });\n }\n\n /**\n * Dispatches a custom event on a FieldNode\n * @param {CustomEvent} event - A generic custom event.\n */\n __dispatchEvent(event: CustomEvent): CustomEvent {\n // trigger the events on current node\n this.__triggerNodeEvents(event);\n\n // go to parent\n if (event.bubbles && this.__parentNode !== undefined) {\n return this.__parentNode.__dispatchEvent(event);\n }\n return event;\n }\n\n /**\n * Helper method to invoke/execute the event on the current node\n * @param event\n * @protected\n */\n protected __triggerNodeEvents(event: CustomEvent<FieldNode>) {\n if (\n this.__meta.eventListener.has(event.type) &&\n this.__meta.eventListener.get(event.type)!.length > 0\n ) {\n this.__meta.eventListener\n .get(event.type)!\n .forEach((t, i, listenerArray) => {\n t.callbackfn(event);\n if (\n t.options !== undefined &&\n typeof t.options !== 'boolean' &&\n t.options.once\n ) {\n // eslint-disable-next-line no-param-reassign\n delete listenerArray[i];\n }\n });\n }\n }\n\n /**\n * Add a handler to a node\n * @param {string} type - A case-sensitive string representing the event type to listen for.\n * @param {function} listener - The object that receives a notification (an object that implements the Event interface) when an event of the specified type occurs. This must be null, an object with a handleEvent() method, or a JavaScript function. See The event listener callback for details on the callback itself.\n * @param {} options - An object that specifies characteristics about the event listener. \\n\\nThe available option is `once:boolean`\n */\n public __addEventListener(\n type: EventType,\n listener: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener\n .get(type)!\n .push({ callbackfn: listener, options });\n }\n\n // add a listener for a custom event, defined and triggered by yourself\n // this could be something like 'focus-requested'\n public __addCustomEventListener(\n type: string,\n handler: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener.get(type)!.push({ callbackfn: handler, options });\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeEventListener(\n type: EventType,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeCustomEventListener(\n type: string,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * if some child is not empty, set isEmpty to false, all the way up to the root node\n * @private\n */\n protected ___updateNotEmptyPath() {\n this.___isEmpty = false;\n if (this.__parentNode !== undefined && this.__parentNode.__isEmpty) {\n this.__parentNode.___updateNotEmptyPath();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected __checkConstraints(\n fieldConstraints: FieldConstraints,\n ): string[] | undefined {\n if (fieldConstraints.required) {\n if (this.__isEmpty) {\n return ['constraint.violation.required'];\n }\n }\n return undefined;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCase(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCaseWithoutXPrefix(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toSnakeCase(string: string): string {\n return string\n .split(/(?=[A-Z])/)\n .map(word => word.toLowerCase())\n .join('_');\n }\n}\n"]}
1
+ {"version":3,"file":"FieldNode.js","sourceRoot":"","sources":["../src/FieldNode.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-classes-per-file, no-use-before-define */\n\n/**\n * notes: i18n is not part of the api anymore\n */\nimport { ValueState } from './ValueState';\nimport { ToString, ValueOf } from './CustomPrototypes';\nimport { CustomConstraints, Validators } from './Validator';\nimport { OPEN_MODELS_OPTIONS } from './OPEN_MODELS_OPTIONS';\nimport { FieldConstraints } from './FieldConstraints';\n\ntype EventType =\n | 'field-value-changed' // triggered on change or value assignment\n | 'this-field-value-changed' // triggered on every change\n | 'field-value-updated' // triggered on clear or fromLiteral\n | 'this-state-changed'\n | 'state-changed'\n | 'validity-changed'\n | 'array-changed'\n | 'this-array-changed'\n | 'map-changed'\n | 'this-map-changed'\n | 'model-injected'; // fired on the injection node before field-value-updated and this-field-value-changed\n\ntype Meta = {\n businessVaueState: ValueState;\n index?: number;\n oldValue?: unknown;\n initialValue: unknown; // Initial value from __updateWithLiteral\n typeName: string; // i.e \"furo.fat.Bool\"\n fieldName?: string; // field name of this node used by its parent node\n valueState: ValueState;\n stateMessage: string;\n nodeFields: FieldDescriptor[];\n readonly: boolean;\n required: boolean;\n isArrayNode: boolean; // set by array and used by baseName resolver to omit the index in the names\n // deleteArrayNode: () => void, // only available on array nodes\n isRecursionNode: boolean;\n isAnyNode: boolean;\n isValid: boolean;\n isPristine: boolean;\n eventListener: Map<\n string,\n {\n callbackfn: CustomEventListener;\n options?: AddEventListenerOptions | boolean;\n }[]\n >;\n};\n\n/**\n * Primitives have always a value field\n */\ninterface IPrimitive extends FieldNode {\n _value: unknown; // contains the value of the FieldNode\n}\n\ninterface CustomEventListener {\n (evt: CustomEvent): void;\n}\n\ntype FieldDescriptor = {\n // camel case name of the field\n fieldName: string;\n // API name of the field, defined by contract.\n protoName: string;\n // class of the type, must start with cap\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n FieldConstructor: any; // (new(_initData: any, parent?: FieldNode, parentAttributeName?: string) => FieldNode);\n ValueConstructor?: new () => FieldNode; // used by MAP\n constraints?: FieldConstraints;\n};\n\nexport interface ValueStateSummary {\n /**\n * path of the field\n *\n * `fullName` for a violation in the `fullName` value\n * `emailAddresses[1].email` for a violation in the `email` field of the first `emailAddresses` message\n * `emailAddresses[3].type[2]` for a violation in the second `type` value in the third `emailAddresses` message.\n */\n field: string;\n state: ValueState;\n message: string;\n}\n\nexport abstract class FieldNode {\n protected ___isEmpty: boolean = true;\n\n /**\n * Marker for primitive types\n */\n public __isPrimitive: boolean = false;\n\n /**\n * Parent node of a node. This is undefined on root nodes.\n */\n public __parentNode: FieldNode | undefined;\n\n /**\n * Meta data of a field node.\n */\n public __meta: Meta = {\n businessVaueState: ValueState.None,\n readonly: false,\n required: false,\n initialValue: undefined,\n isPristine: true,\n isValid: true,\n valueState: ValueState.None,\n stateMessage: '',\n typeName: '',\n nodeFields: [],\n isArrayNode: false,\n isRecursionNode: false,\n isAnyNode: false,\n eventListener: new Map<string, []>(),\n };\n\n private ___rootNode: FieldNode;\n\n private ___readonlyState: Map<FieldNode, boolean> = new Map<\n FieldNode,\n boolean\n >();\n\n /**\n * Root node of a node\n */\n get __rootNode(): FieldNode {\n return this.___rootNode;\n }\n\n /**\n * Root node of a node. Do not set this value by yourself.\n * @param value\n */\n set __rootNode(value: FieldNode) {\n this.___rootNode = value;\n }\n\n /**\n * Empty state of the node\n */\n get __isEmpty() {\n return this.___isEmpty;\n }\n\n /**\n * Empty state of the node\n * @param empty\n */\n set __isEmpty(empty: boolean) {\n if (empty) {\n this.___isEmpty = true;\n } else {\n this.___updateNotEmptyPath();\n }\n }\n\n constructor(\n _initData: undefined,\n parent?: FieldNode,\n parentAttributeName?: string,\n ) {\n this.__parentNode = parent;\n\n if (parent) {\n this.___rootNode = parent.__rootNode;\n } else {\n this.___rootNode = this;\n }\n\n this.__meta.fieldName = parentAttributeName;\n }\n\n /**\n * Get a FieldNode by giving a field path using the proto names for the fields.\n *\n *\n *\n * - `email_addresses[3].type[2]` for the second `type` value in the third `email_addresses` message.\n * - `user.location.street` for the street in location in user.\n *\n * @param {string} deepPath - Path of the field.\n */\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n // replace array paths\n const path = deepPath.replaceAll(/[[\\]]/g, '.').split('.');\n if (path.length > 0 && path[0] !== '') {\n // rest wieder in error reinwerfen\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n // convert to camel\n const fieldName = this.__toLowerCamelCase(path[0]) as keyof FieldNode;\n\n if (deepPath === '') {\n if (this[fieldName]) {\n return this[fieldName] as FieldNode;\n }\n } else if (this[fieldName]) {\n return (this[fieldName] as FieldNode).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n set __readonly(v: boolean) {\n this.__meta.readonly = v;\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n // store readonly state if\n const cro = this.___readonlyState.get(child);\n if (cro === undefined) {\n this.___readonlyState.set(child, child.__readonly);\n }\n\n if (!child.__readonly && v) {\n // eslint-disable-next-line no-param-reassign\n child.__readonly = v;\n }\n }\n });\n }\n\n get __readonly(): boolean {\n return this.__meta.readonly;\n }\n\n /**\n * Build up the model with the literal type. The literal type matches the interface from ITypeName.\n * @param {} literal - The literal type matches the interface from ITypeName.\n */\n __fromLiteral(literal: unknown) {\n this.__updateWithLiteral(literal);\n // clear the state of the validity and value state\n this.__setModelValidStateTrue();\n\n this.__dispatchEvent(\n new CustomEvent('model-injected', {\n composed: true,\n bubbles: false,\n detail: this,\n }),\n );\n\n this.__meta.isPristine = true;\n // this.__notifyFieldValueChange(true);\n }\n\n private __setModelValidStateTrue() {\n this.__meta.isValid = true;\n this.__setValueState(ValueState.None, ['']);\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__setModelValidStateTrue();\n }\n });\n }\n\n /**\n * Updates the model from literal data, without changing the validity and value state.\n *\n * @param literal\n */\n __updateWithLiteral(literal: unknown) {\n this.__clear(true);\n // store injected literal for reset()\n this.__meta.initialValue = literal;\n // a field which is set is not empty\n this.___isEmpty = false;\n const data = structuredClone(literal);\n\n // go through available fields\n this.__meta.nodeFields.forEach(field => {\n // __clear fields which are not available in literal\n // if the field does not exist on the incoming literal, reset or __clear the value on the fieldNode\n // make an undefined on complex types\n if (\n (data as FieldNode)[field.fieldName as keyof FieldNode] === undefined\n ) {\n if (this[`_${field.fieldName}` as keyof FieldNode] !== undefined) {\n // primitives go to their default values\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n }\n return;\n }\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__updateWithLiteral(\n (data as FieldNode)[field.fieldName as keyof FieldNode],\n );\n\n (\n this[`_${field.fieldName}` as keyof FieldNode] as FieldNode\n ).__meta.isPristine = false;\n });\n // set the object itself to pristine on root nodes\n\n this.__meta.isPristine = false;\n\n\n this.__notifyFieldValueChange(false);\n }\n\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n /**\n * Converts the model to a JSON struct wich matches the protobuf spec.\n * If the `UseProtoNames` option is set to false, lowerCamelCase is produced.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __toJson(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n // use jsonName if UseProtoNames is set, otherwise convert to lowerCamel without X prefix\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.protoName\n : this.__toLowerCamelCaseWithoutXPrefix(f.protoName);\n\n if (OPEN_MODELS_OPTIONS.EmitUnpopulated) {\n if (\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty &&\n !(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive\n ) {\n d[jsonName] = null;\n } else {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n } else if (\n ((this as FieldNode)[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)) ||\n ((this[`_${f.fieldName}` as keyof FieldNode] as FieldNode)\n .__isPrimitive &&\n OPEN_MODELS_OPTIONS.EmitDefaultValues)\n ) {\n d[jsonName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toJson();\n }\n\n return null;\n });\n return d;\n }\n\n /**\n * Build up the model, using the transport Json. If UseProtoNames is set to false, lowerCamelCase is expected.\n *\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __fromProtoNameJson(data: any) {\n const l = this.__mapProtoNameJsonToJson(data);\n this.__fromLiteral(l);\n }\n\n /**\n * Helper function to create a literal type from a json type\n * @param {JSON} data - Transport Json\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: Record<string, unknown> = {};\n // map json to literal\n this.__meta.nodeFields.forEach(f => {\n const jsonName = OPEN_MODELS_OPTIONS.UseProtoNames\n ? f.protoName\n : this.__toLowerCamelCaseWithoutXPrefix(f.protoName);\n\n if (data[jsonName] !== undefined) {\n literal[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__mapProtoNameJsonToJson(data[jsonName]);\n }\n });\n return literal;\n }\n\n /**\n * Converts the model to a literal type. The literal type matches the interface from ITypeName.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public __toLiteral(): any {\n const d: Record<string, unknown> = {};\n this.__meta.nodeFields.forEach(f => {\n if (\n this[`_${f.fieldName}` as keyof FieldNode] &&\n (!(this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__isEmpty ||\n (this[`_${f.fieldName}` as keyof FieldNode] as FieldNode).__meta\n .required)\n ) {\n d[f.fieldName] = (\n this[`_${f.fieldName}` as keyof FieldNode] as FieldNode\n ).__toLiteral();\n }\n return null;\n });\n return d;\n }\n\n get __fieldPath(): string {\n const parts: string[] = [];\n this.___pathBuilder(parts);\n return parts.join('.').replaceAll('.[', '['); // replace for array paths\n }\n\n ___pathBuilder(parts: string[]): string[] {\n // the root node does not have a fieldName\n if (this.__meta.fieldName !== undefined) {\n parts.unshift(\n OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName,\n );\n this.__parentNode?.___pathBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Returns the formated label using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __label(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(`${this.__getBaseName()}.label`);\n }\n\n /**\n * Returns the raw label without any translations, formatters applied.\n *\n *\n */\n get __labelRaw(): string {\n return this.__getBaseName();\n }\n\n /**\n * Returns the placeholder label using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __placeholder(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.placeholder`,\n );\n }\n\n /**\n * Returns the formated aria description using the `OPEN_MODELS_OPTIONS.labelFormatter`\n */\n get __ariaDescription(): string {\n return OPEN_MODELS_OPTIONS.labelFormatter(\n `${this.__getBaseName()}.description`,\n );\n }\n\n /**\n * Returns a list of all states of a node and its children.\n *\n * ```json\n * [\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * },\n * {\n * \"field\": \"display_name\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n * }\n * ]\n * ```\n */\n public __getAllStates(): ValueStateSummary[] {\n return this.___getAllStates([]);\n }\n\n private ___getAllStates(carrier: ValueStateSummary[]): ValueStateSummary[] {\n if (this.__meta.valueState !== ValueState.None) {\n carrier.push({\n field: this.__fieldPath,\n state: this.__meta.valueState,\n message: this.__meta.stateMessage,\n });\n }\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.___getAllStates(carrier);\n }\n });\n return carrier;\n }\n\n /**\n * Clears all value states recursively\n */\n public __clearAllValueStates() {\n this.__meta.valueState = ValueState.None;\n this.__meta.stateMessage = '';\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__clearAllValueStates();\n }\n });\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Applies a list of states to a node and its children.\n *\n * Keep in mind, that the message must be already translated.\n *\n * ```json\n * {\n * \"field\": \"id\",\n * \"state\": \"Error\",\n * \"message\": \"This field is invalid\"\n *}\n *\n * ```\n *\n */\n public __applyValueStates(...states: ValueStateSummary[]) {\n states.forEach(state => {\n const fn = this.__getFieldNodeByPath(state.field);\n if (fn !== undefined) {\n const validStateBefore = fn.__meta.isValid;\n fn.__meta.valueState = state.state;\n fn.__meta.stateMessage = state.message;\n fn.__meta.isValid = state.state !== ValueState.Negative;\n fn.__meta.businessVaueState = state.state;\n if (fn.__meta.isValid !== validStateBefore) {\n fn.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: fn,\n bubbles: true,\n }),\n );\n }\n\n fn.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: fn,\n bubbles: false,\n }),\n );\n }\n });\n }\n\n /**\n * Returns the valid state of a node.\n * - A node is valid when all children are valid.\n * - A node is valid when freshly initialized, even when some children have invalid values.\n *\n * use `validate()` to be sure to have the correct validity state.\n *\n * Use __meta.StateMessage to receive the state of a node. The `__meta.StateMessage` is only available on an explicit field, where the validity state is populated upwards.\n */\n public get __isValid(): boolean {\n return this.__meta.isValid;\n }\n\n /**\n * set the validity of the node. This will trigger no events, just set the __meta.isValid value.\n *\n * Use this in your customValidators.\n * @param valid\n */\n public __setValidState(valid: boolean): void {\n this.__meta.isValid = valid;\n }\n\n /**\n * Initialized fields are pristine as long nothing changes inside the model.\n *\n * Use this on rootNodes only.\n */\n public get __isPristine(): boolean {\n return this.__meta.isPristine;\n }\n\n /**\n * The toString() method of Object instances returns a string representing this object. This method is meant to be overridden by `CustomPrototypes.ToString`.\n * If no `CustomPrototypes` is set, it will try to find a display_name attribute on the node and uses that for the output.\n *\n * If there is no display_name `[object TypeName]` is returned.\n */\n public toString(): string {\n const ts = ToString.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n const found = this.__meta.nodeFields.find(\n fieldDescriptor => fieldDescriptor.fieldName === 'displayName',\n );\n if (\n found &&\n (this['displayName' as keyof FieldNode] as FieldNode).__meta.typeName ===\n 'primitives.STRING'\n ) {\n return (this['displayName' as keyof FieldNode] as FieldNode).toString();\n }\n return `[object ${this.__meta.typeName}]`;\n }\n\n /**\n * The valueOf() method of Object instances converts the this value to an object.\n * This method is meant to be overridden by derived objects for custom type conversion logic.\n */\n public valueOf(): number {\n const ts = ValueOf.get(this.__meta.typeName || '');\n if (ts) {\n return ts(this);\n }\n return NaN;\n }\n\n /**\n * Helper method to build up labels, placeholders,...\n * @protected\n */\n protected __getBaseName(): string {\n const parts: string[] = [];\n this.___fieldNameBuilder(parts);\n return parts.join('.');\n }\n\n /**\n * Helper method to construct the __fieldPath\n * @param parts\n * @protected\n */\n protected ___fieldNameBuilder(parts: string[]): string[] {\n // stop if parent node has same typeName, we are on a recursion.\n if (this.__meta.isRecursionNode || this.__meta.isAnyNode) {\n parts.unshift(this.__meta.typeName as string);\n } else {\n // do not add the index to the baseName on Array fields\n if (!this.__meta.isArrayNode) {\n // the root node does not have a fieldName, so we use the typeName\n parts.unshift(\n // eslint-disable-next-line no-nested-ternary\n this.__meta.fieldName\n ? OPEN_MODELS_OPTIONS.UseProtoNames\n ? this.__toSnakeCase(this.__meta.fieldName)\n : this.__meta.fieldName\n : this.__meta.typeName || '',\n );\n }\n this.__parentNode?.___fieldNameBuilder(parts);\n }\n return parts;\n }\n\n /**\n * Validate the node and all child nodes of it.\n */\n public __validate() {\n const validStateBefore = this.__meta.isValid;\n // trigger the local listeners\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n // do not go deeper if node is invalid, because business validators can set sub fields\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (child.__meta.businessVaueState === ValueState.None) {\n // this only check constraints, but business errors are higher order\n child.__validate();\n }\n\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Validates all parents of an element. This is done when you set a value on any child/attribute of a node directly\n * @param {FieldNode} node - Any FieldNode\n */\n protected __validateBottomUp(node: FieldNode) {\n // \"this\" is usually the parent node of \"node\"\n this.__validationExecuter(node);\n // climb up and check children state to define the own state of \"this\"\n node.__climbUpValidation();\n }\n\n /**\n * Validates all parent nodes if a sub-field was changed.\n * @protected\n */\n protected __climbUpValidation() {\n const validStateBefore = this.__meta.isValid;\n this.__validationExecuter(this);\n\n let allChildrenValid = true;\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n if (!child.__isValid) {\n allChildrenValid = false;\n }\n }\n });\n // if any child is not valid, this is also not valid\n this.__meta.isValid = allChildrenValid && this.__isValid;\n if (this.__meta.isValid !== validStateBefore) {\n this.__dispatchEvent(\n new CustomEvent('validity-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n if (this.__parentNode) {\n this.__parentNode.__climbUpValidation();\n }\n }\n\n /**\n * Additional \"constraint\" checker for primitive types, i.e. INT32 can only range from -2147483648 to 2147483647, but js uses always a float64 to handle numbers\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __checkTypeBoundaries(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Executes the validation process.\n * @param node\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __validationExecuter(node: FieldNode) {\n const validatorFunc = Validators.get(node.__meta.typeName);\n const customConstraintsFunc = CustomConstraints.get(node.__meta.typeName);\n const fieldConstraints = node.__getConstraints();\n let constraintMessage: undefined | string[];\n\n constraintMessage = this.__checkTypeBoundaries();\n\n if (\n validatorFunc ||\n fieldConstraints ||\n customConstraintsFunc ||\n constraintMessage\n ) {\n if (fieldConstraints && !customConstraintsFunc) {\n constraintMessage = node.__checkConstraints(fieldConstraints);\n }\n if (customConstraintsFunc) {\n constraintMessage = customConstraintsFunc(node);\n }\n if (validatorFunc) {\n validatorFunc(node);\n } else if (constraintMessage === undefined) {\n node.__setValueState(ValueState.None, ['']);\n }\n if (constraintMessage !== undefined) {\n node.__setValueState(ValueState.Negative, constraintMessage);\n }\n } else {\n node.__setValueState(ValueState.None, ['']);\n }\n }\n\n /**\n * Receives all constraints of a node. Use this in your custom validators or components.\n */\n public __getConstraints(): FieldConstraints | undefined {\n if (this.__meta.isArrayNode && this.__parentNode?.__parentNode) {\n const fieldDescriptor =\n this.__parentNode.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__parentNode!.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n\n if (this.__parentNode) {\n const fieldDescriptor = this.__parentNode.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.constraints;\n }\n return undefined;\n }\n\n /**\n * Set the value state\n * @param {ValueState} state - The state of the node.\n * @param {string[]} messageAndParams - Description for the formatter.\n */\n __setValueState(state: ValueState, messageAndParams: string[]) {\n this.__meta.valueState = state;\n this.__meta.stateMessage = OPEN_MODELS_OPTIONS.valueStateMessageFormatter(\n messageAndParams[0],\n ...messageAndParams.slice(1),\n );\n // set invalid on error state\n // the event is sent from ...\n this.__meta.isValid = state !== ValueState.Negative;\n\n this.__dispatchEvent(\n new CustomEvent('state-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n\n /**\n * Resets the node to the last inserted literal or to the initial state.\n * // todo: reset to default values not just the empty state\n */\n public __reset() {\n if (this.__meta.initialValue !== undefined) {\n this.__updateWithLiteral(this.__meta.initialValue);\n this.__meta.isPristine = true;\n return;\n }\n // else re init every field downwards\n this.__clear();\n this.__meta.isPristine = true;\n }\n\n /**\n * Clear clears the element downwards and set __isEmpty to true on all sub nodes.\n *\n * A cleared field is not populated on `__toLiteral` or `__toJson` when the option `EmitUnpopulated` or `EmitDefaultValues` is set to false.\n */\n public __clear(withoutNotification: boolean = false) {\n this.__isEmpty = true;\n\n // __clear every childNode too\n this.__meta.nodeFields.forEach(descriptor => {\n (\n this[`_${descriptor.fieldName}` as keyof FieldNode] as FieldNode\n ).__clear();\n });\n if (!withoutNotification) {\n this.__notifyFieldValueChange(false);\n }\n // todo: set to values to default value or initial\n // todo: set state to None\n // todo: set valid to true\n }\n\n /**\n * Helper method to update a skalar / primitive field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {string | boolean | number} value - The value you want to set\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __PrimitivesSetter(targetNode: IPrimitive, value: unknown) {\n // do not do anything if current value equals val\n if (targetNode._value !== value) {\n targetNode._value = value; // eslint-disable-line no-param-reassign\n\n targetNode.__isEmpty = false; // eslint-disable-line no-param-reassign\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n }\n\n /**\n * Helper method to update a field of a type. Used by the generated models.\n * Triggers also the validation and clearance, if needed.\n *\n * @param {FieldNode} targetNode - The field of a FieldNode\n * @param {} literalData - The literal type matches the interface from ITypeName.\n * @protected\n */\n // eslint-disable-next-line class-methods-use-this\n protected __TypeSetter(\n targetNode: FieldNode,\n literalData: unknown | undefined | null,\n ) {\n if (literalData === undefined || literalData === null) {\n targetNode.__clear();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n return;\n }\n\n targetNode.__updateWithLiteral(literalData); // keep the references by getting the values\n // this is the parent of the target_node\n targetNode.___updateNotEmptyPath();\n this.__validateBottomUp(targetNode);\n targetNode.__notifyFieldValueChange(true);\n }\n\n /**\n * Notifies field changes\n * @param bubbles\n * @protected\n */\n protected __notifyFieldValueChange(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n\n if (bubbles) {\n this.__rootNode.__meta.isPristine = false;\n // todo check if nodes in between this and root should be set to false too\n // check ARRAY.ts line 120 too\n this.__meta.isPristine = false;\n\n // console.log('bubble', this.__meta.typeName)\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n // triggered on clear or fromLiteral\n this.__dispatchEvent(\n new CustomEvent('field-value-updated', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n /**\n * Returns the child nodes of a node.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get __childNodes(): any[] {\n return this.__meta.nodeFields.map(\n field => this[field.fieldName as keyof FieldNode],\n );\n }\n\n /**\n * Broadcast an event to all child nodes of a field node.\n * @param event\n */\n __broadcastEvent(event: CustomEvent) {\n // trigger the local listeners\n this.__triggerNodeEvents(event);\n\n // dispatch to children\n this.__childNodes.forEach(child => {\n if (child instanceof FieldNode) {\n child.__broadcastEvent(event);\n }\n });\n }\n\n /**\n * Dispatches a custom event on a FieldNode\n * @param {CustomEvent} event - A generic custom event.\n */\n __dispatchEvent(event: CustomEvent): CustomEvent {\n // trigger the events on current node\n this.__triggerNodeEvents(event);\n\n // go to parent\n if (event.bubbles && this.__parentNode !== undefined) {\n return this.__parentNode.__dispatchEvent(event);\n }\n return event;\n }\n\n /**\n * Helper method to invoke/execute the event on the current node\n * @param event\n * @protected\n */\n protected __triggerNodeEvents(event: CustomEvent<FieldNode>) {\n if (\n this.__meta.eventListener.has(event.type) &&\n this.__meta.eventListener.get(event.type)!.length > 0\n ) {\n this.__meta.eventListener\n .get(event.type)!\n .forEach((t, i, listenerArray) => {\n t.callbackfn(event);\n if (\n t.options !== undefined &&\n typeof t.options !== 'boolean' &&\n t.options.once\n ) {\n // eslint-disable-next-line no-param-reassign\n delete listenerArray[i];\n }\n });\n }\n }\n\n /**\n * Add a handler to a node\n * @param {string} type - A case-sensitive string representing the event type to listen for.\n * @param {function} listener - The object that receives a notification (an object that implements the Event interface) when an event of the specified type occurs. This must be null, an object with a handleEvent() method, or a JavaScript function. See The event listener callback for details on the callback itself.\n * @param {} options - An object that specifies characteristics about the event listener. \\n\\nThe available option is `once:boolean`\n */\n public __addEventListener(\n type: EventType,\n listener: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener\n .get(type)!\n .push({ callbackfn: listener, options });\n }\n\n // add a listener for a custom event, defined and triggered by yourself\n // this could be something like 'focus-requested'\n public __addCustomEventListener(\n type: string,\n handler: CustomEventListener,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (!this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(type, []);\n }\n this.__meta.eventListener.get(type)!.push({ callbackfn: handler, options });\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeEventListener(\n type: EventType,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * Removes the handler from a node\n * @param type\n * @param handler\n * @param options\n */\n public __removeCustomEventListener(\n type: string,\n handler: CustomEventListener,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options?: boolean | EventListenerOptions,\n ): void {\n if (this.__meta.eventListener.has(type)) {\n this.__meta.eventListener.set(\n type,\n this.__meta.eventListener\n .get(type)!\n .filter(e => e.callbackfn !== handler),\n );\n }\n }\n\n /**\n * if some child is not empty, set isEmpty to false, all the way up to the root node\n * @private\n */\n protected ___updateNotEmptyPath() {\n this.___isEmpty = false;\n if (this.__parentNode !== undefined && this.__parentNode.__isEmpty) {\n this.__parentNode.___updateNotEmptyPath();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected __checkConstraints(\n fieldConstraints: FieldConstraints,\n ): string[] | undefined {\n if (fieldConstraints.required) {\n if (this.__isEmpty) {\n return ['constraint.violation.required'];\n }\n }\n return undefined;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCase(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toLowerCamelCaseWithoutXPrefix(string: string) {\n if (OPEN_MODELS_OPTIONS.UseProtoNames) {\n const [start, ...rest] = (\n string[0] === '_' ? string.replace('_', 'X') : string\n ).split('_');\n return (\n start +\n rest\n .map(s => {\n if (s.length === 0) return '';\n return s[0].toUpperCase() + s.slice(1);\n })\n .join('')\n );\n }\n return string;\n }\n\n // eslint-disable-next-line class-methods-use-this\n private __toSnakeCase(string: string): string {\n return string\n .split(/(?=[A-Z])/)\n .map(word => word.toLowerCase())\n .join('_');\n }\n}\n"]}
@@ -100,6 +100,9 @@ export class ARRAY extends FieldNode {
100
100
  bubbles: false,
101
101
  }));
102
102
  if (bubbles) {
103
+ this.__rootNode.__meta.isPristine = false;
104
+ // todo check if nodes in between this and root should be set to false too
105
+ this.__meta.isPristine = false;
103
106
  this.__dispatchEvent(new CustomEvent('array-changed', {
104
107
  detail: this,
105
108
  bubbles: true,
@@ -1 +1 @@
1
- {"version":3,"file":"ARRAY.js","sourceRoot":"","sources":["../../src/proxies/ARRAY.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldNode } from '../FieldNode';\n\nexport class ARRAY<T extends FieldNode, I> extends FieldNode {\n private _value: T[] = [];\n\n private ___Constructor: (new () => T) | undefined = undefined;\n\n constructor(initData?: I[], parent?: FieldNode, parentATributeName?: string) {\n super(undefined, parent, parentATributeName);\n this.__isPrimitive = true;\n if (initData !== undefined) {\n // eslint-disable-next-line no-console\n console.error('Use the ARRAY.Builder()');\n }\n this.__meta.typeName = `primitives.ARRAY<>`;\n }\n\n /**\n * Creates an element of type T and adds it to the beginning or end (default) of the ARRAY\n * @param initData\n * @param before\n */\n public add(initData?: I, before?: boolean): T {\n const Constructor: new () => T = this.__getConstructor();\n\n const fn = new Constructor();\n if (initData) {\n fn.__updateWithLiteral(initData);\n }\n const n = before ? 0 : this.length;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n}]`;\n fn.__meta.index = n;\n fn.__meta.isArrayNode = true;\n fn.__meta.isPristine = true;\n fn.__rootNode = this.__rootNode;\n if (before) {\n this._value.unshift(fn);\n } else {\n this._value.push(fn);\n }\n\n this.__isEmpty = false;\n this.__notifyArrayChanges(true);\n return fn;\n }\n\n /**\n *\n * @param initData\n */\n initFromLiteral(Constructor: { new (): T }, initData: I[]) {\n this.__clear();\n this.__meta.initialValue = initData;\n this.__pushWithoutNotifications(initData);\n this.__notifyArrayChanges(false);\n }\n\n /**\n * creates a literal type from a json type\n *\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: I[] = [];\n // create a dummy object\n const Constructor = this.__getConstructor();\n const fn = new Constructor();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data.forEach((row: any) => {\n literal.push(fn.__mapProtoNameJsonToJson(row));\n });\n return literal;\n }\n\n __updateWithLiteral(initData: I[]) {\n if (this.__parentNode !== undefined) {\n this.initFromLiteral(this.__getConstructor(), initData);\n }\n }\n\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n const path = deepPath\n .replaceAll(/[[\\]]/g, '.')\n .split('.')\n .filter(p => p !== '');\n\n if (path.length > 0 && path[0] !== '') {\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n if (deepPath === '') {\n if (this.value[parseInt(path[0], 10)]) {\n return this.value[parseInt(path[0], 10)] as FieldNode;\n }\n } else if (this.value[parseInt(path[0], 10)]) {\n return (\n this.value[parseInt(path[0], 10)] as FieldNode\n ).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n private __notifyArrayChanges(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n if (bubbles) {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n // used by broadcast\n public get __childNodes(): T[] {\n return this._value;\n }\n\n private __getConstructor(): new () => T {\n if (this.___Constructor !== undefined) {\n return this.___Constructor;\n }\n // the __parentNode defines the type of the ARRAY<T,I>\n const fieldDescriptor = this.__parentNode!.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.FieldConstructor as new () => T;\n }\n\n /**\n * @function\n * @template T FieldNode\n * @template I Json like interface type\n * @param {T} Constructor - Const\n * @param {I[]} initData - Initial open-models\n * @returns {ARRAY<T, I>}\n */\n static Builder<T extends FieldNode, I>(\n Constructor: new () => T,\n initData: I[],\n ): ARRAY<T, I> {\n const a: ARRAY<T, I> = new ARRAY<T, I>();\n a.___Constructor = Constructor;\n a.initFromLiteral(Constructor, initData);\n return a;\n }\n\n toString(): string {\n // resolve parent\n const innerType = this.__parentNode?.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return `[object ARRAY<${innerType?.FieldConstructor.name}>]`;\n }\n\n // only used by direct invocation of the type\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n // only used by direct invocation of the type\n __toJson(): T[] {\n return this.value.map((v: FieldNode) => v.__toJson());\n }\n\n // only used by direct invocation of the type\n __toLiteral(): I[] {\n return this.value.map((v: FieldNode) => v.__toLiteral());\n }\n\n __clear() {\n this._value.length = 0;\n this.__isEmpty = true;\n this.__notifyArrayChanges(false);\n }\n\n delete(index: number): I {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0].__toLiteral();\n }\n\n deleteT(index: number): T {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0];\n }\n\n get value(): T[] {\n return this._value;\n }\n\n /**\n * NOT needed any more, because we use the __TypeSetter instead of the __PrimitivesSetter\n set value(arr: T[]) {\n // assigning the new array will destroy any reference to it\n // __clear the array\n this.__clear();\n // (this as any)[`_${fieldName}`].length = 0;\n // refill the array\n arr.forEach((e, i) => {\n e.__parentNode = this;\n e.__meta.fieldName = `${i}`;\n e.__meta.index = i;\n e.__meta.isArrayNode = true;\n this._value.push(e);\n });\n this.__notifyArrayChanges(true);\n }\n */\n\n get length(): number {\n return this._value.length;\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the Interface type.\n *\n * @param {I} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n at(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the FieldNode type.\n *\n * @param {T} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n atT(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entries(): IterableIterator<[number, I]> {\n return this._value.map(t => t.__toLiteral()).entries();\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entriesT(): IterableIterator<[number, T]> {\n return this._value.entries();\n }\n\n /**\n * Map with interface type as value.\n *\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n mapI<U>(\n callbackfn: (value: I, index: number, array: I[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(t => t.__toLiteral()).map(callbackfn, thisArg);\n }\n\n /**\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n map<U>(\n callbackfn: (value: T, index: number, array: T[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(callbackfn, thisArg);\n }\n\n /**\n * The filter() method of Array instances creates a shallow copy of a portion of a given array, filtered down to just the elements from the given array that pass the test implemented by the provided function.\n * @param callbackfn\n * @param thisArg\n */\n filter(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T[] {\n return this._value.filter(callbackfn, thisArg);\n }\n\n find(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T | undefined {\n return this._value.find(callbackfn, thisArg);\n }\n\n forEach(\n callbackfn: (value: T, index: number, array: T[]) => void,\n thisArg?: unknown,\n ): void {\n return this._value.forEach(callbackfn, thisArg);\n }\n\n /**\n * ...\n * This method requires a FieldNode, not the interface type\n * @param searchElement\n * @param fromIndex\n */\n includes(searchElement: T, fromIndex?: number): boolean {\n return this._value.includes(searchElement, fromIndex);\n }\n\n /**\n * ...\n * Alternatively you can use the T.__meta.index to get the index of an element.\n * This method requires a FieldNode, not the interface type.\n * @param searchElement\n * @param fromIndex\n */\n indexOf(searchElement: T, fromIndex?: number): number {\n // if searchElement is a FieldNode return __meta.index\n return this._value.indexOf(searchElement, fromIndex);\n }\n\n keys(): IterableIterator<number> {\n return this._value.keys();\n }\n\n lastIndexOf(searchElement: T, fromIndex?: number): number {\n return this._value.lastIndexOf(searchElement, fromIndex);\n }\n\n pop(): T | undefined {\n const ret = this._value.pop();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The push() method of Array instances adds the specified elements to the end of an array and returns the new length of the array.\n * Params:\n * element1 … elementN – The element(s) to add to the end of the array.\n * Returns:\n * The new length property of the object upon which the method was called\n * @param items\n */\n push(...items: I[]): number {\n const n = this.__pushWithoutNotifications(items);\n this.__notifyArrayChanges(true);\n return n;\n }\n\n /**\n * Moves an item in the array\n * @param fromIndex\n * @param toIndex\n */\n moveItem(fromIndex: number, toIndex: number) {\n const e = this._value[fromIndex];\n this._value.splice(fromIndex, 1);\n this._value.splice(toIndex, 0, e);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n }\n\n private __pushWithoutNotifications(items: I[]) {\n let n: number = 0;\n const Constructor: new () => T = this.__getConstructor();\n items.forEach((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n n = this._value.push(fn);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n - 1}]`;\n fn.__meta.index = n - 1;\n fn.__meta.isArrayNode = true;\n fn.__meta.isPristine = true;\n });\n\n this.__isEmpty = false;\n return n;\n }\n\n reverse(): T[] {\n const ret = this._value.reverse();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The shift() method of Array instances removes the first element from an array and returns that removed element.\n *\n * This method changes the length of the array.\n */\n shift(): I | undefined {\n const t = this._value.shift();\n this.__notifyArrayChanges(true);\n return t?.__toLiteral();\n }\n\n /**\n * The slice() method of Array instances returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.\n * #### Params:\n * start – Zero-based index at which to start extraction, converted to an integer .\n * Negative index counts back from the end of the array — if start < 0, start + array. length is used.\n * If start < -array. length or start is omitted, 0 is used.\n * If start >= array. length, nothing is extracted.\n *\n * end – Zero-based index at which to end extraction, converted to an integer . slice() extracts up to but not including end.\n * Negative index counts back from the end of the array — if end < 0, end + array. length is used.\n * If end < -array. length, 0 is used.\n * If end >= array. length or end is omitted, array. length is used, causing all elements until the end to be extracted.\n * If end is positioned before or at start after normalization, nothing is extracted.\n *\n */\n slice(start?: number, end?: number): I[] {\n const tar = this._value.slice(start, end);\n const ret = tar.map(t => t.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n splice(start: number, deleteCount?: number): I[];\n\n splice(start: number, deleteCount: number, ...items: I[]): I[];\n\n splice(start: number, deleteCount?: number, ...items: I[]): I[] {\n if (deleteCount !== undefined) {\n const Constructor: new () => T = this.__getConstructor();\n const i: I[] = this._value\n .splice(\n start,\n deleteCount,\n ...items.map((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.isArrayNode = true;\n return fn;\n }),\n )\n .map(item => item.__toLiteral());\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return i;\n }\n const ret = this._value.splice(start).map(item => item.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n spliceT(start: number, deleteCount?: number): T[];\n\n spliceT(start: number, deleteCount: number, ...items: T[]): T[];\n\n spliceT(start: number, deleteCount?: number, ...items: T[]): T[] {\n let ret: T[] = [];\n if (deleteCount !== undefined) {\n ret = this.value.splice(start, deleteCount, ...items);\n } else {\n ret = this.value.splice(start);\n }\n\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n\n return ret;\n }\n\n /**\n * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.\n * #### Params:\n * - **element1 … elementN** The elements to add to the front of the arr.\n *\n * #### Returns:\n * The new length property of the object upon which the method was called.\n *\n */\n unshift(...items: T[]): number {\n const ret = this._value.unshift(...items);\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n values(): IterableIterator<T> {\n return this._value.values();\n }\n\n private _rebuildIndexAndFieldName() {\n this._value.forEach((fn: T, i) => {\n // eslint-disable-next-line no-param-reassign\n fn.__meta.fieldName = `[${i}]`;\n // eslint-disable-next-line no-param-reassign\n fn.__meta.index = i;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"ARRAY.js","sourceRoot":"","sources":["../../src/proxies/ARRAY.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldNode } from '../FieldNode';\n\nexport class ARRAY<T extends FieldNode, I> extends FieldNode {\n private _value: T[] = [];\n\n private ___Constructor: (new () => T) | undefined = undefined;\n\n constructor(initData?: I[], parent?: FieldNode, parentATributeName?: string) {\n super(undefined, parent, parentATributeName);\n this.__isPrimitive = true;\n if (initData !== undefined) {\n // eslint-disable-next-line no-console\n console.error('Use the ARRAY.Builder()');\n }\n this.__meta.typeName = `primitives.ARRAY<>`;\n }\n\n /**\n * Creates an element of type T and adds it to the beginning or end (default) of the ARRAY\n * @param initData\n * @param before\n */\n public add(initData?: I, before?: boolean): T {\n const Constructor: new () => T = this.__getConstructor();\n\n const fn = new Constructor();\n if (initData) {\n fn.__updateWithLiteral(initData);\n }\n const n = before ? 0 : this.length;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n}]`;\n fn.__meta.index = n;\n fn.__meta.isArrayNode = true;\n fn.__meta.isPristine = true;\n fn.__rootNode = this.__rootNode;\n if (before) {\n this._value.unshift(fn);\n } else {\n this._value.push(fn);\n }\n\n this.__isEmpty = false;\n this.__notifyArrayChanges(true);\n return fn;\n }\n\n /**\n *\n * @param initData\n */\n initFromLiteral(Constructor: { new (): T }, initData: I[]) {\n this.__clear();\n this.__meta.initialValue = initData;\n this.__pushWithoutNotifications(initData);\n this.__notifyArrayChanges(false);\n }\n\n /**\n * creates a literal type from a json type\n *\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __mapProtoNameJsonToJson(data: any): any {\n const literal: I[] = [];\n // create a dummy object\n const Constructor = this.__getConstructor();\n const fn = new Constructor();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data.forEach((row: any) => {\n literal.push(fn.__mapProtoNameJsonToJson(row));\n });\n return literal;\n }\n\n __updateWithLiteral(initData: I[]) {\n if (this.__parentNode !== undefined) {\n this.initFromLiteral(this.__getConstructor(), initData);\n }\n }\n\n __getFieldNodeByPath(deepPath: string = ''): FieldNode | undefined {\n const path = deepPath\n .replaceAll(/[[\\]]/g, '.')\n .split('.')\n .filter(p => p !== '');\n\n if (path.length > 0 && path[0] !== '') {\n // eslint-disable-next-line no-param-reassign\n deepPath = path.slice(1).join('.');\n if (deepPath === '') {\n if (this.value[parseInt(path[0], 10)]) {\n return this.value[parseInt(path[0], 10)] as FieldNode;\n }\n } else if (this.value[parseInt(path[0], 10)]) {\n return (\n this.value[parseInt(path[0], 10)] as FieldNode\n ).__getFieldNodeByPath(deepPath);\n }\n return undefined;\n }\n return undefined;\n }\n\n private __notifyArrayChanges(bubbles?: boolean) {\n this.__dispatchEvent(\n new CustomEvent('this-array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('this-field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n if (bubbles) {\n this.__rootNode.__meta.isPristine = false;\n // todo check if nodes in between this and root should be set to false too\n this.__meta.isPristine = false;\n\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: true,\n }),\n );\n } else {\n this.__dispatchEvent(\n new CustomEvent('array-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n this.__dispatchEvent(\n new CustomEvent('field-value-changed', {\n detail: this,\n bubbles: false,\n }),\n );\n }\n }\n\n // used by broadcast\n public get __childNodes(): T[] {\n return this._value;\n }\n\n private __getConstructor(): new () => T {\n if (this.___Constructor !== undefined) {\n return this.___Constructor;\n }\n // the __parentNode defines the type of the ARRAY<T,I>\n const fieldDescriptor = this.__parentNode!.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return fieldDescriptor?.FieldConstructor as new () => T;\n }\n\n /**\n * @function\n * @template T FieldNode\n * @template I Json like interface type\n * @param {T} Constructor - Const\n * @param {I[]} initData - Initial open-models\n * @returns {ARRAY<T, I>}\n */\n static Builder<T extends FieldNode, I>(\n Constructor: new () => T,\n initData: I[],\n ): ARRAY<T, I> {\n const a: ARRAY<T, I> = new ARRAY<T, I>();\n a.___Constructor = Constructor;\n a.initFromLiteral(Constructor, initData);\n return a;\n }\n\n toString(): string {\n // resolve parent\n const innerType = this.__parentNode?.__meta.nodeFields.find(\n f => f.fieldName === this.__meta.fieldName,\n );\n return `[object ARRAY<${innerType?.FieldConstructor.name}>]`;\n }\n\n // only used by direct invocation of the type\n __stringify(): string {\n return JSON.stringify(this.__toJson());\n }\n\n // only used by direct invocation of the type\n __toJson(): T[] {\n return this.value.map((v: FieldNode) => v.__toJson());\n }\n\n // only used by direct invocation of the type\n __toLiteral(): I[] {\n return this.value.map((v: FieldNode) => v.__toLiteral());\n }\n\n __clear() {\n this._value.length = 0;\n this.__isEmpty = true;\n this.__notifyArrayChanges(false);\n }\n\n delete(index: number): I {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0].__toLiteral();\n }\n\n deleteT(index: number): T {\n const removed = this._value.splice(index, 1);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return removed[0];\n }\n\n get value(): T[] {\n return this._value;\n }\n\n /**\n * NOT needed any more, because we use the __TypeSetter instead of the __PrimitivesSetter\n set value(arr: T[]) {\n // assigning the new array will destroy any reference to it\n // __clear the array\n this.__clear();\n // (this as any)[`_${fieldName}`].length = 0;\n // refill the array\n arr.forEach((e, i) => {\n e.__parentNode = this;\n e.__meta.fieldName = `${i}`;\n e.__meta.index = i;\n e.__meta.isArrayNode = true;\n this._value.push(e);\n });\n this.__notifyArrayChanges(true);\n }\n */\n\n get length(): number {\n return this._value.length;\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the Interface type.\n *\n * @param {I} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n at(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The at() method of Array instances takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.\n *\n * This method returns the FieldNode type.\n *\n * @param {T} index - Zero-based index of the array element to be returned, converted to an integer . Negative index counts back from the end of the array — if index < 0, index + array. length is accessed.\n */\n atT(index: number): T | undefined {\n return this._value.at(index);\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entries(): IterableIterator<[number, I]> {\n return this._value.map(t => t.__toLiteral()).entries();\n }\n\n /**\n * The entries() method of Array instances returns a new array iterator object that contains the key/ value pairs for each index in the array.\n */\n entriesT(): IterableIterator<[number, T]> {\n return this._value.entries();\n }\n\n /**\n * Map with interface type as value.\n *\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n mapI<U>(\n callbackfn: (value: I, index: number, array: I[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(t => t.__toLiteral()).map(callbackfn, thisArg);\n }\n\n /**\n * The map() method of Array instances creates a new array populated with the results of calling a provided function on every element in the calling array.\n */\n map<U>(\n callbackfn: (value: T, index: number, array: T[]) => U,\n thisArg?: unknown,\n ): U[] {\n return this._value.map(callbackfn, thisArg);\n }\n\n /**\n * The filter() method of Array instances creates a shallow copy of a portion of a given array, filtered down to just the elements from the given array that pass the test implemented by the provided function.\n * @param callbackfn\n * @param thisArg\n */\n filter(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T[] {\n return this._value.filter(callbackfn, thisArg);\n }\n\n find(\n callbackfn: (value: T, index: number, array: T[]) => boolean,\n thisArg?: unknown,\n ): T | undefined {\n return this._value.find(callbackfn, thisArg);\n }\n\n forEach(\n callbackfn: (value: T, index: number, array: T[]) => void,\n thisArg?: unknown,\n ): void {\n return this._value.forEach(callbackfn, thisArg);\n }\n\n /**\n * ...\n * This method requires a FieldNode, not the interface type\n * @param searchElement\n * @param fromIndex\n */\n includes(searchElement: T, fromIndex?: number): boolean {\n return this._value.includes(searchElement, fromIndex);\n }\n\n /**\n * ...\n * Alternatively you can use the T.__meta.index to get the index of an element.\n * This method requires a FieldNode, not the interface type.\n * @param searchElement\n * @param fromIndex\n */\n indexOf(searchElement: T, fromIndex?: number): number {\n // if searchElement is a FieldNode return __meta.index\n return this._value.indexOf(searchElement, fromIndex);\n }\n\n keys(): IterableIterator<number> {\n return this._value.keys();\n }\n\n lastIndexOf(searchElement: T, fromIndex?: number): number {\n return this._value.lastIndexOf(searchElement, fromIndex);\n }\n\n pop(): T | undefined {\n const ret = this._value.pop();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The push() method of Array instances adds the specified elements to the end of an array and returns the new length of the array.\n * Params:\n * element1 … elementN – The element(s) to add to the end of the array.\n * Returns:\n * The new length property of the object upon which the method was called\n * @param items\n */\n push(...items: I[]): number {\n const n = this.__pushWithoutNotifications(items);\n this.__notifyArrayChanges(true);\n return n;\n }\n\n /**\n * Moves an item in the array\n * @param fromIndex\n * @param toIndex\n */\n moveItem(fromIndex: number, toIndex: number) {\n const e = this._value[fromIndex];\n this._value.splice(fromIndex, 1);\n this._value.splice(toIndex, 0, e);\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n }\n\n private __pushWithoutNotifications(items: I[]) {\n let n: number = 0;\n const Constructor: new () => T = this.__getConstructor();\n items.forEach((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n n = this._value.push(fn);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.fieldName = `[${n - 1}]`;\n fn.__meta.index = n - 1;\n fn.__meta.isArrayNode = true;\n fn.__meta.isPristine = true;\n });\n\n this.__isEmpty = false;\n return n;\n }\n\n reverse(): T[] {\n const ret = this._value.reverse();\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n /**\n * The shift() method of Array instances removes the first element from an array and returns that removed element.\n *\n * This method changes the length of the array.\n */\n shift(): I | undefined {\n const t = this._value.shift();\n this.__notifyArrayChanges(true);\n return t?.__toLiteral();\n }\n\n /**\n * The slice() method of Array instances returns a shallow copy of a portion of an array into a new array object selected from start to end (end not included) where start and end represent the index of items in that array. The original array will not be modified.\n * #### Params:\n * start – Zero-based index at which to start extraction, converted to an integer .\n * Negative index counts back from the end of the array — if start < 0, start + array. length is used.\n * If start < -array. length or start is omitted, 0 is used.\n * If start >= array. length, nothing is extracted.\n *\n * end – Zero-based index at which to end extraction, converted to an integer . slice() extracts up to but not including end.\n * Negative index counts back from the end of the array — if end < 0, end + array. length is used.\n * If end < -array. length, 0 is used.\n * If end >= array. length or end is omitted, array. length is used, causing all elements until the end to be extracted.\n * If end is positioned before or at start after normalization, nothing is extracted.\n *\n */\n slice(start?: number, end?: number): I[] {\n const tar = this._value.slice(start, end);\n const ret = tar.map(t => t.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n splice(start: number, deleteCount?: number): I[];\n\n splice(start: number, deleteCount: number, ...items: I[]): I[];\n\n splice(start: number, deleteCount?: number, ...items: I[]): I[] {\n if (deleteCount !== undefined) {\n const Constructor: new () => T = this.__getConstructor();\n const i: I[] = this._value\n .splice(\n start,\n deleteCount,\n ...items.map((literal: I) => {\n const fn = new Constructor();\n fn.__updateWithLiteral(literal);\n fn.__rootNode = this.__rootNode;\n fn.__parentNode = this;\n fn.__meta.isArrayNode = true;\n return fn;\n }),\n )\n .map(item => item.__toLiteral());\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n return i;\n }\n const ret = this._value.splice(start).map(item => item.__toLiteral());\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n spliceT(start: number, deleteCount?: number): T[];\n\n spliceT(start: number, deleteCount: number, ...items: T[]): T[];\n\n spliceT(start: number, deleteCount?: number, ...items: T[]): T[] {\n let ret: T[] = [];\n if (deleteCount !== undefined) {\n ret = this.value.splice(start, deleteCount, ...items);\n } else {\n ret = this.value.splice(start);\n }\n\n this._rebuildIndexAndFieldName();\n this.__notifyArrayChanges(true);\n\n return ret;\n }\n\n /**\n * The unshift() method of Array instances adds the specified elements to the beginning of an array and returns the new length of the array.\n * #### Params:\n * - **element1 … elementN** The elements to add to the front of the arr.\n *\n * #### Returns:\n * The new length property of the object upon which the method was called.\n *\n */\n unshift(...items: T[]): number {\n const ret = this._value.unshift(...items);\n this.__notifyArrayChanges(true);\n return ret;\n }\n\n values(): IterableIterator<T> {\n return this._value.values();\n }\n\n private _rebuildIndexAndFieldName() {\n this._value.forEach((fn: T, i) => {\n // eslint-disable-next-line no-param-reassign\n fn.__meta.fieldName = `[${i}]`;\n // eslint-disable-next-line no-param-reassign\n fn.__meta.index = i;\n });\n }\n}\n"]}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "homepage": "https://github.com/eclipse/eclipsefuro-web/tree/main/packages",
6
6
  "repository": "git@github.com:eclipse/eclipsefuro-web.git",
7
7
  "author": "eclipse furo",
8
- "version": "1.7.1",
8
+ "version": "1.7.2",
9
9
  "type": "module",
10
10
  "main": "dist/index.js",
11
11
  "module": "dist/index.js",
@@ -83,5 +83,5 @@
83
83
  "prettier --write"
84
84
  ]
85
85
  },
86
- "gitHead": "b9be5b969692921f6465849470545f0c58360077"
86
+ "gitHead": "c01e9f4c1fd7e614d70af36a515447d6bafb2b8a"
87
87
  }